U
    8ÄT_p  ã                   @   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                    s0   ‡ fdd„t jD ƒ}t|ƒr,ttdƒdd�‚dS )z\
    Validate that the given value contains no whitespaces to prevent common
    typos.
    c                 3   s   | ]}|ˆ kV  qd S ©N© )Ú.0Ús©Úvaluer
   ú?/tmp/pip-unpacked-wheel-dv63caxw/django/contrib/sites/models.pyÚ	<genexpr>   s     z0_simple_domain_name_validator.<locals>.<genexpr>z2The domain name cannot contain any spaces or tabs.Úinvalid)ÚcodeN)Ú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   sr   |  ¡ }z"|tkr"| j|d�t|< t| W S  tjk
rl   t|ƒ\}}|tkr`| j|d�t|< t|  Y 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_current0   s    

ÿzSiteManager.get_currentc                 C   s   i a dS )z Clear the ``Site`` object cache.N)r   ©r   r
   r
   r   Úclear_cacheE   s    zSiteManager.clear_cachec                 C   s   | j |d�S )N©r&   )r   )r   r&   r
   r
   r   Úget_by_natural_keyJ   s    zSiteManager.get_by_natural_key)N)	Ú__name__Ú
__module__Ú__qualname__Zuse_in_migrationsr    r(   r-   r/   r1   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   )r6   c                   @   s&   e Zd ZdZedƒZedƒZdgZdS )z	Site.MetaZdjango_siter   Úsitesr&   N)r2   r3   r4   Zdb_tabler   Zverbose_nameZverbose_name_pluralZorderingr
   r
   r
   r   ÚMetaZ   s   r:   c                 C   s   | j S r	   r0   r.   r
   r
   r   Ú__str__`   s    zSite.__str__c                 C   s   | j fS r	   r0   r.   r
   r
   r   Únatural_keyc   s    zSite.natural_keyN)r2   r3   r4   r   Z	CharFieldr   r   r&   Únamer   Úobjectsr:   r;   r<   r
   r
   r
   r   r"   N   s   ür"   c              	   K   sp   |d }|d }zt |j= W n tk
r0   Y nX z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Úusingr   N)	r   r   ÚKeyErrorr"   r>   r@   r   r&   r#   )ÚsenderÚkwargsr?   r@   r
   r
   r   Úclear_site_cacheg   s    rD   )rB   )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"   rD   Úconnectr
   r
   r
   r   Ú<module>   s   5