3
(hJ                 @   s   d dl mZ 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 d dlmZ i ad	d
 ZG dd dejZeG dd dejZdd Ze
jeed e	jeed dS )    )unicode_literalsN)ImproperlyConfiguredValidationError)models)
pre_deletepre_save)split_domain_port)python_2_unicode_compatible)ugettext_lazyc                s8    sdS  fddt jD }t|r4ttddddS )z]
    Validates that the given value contains no whitespaces to prevent common
    typos.
    Nc             3   s   | ]}| kV  qd S )N ).0s)valuer   ?/tmp/pip-install-q3hcpn_q/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   sr   |j  }y |tkr"| j|dt|< t| S  tjk
rl   t|\}}|sL |tkrd| 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}| j|S |r6| j|S tddS )a  
        Returns the current Site based on the SITE_ID in the project's settings.
        If SITE_ID isn't defined, it returns 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 zYou'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_current7   s    

zSiteManager.get_currentc             C   s   i a dS )z!Clears the ``Site`` object cache.N)r   )r   r   r   r   clear_cacheL   s    zSiteManager.clear_cachec             C   s   | j |dS )N)r%   )r   )r   r%   r   r   r   get_by_natural_keyQ   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 named   T)
max_lengthZ
validatorsuniquezdisplay name2   )r3   c               @   s$   e Zd ZdZedZedZdZdS )z	Site.MetaZdjango_siter   sitesr%   N)r%   )r/   r0   r1   Zdb_tabler   Zverbose_nameZverbose_name_pluralZorderingr   r   r   r   Metaa   s   r7   c             C   s   | j S )N)r%   )r   r   r   r   __str__g   s    zSite.__str__c             C   s   | j fS )N)r%   )r   r   r   r   natural_keyj   s    zSite.natural_keyN)r/   r0   r1   r   Z	CharFieldr   r   r%   namer   objectsr7   r8   r9   r   r   r   r   r!   U   s   r!   c             K   sp   |d }|d }yt |j= W n tk
r0   Y nX yt tjj|j|jdj= W n ttjfk
rj   Y nX dS )zK
    Clears the cache (if primed) each time a site is saved or deleted
    instanceusing)r   N)	r   r   KeyErrorr!   r;   r=   r   r%   r"   )senderkwargsr<   r=   r   r   r   clear_site_cachen   s    rA   )r?   )
__future__r   r   Zdjango.core.exceptionsr   r   Z	django.dbr   Zdjango.db.models.signalsr   r   Zdjango.http.requestr   Zdjango.utils.encodingr	   Zdjango.utils.translationr
   r   r   r   Managerr   ZModelr!   rA   connectr   r   r   r   <module>   s   7
