B
    ¨0H[‘  ã               @   s¤   d dl Z d dlmZmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ i add„ ZG d	d
„ d
ejƒZG dd„ dejƒZdd„ Zejeed� ejeed� dS )é    N)ÚImproperlyConfiguredÚValidationError)Úmodels)Ú
pre_deleteÚpre_save)Úsplit_domain_port)Úgettext_lazyc                s8   ˆ sdS ‡ fdd„t jD ƒ}t|ƒr4ttdƒdd�‚dS )z\
    Validate that the given value contains no whitespaces to prevent common
    typos.
    Nc             3   s   | ]}|ˆ kV  qd S )N© )Ú.0Ús)Úvaluer	   ú_C:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\django\contrib\sites\models.pyú	<genexpr>   s    z0_simple_domain_name_validator.<locals>.<genexpr>z2The domain name cannot contain any spaces or tabs.Úinvalid)Úcode)ÚstringÚ
whitespaceÚanyr   Ú_)r   Zchecksr	   )r   r   Ú_simple_domain_name_validator   s    r   c               @   s:   e Zd ZdZdd„ Zdd„ Zddd„Zd	d
„ Zdd„ ZdS )ÚSiteManagerTc             C   s$   |t kr| j|d�}|t |< t | S )N)Úpk)Ú
SITE_CACHEÚget)ÚselfÚsite_idÚsiter	   r	   r   Ú_get_site_by_id   s    zSiteManager._get_site_by_idc             C   sl   |  ¡ }y |tkr"| j|d�t|< t| S  tjk
rf   t|ƒ\}}|tkr^| j|d�t|< t| S X d S )N)Zdomain__iexact)Úget_hostr   r   ÚSiteÚDoesNotExistr   )r   ÚrequestÚhostÚdomainÚportr	   r	   r   Ú_get_site_by_request$   s    z SiteManager._get_site_by_requestNc             C   sB   ddl m} t|ddƒr(|j}|  |¡S |r6|  |¡S tdƒ‚dS )a  
        Return the current Site based on the SITE_ID in the project's settings.
        If SITE_ID isn't defined, return the site with domain matching
        request.get_host(). The ``Site`` object is cached the first time it's
        retrieved from the database.
        r   )ÚsettingsÚSITE_IDÚ zÏYou're using the Django "sites framework" without having set the SITE_ID setting. Create a site in your database and set the SITE_ID setting or pass a request to Site.objects.get_current() to fix this error.N)Zdjango.confr&   Úgetattrr'   r   r%   r   )r   r!   r&   r   r	   r	   r   Úget_current2   s    

zSiteManager.get_currentc             C   s   i a dS )z Clear the ``Site`` object cache.N)r   )r   r	   r	   r   Úclear_cacheG   s    zSiteManager.clear_cachec             C   s   | j |d�S )N)r#   )r   )r   r#   r	   r	   r   Úget_by_natural_keyL   s    zSiteManager.get_by_natural_key)N)	Ú__name__Ú
__module__Ú__qualname__Zuse_in_migrationsr   r%   r*   r+   r,   r	   r	   r	   r   r      s   
r   c               @   sZ   e Zd Zejedƒdegdd�Zejedƒdd�Ze	ƒ Z
G dd	„ d	ƒZd
d„ Zdd„ ZdS )r   zdomain nameéd   T)Ú
max_lengthZ
validatorsÚuniquezdisplay nameé2   )r1   c               @   s$   e Zd ZdZedƒZedƒZdZdS )z	Site.MetaZdjango_siter   Úsites)r#   N)r-   r.   r/   Zdb_tabler   Zverbose_nameZverbose_name_pluralZorderingr	   r	   r	   r   ÚMeta[   s   r5   c             C   s   | j S )N)r#   )r   r	   r	   r   Ú__str__a   s    zSite.__str__c             C   s   | j fS )N)r#   )r   r	   r	   r   Únatural_keyd   s    zSite.natural_keyN)r-   r.   r/   r   Z	CharFieldr   r   r#   Únamer   Úobjectsr5   r6   r7   r	   r	   r	   r   r   P   s   r   c          	   K   sp   |d }|d }yt |j= W n tk
r0   Y nX yt tj |¡j|jd�j= W n ttjfk
rj   Y nX dS )zK
    Clear the cache (if primed) each time a site is saved or deleted.
    ÚinstanceÚusing)r   N)	r   r   ÚKeyErrorr   r9   r;   r   r#   r    )ÚsenderÚkwargsr:   r;   r	   r	   r   Úclear_site_cacheh   s    r?   )r=   )r   Zdjango.core.exceptionsr   r   Z	django.dbr   Zdjango.db.models.signalsr   r   Zdjango.http.requestr   Zdjango.utils.translationr   r   r   r   ÚManagerr   ZModelr   r?   Úconnectr	   r	   r	   r   Ú<module>   s   5