o
    þÞh?$  ã                   @   s,  d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d	Zd
ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ dƒZdd „ ZG d!d"„ d"e	ƒZG d#d$„ d$ƒZdS )%é    N)Úimport_module©Úsettings)ÚImproperlyConfigured)ÚConnectionDoesNotExist)ÚBaseConnectionHandler)Úcached_property)Úimport_stringÚdefaultÚ_django_versionc                   @   ó   e Zd ZdS )ÚErrorN©Ú__name__Ú
__module__Ú__qualname__© r   r   úO/var/www/html/premium_crap/venv/lib/python3.10/site-packages/django/db/utils.pyr      ó    r   c                   @   r   )ÚInterfaceErrorNr   r   r   r   r   r      r   r   c                   @   r   )ÚDatabaseErrorNr   r   r   r   r   r      r   r   c                   @   r   )Ú	DataErrorNr   r   r   r   r   r      r   r   c                   @   r   )ÚOperationalErrorNr   r   r   r   r   r   !   r   r   c                   @   r   )ÚIntegrityErrorNr   r   r   r   r   r   %   r   r   c                   @   r   )ÚInternalErrorNr   r   r   r   r   r   )   r   r   c                   @   r   )ÚProgrammingErrorNr   r   r   r   r   r   -   r   r   c                   @   r   )ÚNotSupportedErrorNr   r   r   r   r   r   1   r   r   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚDatabaseErrorWrapperz~
    Context manager and decorator that reraises backend-specific database
    exceptions using Django's common wrappers.
    c                 C   ó
   || _ dS )zx
        wrapper is a database wrapper.

        It must have a Database attribute defining PEP-249 exceptions.
        N)Úwrapper)Úselfr   r   r   r   Ú__init__;   s   
zDatabaseErrorWrapper.__init__c                 C   s   d S ©Nr   ©r    r   r   r   Ú	__enter__C   s   zDatabaseErrorWrapper.__enter__c              	   C   sp   |d u rd S t ttttttttf	D ]$}t	| j
j|jƒ}t||ƒr5||jŽ }|t tfvr/d| j
_| |¡|‚qd S ©NT)r   r   r   r   r   r   r   r   r   Úgetattrr   ÚDatabaser   Ú
issubclassÚargsÚerrors_occurredÚwith_traceback)r    Úexc_typeÚ	exc_valueÚ	tracebackÚdj_exc_typeÚdb_exc_typeÚdj_exc_valuer   r   r   Ú__exit__F   s(   ÷

úôzDatabaseErrorWrapper.__exit__c                    s   ‡ ‡fdd„}|S )Nc                     s6   ˆ� ˆ | i |¤ŽW  d   ƒ S 1 sw   Y  d S r"   r   )r)   Úkwargs©Úfuncr    r   r   Úinner`   s   $ÿz,DatabaseErrorWrapper.__call__.<locals>.innerr   )r    r5   r6   r   r4   r   Ú__call__]   s   zDatabaseErrorWrapper.__call__N)r   r   r   Ú__doc__r!   r$   r2   r7   r   r   r   r   r   5   s    r   c              
   C   s�   | dkrd} zt d|  ƒW S  tyG } z.ddl}dd„ t |jjj¡D ƒ}| dd„ |D ƒvrBtt	t
|ƒƒ}td	| d
 |¡f ƒ|‚‚ d}~ww )z�
    Return a database backend's "base" module given a fully qualified database
    backend name, or raise an error if it doesn't exist.
    z&django.db.backends.postgresql_psycopg2zdjango.db.backends.postgresqlz%s.baser   Nc                 S   s"   g | ]\}}}|r|d vr|‘qS )>   ÚbaseÚdummyr   )Ú.0Ú_ÚnameÚispkgr   r   r   Ú
<listcomp>w   s    ýþz load_backend.<locals>.<listcomp>c                 S   s   g | ]}d | ‘qS )zdjango.db.backends.%sr   )r;   Úbr   r   r   r?   |   s    z¹%r isn't an available database backend or couldn't be imported. Check the above exception. To use one of the built-in backends, use 'django.db.backends.XXX', where XXX is one of:
    %sz, )r   ÚImportErrorÚdjango.db.backendsÚpkgutilÚiter_modulesÚdbÚbackendsÚ__path__ÚmapÚreprÚsortedr   Újoin)Úbackend_nameÚe_userÚdjangoÚbuiltin_backendsÚbackend_reprsr   r   r   Úload_backendg   s*   þüÿú	€ërQ   c                       s8   e Zd ZdZdZ‡ fdd„Zedd„ ƒZdd„ Z‡  Z	S )	ÚConnectionHandlerÚ	DATABASESTc                    s  t ƒ  |¡}|i krddi|t< nt|vrtdt› d�ƒ‚|t i kr)d|t d< | ¡ D ]\}| dd¡ | dd¡ | dd¡ |d d	ksK|d sOd|d< | d
d¡ | dd¡ | di ¡ | dd ¡ dD ]}| |d¡ qi| di ¡}g d¢}|D ]
\}}| ||¡ q~q-|S )NÚENGINEzdjango.db.backends.dummyzYou must define a 'z' database.ÚATOMIC_REQUESTSFÚ
AUTOCOMMITTzdjango.db.backends.ÚCONN_MAX_AGEr   ÚCONN_HEALTH_CHECKSÚOPTIONSÚ	TIME_ZONE)ÚNAMEÚUSERÚPASSWORDÚHOSTÚPORTÚ ÚTEST))ÚCHARSETN)Ú	COLLATIONN)ÚMIGRATET)ÚMIRRORN)r[   N)ÚsuperÚconfigure_settingsÚDEFAULT_DB_ALIASr   ÚvaluesÚ
setdefault)r    Ú	databasesÚconnÚsettingÚtest_settingsÚdefault_test_settingsÚkeyÚvalue©Ú	__class__r   r   rg   “   s6   
ÿÿz$ConnectionHandler.configure_settingsc                 C   s   | j S r"   r   r#   r   r   r   rk   ¸   s   zConnectionHandler.databasesc                 C   s"   | j | }t|d ƒ}| ||¡S )NrT   )r   rQ   ÚDatabaseWrapper)r    ÚaliasrE   Úbackendr   r   r   Úcreate_connection¿   s   
z#ConnectionHandler.create_connection)
r   r   r   Úsettings_nameÚthread_criticalrg   Úpropertyrk   rw   Ú__classcell__r   r   rr   r   rR   Š   s    %
rR   c                   @   s\   e Zd Zddd„Zedd„ ƒZdd„ ZedƒZed	ƒZd
d„ Z	dd„ Z
dd„ Zddd„ZdS )ÚConnectionRouterNc                 C   r   )zT
        If routers is not specified, default to settings.DATABASE_ROUTERS.
        N)Ú_routers)r    Úroutersr   r   r   r!   Æ   s   
zConnectionRouter.__init__c                 C   sJ   | j d u r	tj| _ g }| j D ]}t|tƒrt|ƒƒ }n|}| |¡ q|S r"   )r}   r   ÚDATABASE_ROUTERSÚ
isinstanceÚstrr	   Úappend)r    r~   ÚrÚrouterr   r   r   r~   Ì   s   


zConnectionRouter.routersc                    s   ‡ fdd„}|S )Nc              	      st   d }| j D ]!}zt|ˆ ƒ}W n	 ty   Y qw ||fi |¤Ž}|r&|  S q| d¡}|d ur8|jjr8|jjS tS )NÚinstance)r~   r&   ÚAttributeErrorÚgetÚ_staterE   rh   )r    ÚmodelÚhintsÚ	chosen_dbr„   Úmethodr…   ©Úactionr   r   Ú	_route_dbÚ   s   
þÿ
z0ConnectionRouter._router_func.<locals>._route_dbr   )rŽ   r�   r   r�   r   Ú_router_funcÙ   s   zConnectionRouter._router_funcÚdb_for_readÚdb_for_writec              	   K   s\   | j D ]"}z|j}W n	 ty   Y qw |||fi |¤Ž}|d ur%|  S q|jj|jjkS r"   )r~   Úallow_relationr†   rˆ   rE   )r    Úobj1Úobj2rŠ   r„   rŒ   Úallowr   r   r   r“   ð   s   

þÿzConnectionRouter.allow_relationc              	   K   sP   | j D ]"}z|j}W n	 ty   Y qw |||fi |¤Ž}|d ur%|  S qdS r%   )r~   Úallow_migrater†   )r    rE   Ú	app_labelrŠ   r„   rŒ   r–   r   r   r   r—   ý   s   

þÿzConnectionRouter.allow_migratec                 C   s   | j ||jj|jj|d�S )N)Ú
model_namer‰   )r—   Ú_metar˜   r™   )r    rE   r‰   r   r   r   Úallow_migrate_model  s   üz$ConnectionRouter.allow_migrate_modelFc                    s    |j |d�}‡ ‡fdd„|D ƒS )z8Return app models allowed to be migrated on provided db.)Úinclude_auto_createdc                    s   g | ]
}ˆ  ˆ |¡r|‘qS r   )r›   )r;   r‰   ©rE   r    r   r   r?     s    z:ConnectionRouter.get_migratable_models.<locals>.<listcomp>)Ú
get_models)r    Ú
app_configrE   rœ   Úmodelsr   r�   r   Úget_migratable_models  s   z&ConnectionRouter.get_migratable_modelsr"   )F)r   r   r   r!   r   r~   r�   r‘   r’   r“   r—   r›   r¡   r   r   r   r   r|   Å   s    

r|   )rC   Ú	importlibr   Údjango.confr   Údjango.core.exceptionsr   Údjango.utils.connectionr   r   Údjango.utils.functionalr   Údjango.utils.module_loadingr	   rh   ÚDJANGO_VERSION_PICKLE_KEYÚ	Exceptionr   r   r   r   r   r   r   r   r   r   rQ   rR   r|   r   r   r   r   Ú<module>   s.    2#;