U
    e	                     @   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-lctamlir/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                   @   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 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 | ]} rt j|r| qS r   )hasattrr   ).0r   initialized_onlyr	   r   r   
<listcomp>L   s    z-BaseConnectionHandler.all.<locals>.<listcomp>r   )r	   r9   r   r8   r   allK   s    zBaseConnectionHandler.allc                 C   s   | j ddD ]}|  qd S )NT)r9   )r;   close)r	   r0   r   r   r   	close_allS   s    zBaseConnectionHandler.close_all)N)F)r   r    r!   r+   r#   r/   r&   r   r   r   r(   r-   r1   r2   r3   r5   r;   r=   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
   