o
    `Zh                     @   s^   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
 G dd dZG dd	 d	eZd
S )    )apps)settings)	paginator)ImproperlyConfigured)translationc                   @   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 w t|r"| jr|\}}||S |S N)getattrAttributeErrorcallablei18n)selfnameitemdefaultattr	lang_code r   W/var/www/html/lang_env/lib/python3.10/site-packages/django/contrib/sitemaps/__init__.py_get   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>1   s    z&Sitemap._languages.<locals>.<listcomp>)	languagesr   Z	LANGUAGESr   r   r   r   r   .   s   
zSitemap._languagesc                    s(    j r fdd  D }|S   S )Nc                    s$   g | ]}  |D ]}||fq	qS r   )r   )r   r   r   r   r   r   r   7   s    z"Sitemap._items.<locals>.<listcomp>)r   items)r   r   r   r   r   _items3   s   
zSitemap._itemsc                 C   sT   | j r$|\}}t|p| | d|W  d    S 1 sw   Y  | d|S )Nlocation)r   r   overrider   )r   r   Zforce_lang_codeobjr   r   r   r   	_location?   s   
 zSitemap._locationc                 C   s   t |  | jS r   )r   Z	Paginatorr   limitr   r   r   r   r   G   s   zSitemap.paginatorc                 C   s   g S r   r   r   r   r   r   r   K   s   zSitemap.itemsc                 C   s   |  S r   )Zget_absolute_urlr   r   r   r   r    N   s   zSitemap.locationc                 C   s   | j p|pdS )Nhttps)protocol)r   r&   r   r   r   get_protocolQ   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 )Nzdjango.contrib.sitesz
sites.SitezbTo use sitemaps, either enable the sites framework or pass a Site/RequestSite object in your view.)django_appsis_installedZ	get_modelobjectsZget_currentZDoesNotExistr   domain)r   siteZSiter   r   r   
get_domainU   s   

zSitemap.get_domain   c                 C   s"   |  |}| |}| |||S r   )r'   r-   _urls)r   pager,   r&   r+   r   r   r   get_urlse   s   

zSitemap.get_urlsc                    sT   t  dsd S t jr'zt fdd  D d dW S  ty&   Y d S w  jS )Nlastmodc                    s   g | ]}  |qS r   )r2   )r   r   r   r   r   r   o   s    z.Sitemap.get_latest_lastmod.<locals>.<listcomp>)r   )hasattrr   r2   maxr   	TypeErrorr   r   r   r   get_latest_lastmodj   s   

 zSitemap.get_latest_lastmodc              	   C   sj  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	 	|	|d
 q_| j
rtj|v rtj}| d| | || }	|	d| ddd}	|d	 	|	dd
 |	| q|r|r|| _|S )NTz://priorityr2   
changefreq )r   r    r2   r8   r7   
alternatesr   r:   )r    r   /r.   z	x-default)r   r0   Zobject_listr#   r   strr   r:   r   append	x_defaultr   ZLANGUAGE_CODEreplacelatest_lastmod)r   r0   r&   r+   urlsr@   Zall_items_lastmodZpaginator_pager   locr7   r2   Zurl_infoZitem_languagesr   r   r   r   r/   u   sT   

	zSitemap._urlsr   )r.   NN)__name__
__module____qualname__r$   r&   r   r   r:   r>   r   r   r   r   r#   propertyr   r   r    r'   r-   r1   r6   r/   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)rH   getrI   r7   r8   r&   )r   Z	info_dictr7   r8   r&   r   r   r   __init__   s
   
zGenericSitemap.__init__c                 C   s
   | j  S r   )rH   filterr   r   r   r   r      s   
zGenericSitemap.itemsc                 C   s   | j d urt|| j S d S r   )rI   r	   r   r   r   r   r2      s   
zGenericSitemap.lastmodc                 C   s0   | j d ur| jd| j  j| j dd S d S )N-T)Zflat)rI   rH   Zorder_byZvalues_listfirstr   r   r   r   r6      s   
z!GenericSitemap.get_latest_lastmod)NNN)	rC   rD   rE   r7   r8   rK   r   r2   r6   r   r   r   r   rG      s    
rG   N)Zdjango.appsr   r(   Zdjango.confr   Zdjango.corer   Zdjango.core.exceptionsr   Zdjango.utilsr   r   rG   r   r   r   r   <module>   s     &