
    `?i$                     r   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e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d d      Zd Z G d  d!e	      Z G d" d#      Zy)$    N)import_modulesettings)ImproperlyConfigured)ConnectionDoesNotExist)BaseConnectionHandler)cached_property)import_stringdefault_django_versionc                       e Zd Zy)ErrorN__name__
__module____qualname__     a/home/cursorai/projects/django-cronjob-utils/venv/lib/python3.12/site-packages/django/db/utils.pyr   r          r   r   c                       e Zd Zy)InterfaceErrorNr   r   r   r   r   r      r   r   r   c                       e Zd Zy)DatabaseErrorNr   r   r   r   r   r      r   r   r   c                       e Zd Zy)	DataErrorNr   r   r   r   r   r      r   r   r   c                       e Zd Zy)OperationalErrorNr   r   r   r   r   r   !   r   r   r   c                       e Zd Zy)IntegrityErrorNr   r   r   r   r    r    %   r   r   r    c                       e Zd Zy)InternalErrorNr   r   r   r   r"   r"   )   r   r   r"   c                       e Zd Zy)ProgrammingErrorNr   r   r   r   r$   r$   -   r   r   r$   c                       e Zd Zy)NotSupportedErrorNr   r   r   r   r&   r&   1   r   r   r&   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)DatabaseErrorWrapperz~
    Context manager and decorator that reraises backend-specific database
    exceptions using Django's common wrappers.
    c                     || _         y)zx
        wrapper is a database wrapper.

        It must have a Database attribute defining PEP-249 exceptions.
        Nwrapper)selfr+   s     r   __init__zDatabaseErrorWrapper.__init__;   s     r   c                     | ` y Nr*   r,   s    r   __del__zDatabaseErrorWrapper.__del__C   s    Lr   c                      y r/   r   r0   s    r   	__enter__zDatabaseErrorWrapper.__enter__F   s    r   c           	      ^   |y t         t        t        t        t        t
        t        t        t        f	D ]x  }t        | j                  j                  |j                        }t        ||      s: ||j                   }|t         t        fvrd| j                  _        |j!                  |      | y 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_values          r   __exit__zDatabaseErrorWrapper.__exit__I   s    

K "$,,"7"79M9MNK(K0*INN; y.&AA37DLL0"11)<)K%

r   c                       fd}|S )Nc                  D    5   | i |cd d d        S # 1 sw Y   y xY wr/   r   )r9   kwargsfuncr,   s     r   innerz,DatabaseErrorWrapper.__call__.<locals>.innerc   s    T,V, s   r   )r,   rF   rG   s   `` r   __call__zDatabaseErrorWrapper.__call__`   s    	- r   N)	r   r   r   __doc__r-   r1   r3   rB   rH   r   r   r   r(   r(   5   s!    
L.r   r(   c           	         | dk(  rd} 	 t        d| z        S # t        $ r}ddl}t        j                  |j
                  j                  j                        D cg c]  \  }}}|r|dvr| nc c}}}w }}}}| |D cg c]  }d|z  	 nc c}w c}vr9t        t        t        |            }t        | dd	j                  |            | d}~ww xY 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   N>   basedummyzdjango.db.backends.%sz 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:
    z, )r   ImportErrordjango.db.backendspkgutiliter_modulesdbbackends__path__mapreprsortedr   join)	backend_namee_userdjango_nameispkgbuiltin_backendsbbackend_reprss	            r   load_backendra   j   s     ??6Y566  	" #*"6"6vyy7I7I7R7R"S
"S4%66 "S
 

 EUVEU 7! ;EUVVf-=&>?M&
 )$))M*B	D  +s-    	C;CA/
.C?BACCc                   <     e Zd ZdZdZ fdZed        Zd Z xZ	S )ConnectionHandler	DATABASESTc                    t         |   |      }|i k(  rddi|t        <   n3t        |vrt        dt         d      |t           i k(  rd|t           d<   |j	                         D ]  }|j                  dd       |j                  dd       |j                  dd       |d   d	k(  s|d   sd|d<   |j                  d
d       |j                  dd       |j                  di        |j                  dd        dD ]  }|j                  |d        |j                  di       }g d}|D ]  \  }}|j                  ||         |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)rm   N)superconfigure_settingsDEFAULT_DB_ALIASr   values
setdefault)	r,   	databasesconnsettingtest_settingsdefault_test_settingskeyvalue	__class__s	           r   ry   z$ConnectionHandler.configure_settings   s^   G.y9	?+35O*PI&'Y.&%&6%7{C  '(B.4NI&'1 $$&DOO-u5OOL$/OOH&@AH~!66d8n!;XOONA.OO0%8OOIr*OOK.G, H !OOFB7M%! 4
U((e4 4+ '. r   c                     | j                   S r/   r   r0   s    r   r}   zConnectionHandler.databases   s    
 }}r   c                 `    | j                   |   }t        |d         }|j                  ||      S )Nrf   )r   ra   DatabaseWrapper)r,   aliasrQ   backends       r   create_connectionz#ConnectionHandler.create_connection   s1    ]]5!r(|,&&r511r   )
r   r   r   settings_namethread_criticalry   propertyr}   r   __classcell__)r   s   @r   rc   rc      s.    M O#J  2r   rc   c                   d    e Zd ZddZed        Zd Z ed      Z ed      Zd Z	d Z
d	 Zdd
Zy)ConnectionRouterNc                     || _         y)zT
        If routers is not specified, default to settings.DATABASE_ROUTERS.
        N)_routers)r,   routerss     r   r-   zConnectionRouter.__init__   s      r   c                     | j                   t        j                  | _         g }| j                   D ]6  }t        |t              r t        |             }n|}|j                  |       8 |S r/   )r   r   DATABASE_ROUTERS
isinstancestrr
   append)r,   r   rrouters       r   r   zConnectionRouter.routers   s]    == $55DMA!S!)q)+NN6"  r   c                       fd}|S )Nc                 
   d }| j                   D ]  }	 t        |      } ||fi |}|s|c S  |j                  d      }|,|j                  j
                  r|j                  j
                  S t        S # t        $ r Y qw xY w)Ninstance)r   r6   AttributeErrorget_staterQ   rz   )r,   modelhints	chosen_dbr   methodr   actions          r   	_route_dbz0ConnectionRouter._router_func.<locals>._route_db   s    I,,	)$VV4F !'u 6 6I (( ' yy,H#(:(:)))## &  s   A66	BBr   )r   r   s   ` r   _router_funczConnectionRouter._router_func   s    	$$ r   db_for_readdb_for_writec                     | j                   D ]  }	 |j                  } |||fi |}||c S  |j                  j                  |j                  j                  k(  S # t        $ r Y Zw xY wr/   )r   allow_relationr   r   rQ   )r,   obj1obj2r   r   r   allows          r   r   zConnectionRouter.allow_relation   so    llF!..
 tT3U3$ L # {{~~// " s   A	A('A(c                 ~    | j                   D ]  }	 |j                  } |||fi |}||c S  y# t        $ r Y .w xY wr5   )r   allow_migrater   )r,   rQ   	app_labelr   r   r   r   s          r   r   zConnectionRouter.allow_migrate  sW    llF--
 2y2E2E  #  " s   0	<<c                 |    | j                  ||j                  j                  |j                  j                  |      S )N)
model_namer   )r   _metar   r   )r,   rQ   r   s      r   allow_migrate_modelz$ConnectionRouter.allow_migrate_model  s:    !!KK!!{{--	 " 
 	
r   c                 v    |j                  |      }|D cg c]  }| j                  ||      s| c}S c c}w )z8Return app models allowed to be migrated on provided db.)include_auto_created)
get_modelsr   )r,   
app_configrQ   r   modelsr   s         r   get_migratable_modelsz&ConnectionRouter.get_migratable_models  s=    &&<P&Q#)Q6%T-E-Eb%-P6QQQs   66r/   )F)r   r   r   r-   r	   r   r   r   r   r   r   r   r   r   r   r   r   r      sK      
 
* }-K/L0
Rr   r   )rO   	importlibr   django.confr   django.core.exceptionsr   django.utils.connectionr   r   django.utils.functionalr	   django.utils.module_loadingr
   rz   DJANGO_VERSION_PICKLE_KEY	Exceptionr   r   r   r   r   r    r"   r$   r&   r(   ra   rc   r   r   r   r   <module>r      s     #   7 ; 9 3 5 - 	I 		U 		E 		 		} 		] 		M 		} 		 	2 2j F82- 82vRR RRr   