U
    }®c¿  ã                   @   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   ú;/tmp/pip-unpacked-wheel-7m9rsep5/django/utils/connection.pyÚ__init__
   s    
zConnectionProxy.__init__c                 C   s   t | j| j |ƒS ©N)Úgetattrr   r   )r	   Úitemr   r   r   Ú__getattr__   s    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   s   t | j| j |ƒS r   )Údelattrr   r   )r	   r   r   r   r   Ú__delattr__   s    zConnectionProxy.__delattr__c                 C   s   || j | j kS r   ©r   r   ©r	   Úkeyr   r   r   Ú__contains__   s    zConnectionProxy.__contains__c                 C   s   | j | j |kS r   r   )r	   Úotherr   r   r   Ú__eq__   s    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                   @   sf   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„ 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 k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ƒ‚d S )Nz.Subclasses must implement create_connection().)ÚNotImplementedError)r	   r   r   r   r   Úcreate_connection5   s    z'BaseConnectionHandler.create_connectionc                 C   s\   zt | j|ƒW S  tk
r>   || jkr:|  d|› d�¡‚Y nX |  |¡}t| j||ƒ |S )NzThe connection 'z' doesn't exist.)r   r   ÚAttributeErrorr   Úexception_classr-   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   s    z!BaseConnectionHandler.__setitem__c                 C   s   t | j|ƒ d S r   )r   r   r   r   r   r   Ú__delitem__E   s    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 | ]}ˆ | ‘qS r   r   )Ú.0r   r)   r   r   Ú
<listcomp>L   s     z-BaseConnectionHandler.all.<locals>.<listcomp>r   r)   r   r)   r   ÚallK   s    zBaseConnectionHandler.all)N)r   r    r!   r+   r#   r/   r&   r   r   r   r(   r-   r1   r2   r3   r5   r8   r   r   r   r   r$   "   s   


r$   N)Zasgiref.localr   Zdjango.confr   r*   Zdjango.utils.functionalr   r   Ú	Exceptionr#   r$   r   r   r   r   Ú<module>   s
   