U
    5øi8   ã                   @   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   úD/tmp/pip-unpacked-wheel-gcyiijx6/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 kr^ztdƒ} W n6 tk
r\   ztdƒ} W n tk
rV   Y nX Y nX | d krnt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
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S ) ÚSitemapiPÃ  NFc                 C   sJ   zt | |ƒ}W n tk
r&   | Y S X t|ƒrF| jr>|\}}||ƒS |S ©N)ÚgetattrÚAttributeErrorÚcallableÚi18n)ÚselfÚnameÚitemÚdefaultÚattrÚ	lang_coder   r   r   Ú_getM   s    
zSitemap._getc                 C   s    | j d k	r| j S dd„ tjD ƒS )Nc                 S   s   g | ]\}}|‘qS r   r   )Ú.0r.   Ú_r   r   r   Ú
<listcomp>]   s     z&Sitemap._languages.<locals>.<listcomp>)Ú	languagesr   Z	LANGUAGES©r)   r   r   r   Ú
_languagesZ   s    
zSitemap._languagesc                    s(   ˆ j r ‡ fdd„ˆ  ¡ D ƒ}|S ˆ  ¡ S )Nc                    s"   g | ]}ˆ   ¡ D ]}||f‘qqS r   )Úitems)r0   r.   r+   r4   r   r   r2   c   s   
 þz"Sitemap._items.<locals>.<listcomp>)r(   r5   r6   )r)   r6   r   r4   r   Ú_items_   s    
þzSitemap._itemsc              
   C   sH   | j r<|\}}t |p|¡� |  d|¡W  5 Q R £ S Q R X |  d|¡S )NÚlocation)r(   r
   Úoverrider/   )r)   r+   Zforce_lang_codeÚobjr.   r   r   r   Ú	_locationk   s
    zSitemap._locationc                 C   s   t  |  ¡ | j¡S r$   )r   Z	Paginatorr7   Úlimitr4   r   r   r   r   s   s    zSitemap.paginatorc                 C   s   g S r$   r   r4   r   r   r   r6   w   s    zSitemap.itemsc                 C   s   |  ¡ S r$   )Zget_absolute_url©r)   r+   r   r   r   r8   z   s    zSitemap.locationc                 C   s0   | j d kr"|d k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)   rA   r   r   r   Úget_protocol}   s    û	zSitemap.get_protocolc                 C   sX   |d krRt  d¡rBt  d¡}z|j ¡ }W n |jk
r@   Y nX |d krRt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$   )rD   rF   Ú_urls)r)   ÚpagerE   rA   r    r   r   r   Úget_urls›   s    

zSitemap.get_urlsc              	   C   sb  g }d }d}| j  |¡}|jD �]*}|› d|› |  |¡› �}	|  d|¡}
|  d|¡}|rx|d k	}|rx|d kst||krx|}||	||  d|¡t|
d k	r–|
ndƒg dœ}| j�r@| j�r@|  ¡ D ]2}|› d|› |  ||¡› �}	|d  	|	|d	œ¡ qº| j
�r@tj}|› d|› |  ||¡› �}	|	 d
|› d
�d
d¡}	|d  	|	dd	œ¡ | 	|¡ q|�r^|�r^|| _|S )NTz://ÚpriorityÚlastmodÚ
changefreqÚ )r+   r8   rL   rM   rK   Ú
alternatesrO   )r8   r.   ú/rG   z	x-default)r   rI   Zobject_listr;   r/   Ústrr(   rO   r5   ÚappendÚ	x_defaultr   ZLANGUAGE_CODEÚreplaceÚlatest_lastmod)r)   rI   rA   r    ÚurlsrU   Zall_items_lastmodZpaginator_pager+   ÚlocrK   rL   Zurl_infor.   r   r   r   rH       sT    ÿÿ
ú	þ
þzSitemap._urls)N)N)N)N)rG   NN)r   r   r   r<   rA   r(   r3   rO   rS   r/   r5   r7   r;   Úpropertyr   r6   r8   rD   rF   rJ   rH   r   r   r   r   r#   8   s$   





r#   c                   @   s.   e Zd ZdZdZd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)rZ   Úgetr[   rK   rM   rA   )r)   Z	info_dictrK   rM   rA   r   r   r   Ú__init__Ö   s
    
zGenericSitemap.__init__c                 C   s
   | j  ¡ S r$   )rZ   Úfilterr4   r   r   r   r6   Ý   s    zGenericSitemap.itemsc                 C   s   | j d k	rt|| j ƒS d S r$   )r[   r%   r=   r   r   r   rL   á   s    
zGenericSitemap.lastmod)NNN)r   r   r   rK   rM   r]   r6   rL   r   r   r   r   rY   Ò   s
   
rY   )T)rB   Ú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#   rY   r   r   r   r   Ú<module>   s    
 