U
    1iX                     @  s   d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	 ddl
mZ edZe	 ddd	d
ddZdddddddddZdddddddddZdS )z)URL Inspection API with quota management.    )annotationsN)	HttpError)QuotaTrackerRateLimiterretry_on_api_error)IndexStatusseo_optimizerstrdict)site_urlinspection_urlreturnc                 C  s.   ||d}|    j|d }|di S )z(Execute a single URL inspection request.)ZinspectionUrlsiteUrl)bodyZinspectionResult)ZurlInspectionindexinspectexecuteget)servicer   r   request_bodyresponse r   2/opt/web_system/seo_auto/src/api/url_inspection.py_inspect_url   s
    r   zQuotaTracker | NonezRateLimiter | NonezIndexStatus | None)r   urlquota_trackerrate_limiterr   c              
   C  s   |r|  std dS |r(| | zt| ||}W nF tk
r~ } z(td|| t|dt|d W Y S d}~X Y nX |di }|dd}|d	d}	|d
d}
|dd}|dd}|dd}|dko|
dk}t|||	|
||||dS )aA  Inspect a single URL's index status.

    Args:
        service: Search Console v1 service.
        site_url: GSC property URL.
        url: URL to inspect.
        quota_tracker: Optional daily quota tracker.
        rate_limiter: Optional rate limiter.

    Returns:
        IndexStatus or None if quota exhausted.
    z$URL Inspection daily quota exhaustedNz URL Inspection failed for %s: %sERROR)r   verdictcoverage_stateZindexStatusResultr    ZcoverageStateZindexingStateZpageFetchStateZrobotsTxtStateZlastCrawlTimeZPASSZINDEXING_ALLOWED)r   r   r   indexing_statepage_fetch_staterobots_txt_statelast_crawl_time
is_indexed)	acquireloggerwarningr   r   errorr   r	   r   )r   r   r   r   r   resulteZindex_resultr   r   r!   r"   r#   r$   r%   r   r   r   inspect_url   s8    

(r,   z	list[str]zlist[IndexStatus])r   urlsr   r   r   c                 C  s   g }t |}t|dD ]p\}}t| ||||d}	|	dkrJtd||  q||	 |d dksh||kr|rr|jnd}
td|||
 qtd	d
 |D }td||t |t | |S )au  Inspect multiple URLs with progress logging.

    Args:
        service: Search Console v1 service.
        site_url: GSC property URL.
        urls: List of URLs to inspect.
        quota_tracker: Optional daily quota tracker.
        rate_limiter: Optional rate limiter.

    Returns:
        List of IndexStatus results (may be shorter than urls if quota runs out).
       )r   r   Nu6   Stopping batch inspection at %d/%d — quota exhausted
   r   zN/Az4URL Inspection progress: %d/%d (quota remaining: %s)c                 s  s   | ]}|j rd V  qdS )r.   N)r%   ).0rr   r   r   	<genexpr>}   s      z batch_inspect.<locals>.<genexpr>z<Batch inspection complete for %s: %d/%d indexed (%d checked))	len	enumerater,   r'   r(   append	remaininginfosum)r   r   r-   r   r   resultstotalir   statusr6   indexedr   r   r   batch_inspectQ   sF        
     r>   )NN)NN)__doc__
__future__r   logginggoogleapiclient.errorsr   src.api.rate_limiterr   r   r   src.models.data_modelsr   	getLoggerr'   r   r,   r>   r   r   r   r   <module>   s   
  ;  