U
    9if                     @  s   d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	 ddl
mZ edZe	 dd	d
ddZe	 ddddddZd 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)Sitemap status checking and resubmission.    )annotationsN)	HttpError)RateLimiterretry_on_api_error)SitemapStatusseo_optimizerstrz
list[dict])site_urlreturnc                 C  s    |   j|d }|dg S )z'List all submitted sitemaps for a site.)siteUrlZsitemap)sitemapslistexecuteget)servicer	   response r   ,/opt/web_system/seo_auto/src/api/sitemaps.py_list_sitemaps   s    r   None)r	   sitemap_urlr
   c                 C  s   |   j||d  dS )zSubmit (or resubmit) a sitemap.)r   ZfeedpathN)r   submitr   )r   r	   r   r   r   r   _submit_sitemap   s    r   zRateLimiter | Nonezlist[SitemapStatus])r	   rate_limiterr
   c                 C  s   |r| | t| |}g }|D ]n}t|dd|dd|dd|dd|ddt|dd	t|d
d	|dg d}|| q tdt|| |S )zjGet status of all submitted sitemaps for a site.

    Returns:
        List of SitemapStatus objects.
    path ZlastSubmittedZlastDownloadedZ	isPendingFZisSitemapsIndexwarningsr   errorscontents)r   last_submittedlast_downloaded
is_pendingis_sitemaps_indexr   r   r   zFound %d sitemaps for %s)	acquirer   r   r   intappendloggerinfolen)r   r	   r   Zraw_sitemapsstatusesZsmstatusr   r   r   get_sitemap_statuses   s,    









  r+      r$   bool)r	   r   max_retriesr   r
   c                 C  s   t d|d D ]}z0|r"|| t| || td|| W  dS  tk
r } z,td|||| ||k r|td|  W 5 d}~X Y qX qdS )zlResubmit a sitemap with retries.

    Returns:
        True if resubmission succeeded, False otherwise.
       z1Sitemap resubmitted successfully: %s (attempt %d)Tz3Sitemap resubmission failed: %s (attempt %d/%d): %s   NF)	ranger#   r   r&   r'   r   warningtimesleep)r   r	   r   r.   r   attempter   r   r   resubmit_sitemap@   s,    
    "r7   z	list[str])r	   known_sitemap_urlsr.   r   r
   c           
      C  s   t | ||}dd |D }|D ](}||krtd| t| |||| q|D ]2}|jdkrLtd|j|j t| ||j|| qLt | ||}	|	S )a  Check sitemap statuses and resubmit those with errors.

    Args:
        service: Webmasters v3 service.
        site_url: GSC property URL.
        known_sitemap_urls: Expected sitemap URLs from config.
        max_retries: Max resubmission attempts per sitemap.
        rate_limiter: Optional rate limiter.

    Returns:
        Updated list of SitemapStatus after resubmission attempts.
    c                 S  s   h | ]
}|j qS r   )r   ).0sr   r   r   	<setcomp>w   s     z%check_and_resubmit.<locals>.<setcomp>zSubmitting new sitemap: %sr   u,   Sitemap has errors (%d): %s — resubmitting)r+   r&   r'   r7   r   r2   r   )
r   r	   r8   r.   r   r)   Zsubmitted_pathsurlr*   Zupdated_statusesr   r   r   check_and_resubmitb   s,    
     r=   )N)r,   N)r,   N)__doc__
__future__r   loggingr3   googleapiclient.errorsr   src.api.rate_limiterr   r   src.models.data_modelsr   	getLoggerr&   r   r   r+   r7   r=   r   r   r   r   <module>   s&   
 '  &  