o
    [ho                     @   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    | ]}| v V  qd S N ).0svaluer
   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/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 v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   sl   |  }z|tvr| j|dt|< t| W S  tjy5   t|\}}|tvr/| j|dt|< t|  Y S w )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   s>   ddl m} t|ddr|j}| |S |r| |S td)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.)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_cacheF   s   zSiteManager.clear_cachec                 C   s   | j |dS )Nr&   )r   )r   r&   r
   r
   r   get_by_natural_keyK   s   zSiteManager.get_by_natural_keyr	   )	__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 named   T)
max_lengthZ
validatorsuniquezdisplay name2   )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"   O   s    r"   c              	   K   sl   |d }|d }zt |j= W n	 ty   Y nw zt tj|j|jdj= W dS  ttjfy5   Y dS w )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    6