
v^q                 @   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 Gd	 d
   d
 e j  Z Gd d   d e j  Z d d   Z e j e d e e j e d e d S)    N)ImproperlyConfiguredValidationError)models)
pre_deletepre_save)split_domain_port)gettext_lazyc                sD     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-build-8lau8j11/django/django/contrib/sites/models.py	<genexpr>   s    z0_simple_domain_name_validator.<locals>.<genexpr>z2The domain name cannot contain any spaces or tabs.codeinvalidN)string
whitespaceanyr   _)r   Zchecksr	   )r   r   _simple_domain_name_validator   s
    r   c               @   sU   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   s0   | 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   s   | j    } y. | t k r1 |  j d |  t | <t | SWnQ t j k
 r t |  \ } } | t k r |  j d |  t | <t | SYn Xd  S)NZ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   s[   d d l  m } t | d d  r8 | j } |  j |  S| rK |  j |  St 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 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_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)Nr#   )r   )r   r#   r	   r	   r   get_by_natural_keyJ   s    zSiteManager.get_by_natural_key)	__name__
__module____qualname__Zuse_in_migrationsr   r%   r*   r+   r,   r	   r	   r	   r   r      s   r   c               @   s   e  Z d  Z e j e d  d d d e g d d Z e j e d  d d Z e	   Z
 Gd	 d
   d
  Z d d   Z d d   Z d S)r   zdomain name
max_lengthd   Z
validatorsuniqueTzdisplay name2   c               @   s4   e  Z d  Z d Z e d  Z e d  Z d Z d S)z	Site.MetaZdjango_siter   sitesr#   N)zdomain)r-   r.   r/   Zdb_tabler   Zverbose_nameZverbose_name_pluralZorderingr	   r	   r	   r   MetaZ   s   r5   c             C   s   |  j  S)N)r#   )r   r	   r	   r   __str__`   s    zSite.__str__c             C   s
   |  j  f S)N)r#   )r   r	   r	   r   natural_keyc   s    zSite.natural_keyN)r-   r.   r/   r   Z	CharFieldr   r   r#   namer   objectsr5   r6   r7   r	   r	   r	   r   r   N   s   			r   c             K   s   | d } | d } y t  | j =Wn t k
 r6 Yn Xy) t  t j j |  j d | j  j =Wn t t j f k
 r} Yn Xd S)zK
    Clear the cache (if primed) each time a site is saved or deleted.
    instanceusingr   N)	r   r   KeyErrorr   r9   r;   r   r#   r    )senderkwargsr:   r;   r	   r	   r   clear_site_cacheg   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