î

_ÝVŸ  ã               @   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 Gd d „  d e j ƒ Z e Gd d „  d e j ƒ ƒ Z d d „  Z e
 j e d e ƒe	 j e d e ƒd S)é    )Úunicode_literalsN)ÚImproperlyConfiguredÚValidationError)Úmodels)Ú
pre_deleteÚpre_save)Úsplit_domain_port)Úpython_2_unicode_compatible)Úugettext_lazyc                sQ   ˆ  s
 d S‡  f d d †  t  j Dƒ } t | ƒ rM t t d ƒ d d ƒ‚ n  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-build-ghmbqnp_/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Úinvalid)ÚstringÚ
whitespaceÚanyr   Ú_)r   Zchecksr   )r   r   Ú_simple_domain_name_validator   s    r   c               @   sI   e  Z d  Z d Z d d „  Z d d „  Z d d d „ Z d	 d
 „  Z d S)ÚSiteManagerTc             C   s3   | t  k r+ |  j d | ƒ } | t  | <n  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  ƒ  } y1 | t k r4 |  j d | ƒ t | <n  t | SWn` t j k
 rŸ t | ƒ \ } } | sn ‚  n  | t k r“ |  j d | ƒ t | <n  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  
        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Ú 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_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_cache)Ú__name__Ú
__module__Ú__qualname__Zuse_in_migrationsr   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 S)r!   zdomain nameÚ
max_lengthéd   Z
validatorsÚuniqueTzdisplay nameé2   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/   r0   Zdb_tabler   Zverbose_nameZverbose_name_pluralZorderingr   r   r   r   ÚMetaZ   s   r6   c             C   s   |  j  S)N)r%   )r   r   r   r   Ú__str__`   s    zSite.__str__N)r.   r/   r0   r   Z	CharFieldr   r   r%   Únamer   Úobjectsr6   r7   r   r   r   r   r!   R   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
    Clears 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_cached   s    

)r?   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!   r?   Úconnectr   r   r   r   Ú<module>   s   4