o
    {Ð,hú	  ã                   @   sT   d dl mZ d dlmZ d dlmZ G dd„ dƒZG dd„ deƒZ	G dd	„ d	ƒZ
d
S )é    )ÚLocal)Úsettings)Úcached_propertyc                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚConnectionProxyz5Proxy for accessing a connection object's attributes.c                 C   s   || j d< || j d< d S )NÚ_connectionsÚ_alias)Ú__dict__)ÚselfÚconnectionsÚalias© r   úM/var/www/html/rh/venv/lib/python3.10/site-packages/django/utils/connection.pyÚ__init__
   s   
zConnectionProxy.__init__c                 C   ó   t | j| j |ƒS ©N)Úgetattrr   r   )r	   Úitemr   r   r   Ú__getattr__   ó   zConnectionProxy.__getattr__c                 C   s   t | j| j ||ƒS r   )Úsetattrr   r   )r	   ÚnameÚvaluer   r   r   Ú__setattr__   s   zConnectionProxy.__setattr__c                 C   r   r   )Údelattrr   r   )r	   r   r   r   r   Ú__delattr__   r   zConnectionProxy.__delattr__c                 C   s   || j | j v S r   ©r   r   ©r	   Úkeyr   r   r   Ú__contains__   ó   zConnectionProxy.__contains__c                 C   s   | j | j |kS r   r   )r	   Úotherr   r   r   Ú__eq__   r   zConnectionProxy.__eq__N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r!   r   r   r   r   r      s    r   c                   @   s   e Zd ZdS )ÚConnectionDoesNotExistN)r"   r#   r$   r   r   r   r   r&      s    r&   c                   @   sp   e Zd ZdZeZdZddd„Zedd„ ƒZ	dd„ Z
d	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zddd„Zdd„ ZdS )ÚBaseConnectionHandlerNFc                 C   s   || _ t| jƒ| _d S r   )Ú	_settingsr   Úthread_criticalr   ©r	   r   r   r   r   r   '   s   zBaseConnectionHandler.__init__c                 C   s   |   | j¡| _| jS r   )Úconfigure_settingsr(   ©r	   r   r   r   r   +   s   zBaseConnectionHandler.settingsc                 C   s   |d u r
t t| jƒ}|S r   )r   Údjango_settingsÚsettings_namer*   r   r   r   r+   0   s   z(BaseConnectionHandler.configure_settingsc                 C   s   t dƒ‚)Nz.Subclasses must implement create_connection().)ÚNotImplementedError)r	   r   r   r   r   Úcreate_connection5   s   z'BaseConnectionHandler.create_connectionc                 C   sZ   zt | j|ƒW S  ty   || jvr|  d|› d¡‚Y nw |  |¡}t| j||ƒ |S )NzThe connection 'z' doesn't exist.)r   r   ÚAttributeErrorr   Úexception_classr0   r   )r	   r   Úconnr   r   r   Ú__getitem__8   s   
ÿÿ
z!BaseConnectionHandler.__getitem__c                 C   s   t | j||ƒ d S r   )r   r   )r	   r   r   r   r   r   Ú__setitem__B   r   z!BaseConnectionHandler.__setitem__c                 C   s   t | j|ƒ d S r   )r   r   r   r   r   r   Ú__delitem__E   r   z!BaseConnectionHandler.__delitem__c                 C   s
   t | jƒS r   )Úiterr   r,   r   r   r   Ú__iter__H   s   
zBaseConnectionHandler.__iter__c                    s   ‡ ‡fdd„ˆD ƒS )Nc                    s$   g | ]}ˆ rt ˆj|ƒrˆ| ‘qS r   )Úhasattrr   )Ú.0r   ©Úinitialized_onlyr	   r   r   Ú
<listcomp>L   s    ü
üÿz-BaseConnectionHandler.all.<locals>.<listcomp>r   )r	   r<   r   r;   r   ÚallK   s   þzBaseConnectionHandler.allc                 C   s   | j ddD ]}| ¡  qd S )NT)r<   )r>   Úclose)r	   r3   r   r   r   Ú	close_allS   s   
ÿzBaseConnectionHandler.close_allr   )F)r"   r#   r$   r.   r&   r2   r)   r   r   r   r+   r0   r4   r5   r6   r8   r>   r@   r   r   r   r   r'   "   s    



r'   N)Úasgiref.localr   Údjango.confr   r-   Údjango.utils.functionalr   r   Ú	Exceptionr&   r'   r   r   r   r   Ú<module>   s    