o
    ˜¨ÊhO#  ã                   @   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   úR/var/www/html/env/lib/python3.10/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().
    Úsitemapz%s?%sN)Ú_get_sitemap_full_urlr   r   )Úsitemap_urlÚping_urlÚsitemap_uses_httpsÚsitemap_full_urlÚparamsr   r   r   Úping_google   s   
r   c                 C   sš   t  d¡s	tdƒ‚| d u r-ztdƒ} W n ty,   ztdƒ} W n	 ty)   Y nw Y nw | d u r5tdƒ‚t  d¡}|j ¡ }|rCd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   ÚSiteÚ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
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 w t|ƒr"| 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    | j d ur| j S dd„ tjD ƒS )Nc                 S   s   g | ]\}}|‘qS r   r   )Ú.0r2   Ú_r   r   r   Ú
<listcomp>b   s    z&Sitemap._languages.<locals>.<listcomp>)Ú	languagesr   Ú	LANGUAGES©r-   r   r   r   Ú
_languages_   s   
zSitemap._languagesc                    s(   ˆ j r‡ fdd„ˆ  ¡ D ƒ}|S ˆ  ¡ S )Nc                    s"   g | ]}ˆ   ¡ D ]}||f‘qqS r   )Úitems)r4   r2   r/   r9   r   r   r6   h   s    ýþÿz"Sitemap._items.<locals>.<listcomp>)r,   r:   r;   )r-   r;   r   r9   r   Ú_itemsd   s   
þzSitemap._itemsc                 C   sT   | j r$|\}}t |p|¡� |  d|¡W  d   ƒ S 1 sw   Y  |  d|¡S )NÚlocation)r,   r
   Úoverrider3   )r-   r/   Úforce_lang_codeÚobjr2   r   r   r   Ú	_locationp   s   
 ÿzSitemap._locationc                 C   s   t  |  ¡ | j¡S r(   )r   Ú	Paginatorr<   Úlimitr9   r   r   r   r   x   s   zSitemap.paginatorc                 C   s   g S r(   r   r9   r   r   r   r;   |   s   zSitemap.itemsc                 C   s   |  ¡ S r(   )Úget_absolute_url©r-   r/   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-   rI   r   r   r   Úget_protocol‚   s   û	zSitemap.get_protocolc                 C   sV   |d u r(t  d¡r t  d¡}z|j ¡ }W n
 |jy   Y nw |d u r(t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"   ÚDoesNotExistr   r#   )r-   Úsiter$   r   r   r   Ú
get_domain�   s   

ÿÿzSitemap.get_domainé   c                 C   s"   |   |¡}|  |¡}|  |||¡S r(   )rL   rO   Ú_urls)r-   ÚpagerN   rI   r#   r   r   r   Úget_urls    s   

zSitemap.get_urlsc                    sP   t ˆ dƒsd S tˆ jƒr%zt‡ fdd„ˆ  ¡ D ƒƒW S  ty$   Y d S w ˆ jS )NÚlastmodc                    s   g | ]}ˆ   |¡‘qS r   )rT   )r4   r/   r9   r   r   r6   ª   s    z.Sitemap.get_latest_lastmod.<locals>.<listcomp>)Úhasattrr+   rT   Úmaxr;   Ú	TypeErrorr9   r   r9   r   Úget_latest_lastmod¥   s   

ÿzSitemap.get_latest_lastmodc              	   C   sV  g }d }d}| j  |¡}|jD ]’}|› d|› |  |¡› �}	|  d|¡}
|  d|¡}|r;|d u}|r;|d u s9||kr;|}||	||  d|¡t|
d urJ|
ndƒg dœ}| jrœ| jrœ|  ¡ D ]}|› d|› |  ||¡› �}	|d  	|	|d	œ¡ qZ| j
rœtj}|› d|› |  ||¡› �}	|	 d
|› d
�d
d¡}	|d  	|	dd	œ¡ | 	|¡ q|r©|r©|| _|S )NTz://ÚpriorityrT   Ú
changefreqÚ )r/   r=   rT   rZ   rY   Ú
alternatesr\   )r=   r2   ú/rP   z	x-default)r   rR   Úobject_listrA   r3   Ústrr,   r\   r:   ÚappendÚ	x_defaultr   ÚLANGUAGE_CODEÚreplaceÚlatest_lastmod)r-   rR   rI   r#   Úurlsrd   Úall_items_lastmodÚpaginator_pager/   ÚlocrY   rT   Úurl_infor2   r   r   r   rQ   °   sR   

ú	þÿþÿzSitemap._urlsr(   )rP   NN)r   r   r   rC   rI   r,   r7   r\   ra   r3   r:   r<   rA   Úpropertyr   r;   r=   rL   rO   rS   rX   rQ   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p|| _d S )NÚquerysetÚ
date_field)rl   Úgetrm   rY   rZ   rI   )r-   Ú	info_dictrY   rZ   rI   r   r   r   Ú__init__ë   s
   
zGenericSitemap.__init__c                 C   s
   | j  ¡ S r(   )rl   Úfilterr9   r   r   r   r;   ò   s   
zGenericSitemap.itemsc                 C   s   | j d urt|| j ƒS d S r(   )rm   r)   rE   r   r   r   rT   ö   s   
zGenericSitemap.lastmodc                 C   s0   | j d ur| j d| j  ¡j| j dd� ¡ S d S )Nú-T)Úflat)rm   rl   Úorder_byÚvalues_listÚfirstr9   r   r   r   rX   û   s   
ÿýz!GenericSitemap.get_latest_lastmod)NNN)	r   r   r   rY   rZ   rp   r;   rT   rX   r   r   r   r   rk   ç   s    
rk   )T)rJ   Úurllib.parser   Úurllib.requestr   Údjango.appsr   r   Údjango.confr   Údjango.corer   Údjango.core.exceptionsr   Údjango.urlsr   r	   Údjango.utilsr
   Údjango.utils.deprecationr   ÚPING_URLÚ	Exceptionr   r   r   r'   rk   r   r   r   r   Ú<module>   s"    
 +