a
    Lcòfe$  ã                   @   sÈ   d dl Z d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ dZG dd„ deƒZdedfdd„Zddd„ZG dd„ dƒZG dd„ deƒZdS )é    N)Ú	urlencode)Úurlopen)Úapps)Úsettings)Ú	paginator)ÚImproperlyConfigured)ÚNoReverseMatchÚreverse)Útranslation)ÚRemovedInDjango50Warningz,https://www.google.com/webmasters/tools/pingc                   @   s   e Zd ZdS )ÚSitemapNotFoundN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú]/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/django/contrib/sitemaps/__init__.pyr      s   r   Tc                 C   s*   t | |ƒ}td|iƒ}td||f ƒ dS )a+  
    Alert Google that the sitemap for the current site has been updated.
    If sitemap_url is provided, it should be an absolute path to the sitemap
    for this site -- e.g., '/sitemap.xml'. If sitemap_url is not provided, this
    function will attempt to deduce it by using urls.reverse().
    Zsitemapz%s?%sN)Ú_get_sitemap_full_urlr   r   )Úsitemap_urlZping_urlÚsitemap_uses_httpsZsitemap_full_urlÚparamsr   r   r   Úping_google   s    
r   c                 C   sš   t  d¡stdƒ‚| d u rZztdƒ} W n2 tyX   ztdƒ} W n tyR   Y n0 Y n0 | d u rjtdƒ‚t  d¡}|j ¡ }|r†dnd}d	||j	| f S )
Núdjango.contrib.siteszAping_google requires django.contrib.sites, which isn't installed.z#django.contrib.sitemaps.views.indexz%django.contrib.sitemaps.views.sitemapzPYou didn't provide a sitemap_url, and the sitemap URL couldn't be auto-detected.ú
sites.SiteÚhttpsÚhttpz	%s://%s%s)
Údjango_appsÚis_installedr   r	   r   r   Ú	get_modelÚobjectsÚget_currentÚdomain)r   r   ÚSiteZcurrent_siteÚschemer   r   r   r       s(    
ÿÿ

r   c                   @   sš   e Zd ZdZdZdZdZdZdZddd„Z	dd„ Z
dd	„ Zd
d„ Zd dd„Zedd„ ƒZdd„ Zdd„ Zd!dd„Zd"dd„Zd#dd„Zdd„ Zdd„ ZdS )$ÚSitemapiPÃ  NFc                 C   sH   zt | |ƒ}W n ty$   | Y S 0 t|ƒrD| jr<|\}}||ƒS |S ©N)ÚgetattrÚAttributeErrorÚcallableÚi18n)ÚselfÚnameÚitemÚdefaultÚattrÚ	lang_coder   r   r   Ú_getR   s    
zSitemap._getc                 C   s   |   ¡ S )z+Languages for which this item is displayed.)Ú
_languages©r)   r+   r   r   r   Úget_languages_for_item_   s    zSitemap.get_languages_for_itemc                 C   s    | j d ur| j S dd„ tjD ƒS )Nc                 S   s   g | ]\}}|‘qS r   r   )Ú.0r.   Ú_r   r   r   Ú
<listcomp>f   ó    z&Sitemap._languages.<locals>.<listcomp>)Ú	languagesr   Z	LANGUAGES©r)   r   r   r   r0   c   s    
zSitemap._languagesc                    s(   ˆ j r ‡ fdd„ˆ  ¡ D ƒ}|S ˆ  ¡ S )Nc                    s$   g | ]}ˆ   |¡D ]}||f‘qqS r   )r2   )r3   r+   r.   r8   r   r   r5   l   s   þz"Sitemap._items.<locals>.<listcomp>)r(   Úitems)r)   r9   r   r8   r   Ú_itemsh   s    
þzSitemap._itemsc                 C   sT   | j rH|\}}t |p|¡� |  d|¡W  d   ƒ S 1 s>0    Y  |  d|¡S )NÚlocation)r(   r
   Úoverrider/   )r)   r+   Zforce_lang_codeÚobjr.   r   r   r   Ú	_locationt   s
    *zSitemap._locationc                 C   s   t  |  ¡ | j¡S r$   )r   Z	Paginatorr:   Úlimitr8   r   r   r   r   |   s    zSitemap.paginatorc                 C   s   g S r$   r   r8   r   r   r   r9   €   s    zSitemap.itemsc                 C   s   |  ¡ S r$   )Zget_absolute_urlr1   r   r   r   r;   ƒ   s    zSitemap.locationc                 C   s0   | j d u r"|d u r"tjdtdd� | j p.|p.dS )Nz€The default sitemap protocol will be changed from 'http' to 'https' in Django 5.0. Set Sitemap.protocol to silence this warning.é   )ÚcategoryÚ
stacklevelr   )ÚprotocolÚwarningsÚwarnr   )r)   rC   r   r   r   Úget_protocol†   s    û	zSitemap.get_protocolc                 C   sV   |d u rPt  d¡r@t  d¡}z|j ¡ }W n |jy>   Y n0 |d u rPtdƒ‚|jS )Nr   r   zbTo use sitemaps, either enable the sites framework or pass a Site/RequestSite object in your view.)r   r   r   r   r   ZDoesNotExistr   r    )r)   Úsiter!   r   r   r   Ú
get_domain”   s    

ÿzSitemap.get_domainé   c                 C   s"   |   |¡}|  |¡}|  |||¡S r$   )rF   rH   Ú_urls)r)   ÚpagerG   rC   r    r   r   r   Úget_urls¤   s    

zSitemap.get_urlsc                    sZ   t ˆ dƒsd S tˆ jƒrPz t‡ fdd„ˆ  ¡ D ƒd d�W S  tyL   Y d S 0 nˆ jS d S )NÚlastmodc                    s   g | ]}ˆ   |¡‘qS r   )rM   )r3   r+   r8   r   r   r5   ®   r6   z.Sitemap.get_latest_lastmod.<locals>.<listcomp>)r,   )Úhasattrr'   rM   Úmaxr9   Ú	TypeErrorr8   r   r8   r   Úget_latest_lastmod©   s    

 
zSitemap.get_latest_lastmodc              	   C   sx  g }d }d}| j  |¡}|jD �]@}|› d|› |  |¡› �}	|  d|¡}
|  d|¡}|rx|d u}|rx|d u st||krx|}||	||  d|¡t|
d ur–|
ndƒg dœ}| j�rV| j�rV|  |d ¡}|D ]2}|› d|› |  ||¡› �}	|d	  	|	|d
œ¡ qÄ| j
�rVtj|v �rVtj}|› d|› |  ||¡› �}	|	 d|› d�dd¡}	|d	  	|	dd
œ¡ | 	|¡ q|�rt|�rt|| _|S )NTz://ÚpriorityrM   Ú
changefreqÚ )r+   r;   rM   rS   rR   Ú
alternatesr   rU   )r;   r.   ú/rI   z	x-default)r   rK   Zobject_listr>   r/   Ústrr(   rU   r2   ÚappendÚ	x_defaultr   ZLANGUAGE_CODEÚreplaceÚlatest_lastmod)r)   rK   rC   r    Úurlsr[   Zall_items_lastmodZpaginator_pager+   ÚlocrR   rM   Zurl_infoZitem_languagesr.   r   r   r   rJ   ´   sZ    ÿÿ
ú	þÿþÿzSitemap._urls)N)N)N)N)rI   NN)r   r   r   r?   rC   r(   r7   rU   rY   r/   r2   r0   r:   r>   Úpropertyr   r9   r;   rF   rH   rL   rQ   rJ   r   r   r   r   r#   =   s(   





r#   c                   @   s6   e Zd ZdZdZd
dd„Zdd„ Zdd„ Zdd	„ ZdS )ÚGenericSitemapNc                 C   s>   |d | _ | d¡| _| jp|| _| jp*|| _| jp6|| _d S )NÚquerysetÚ
date_field)r`   Úgetra   rR   rS   rC   )r)   Z	info_dictrR   rS   rC   r   r   r   Ú__init__ð   s
    
zGenericSitemap.__init__c                 C   s
   | j  ¡ S r$   )r`   Úfilterr8   r   r   r   r9   ÷   s    zGenericSitemap.itemsc                 C   s   | j d urt|| j ƒS d S r$   )ra   r%   r1   r   r   r   rM   û   s    
zGenericSitemap.lastmodc                 C   s0   | j d ur,| j d| j  ¡j| j dd� ¡ S d S )Nú-T)Zflat)ra   r`   Zorder_byZvalues_listÚfirstr8   r   r   r   rQ      s    
ÿÿz!GenericSitemap.get_latest_lastmod)NNN)	r   r   r   rR   rS   rc   r9   rM   rQ   r   r   r   r   r_   ì   s   
r_   )T)rD   Úurllib.parser   Úurllib.requestr   Zdjango.appsr   r   Zdjango.confr   Zdjango.corer   Zdjango.core.exceptionsr   Zdjango.urlsr   r	   Zdjango.utilsr
   Zdjango.utils.deprecationr   ZPING_URLÚ	Exceptionr   r   r   r#   r_   r   r   r   r   Ú<module>   s    
 0