î
ªÍ XJ  ã               @   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   úI/home/ubuntu/projects/ifolica/build/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               @   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   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_cachec             C   s   |  j  d | ƒ S)Nr%   )r   )r   r%   r   r   r   Úget_by_natural_keyQ   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_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/   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   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!   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