
    h(                        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 G d$ d%      Zy)&    N)import_module)Path)Local)settings)ImproperlyConfigured)cached_property)import_stringdefault_django_versionc                       e Zd Zy)ErrorN__name__
__module____qualname__     R/var/www/html/ranktracker/api/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%   0   r   r   r%   c                   (    e 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   	__enter__zDatabaseErrorWrapper.__enter__B   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__E   s      !

 	LK "$,,"7"79M9MNK(K0*INN; y.&AA37DLL0"11)<)K%	Lr   c                       fd}|S )Nc                  D    5   | i |cd d d        S # 1 sw Y   y xY wr-   r   )r5   kwargsfuncr*   s     r   innerz,DatabaseErrorWrapper.__call__.<locals>.inner_   s(     -T,V,- - -s   r   )r*   rB   rC   s   `` r   __call__zDatabaseErrorWrapper.__call__\   s    	- r   N)r   r   r   __doc__r+   r/   r>   rD   r   r   r   r'   r'   4   s    
L.r   r'   c           	         | dk(  rd} 	 t        d| z        S # t        $ r}t        t        t              j
                  dz        }t        j                  |g      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.basebackends>   basedummypostgresql_psycopg2zdjango.db.backends.%szc isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
    z, N)r   ImportErrorstrr   __file__parentpkgutiliter_modulesmapreprsortedr   join)	backend_namee_userbackend_dir_nameispkgbuiltin_backendsbbackend_reprss	            r   load_backendr^   e   s     ??6Y566  $x.//*<='.';';[M'J
 
#Qe%MM 
 
 
 EUV 7! ;VVVf-=&>?M& )$))M*BD 	 #s-    	C?CA3
2CBACCc                       e Zd Zy)ConnectionDoesNotExistNr   r   r   r   r`   r`      r   r   r`   c                   T    e Zd ZddZed        Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)ConnectionHandlerNc                 4    || _         t        d      | _        y)z{
        databases is an optional dictionary of database definitions (structured
        like settings.DATABASES).
        T)thread_criticalN)
_databasesr   _connections)r*   	databasess     r   r+   zConnectionHandler.__init__   s    
 $ "$7r   c                 8   | j                   t        j                  | _         | j                   i k(  rt        ddii| _         t        | j                   vrt	        dt        z        | j                   t           i k(  rd| j                   t           d<   | j                   S )NENGINEdjango.db.backends.dummyz You must define a '%s' database.)re   r   	DATABASESDEFAULT_DB_ALIASr   r.   s    r   rg   zConnectionHandler.databases   s    ??"&00DO??b  8#DO
 4??2&'IL\'\]]??+,2:TDOO,-h7r   c                    	 | j                   |   }|j                  dd       |j                  dd       |j                  dd       |d   dk(  s|d   sd|d<   |j                  d	d
       |j                  di        |j                  dd       dD ]  }|j                  |d        y# t        $ r t        d|z        w xY w)z}
        Put the defaults into the settings dictionary for a given connection
        where no settings is provided.
        The connection %s doesn't existATOMIC_REQUESTSF
AUTOCOMMITTri   rj   zdjango.db.backends.CONN_MAX_AGEr   OPTIONS	TIME_ZONEN)NAMEUSERPASSWORDHOSTPORT rg   KeyErrorr`   
setdefault)r*   aliasconnsettings       r   ensure_defaultsz!ConnectionHandler.ensure_defaults   s    
	T>>%(D 	)51d+"<=>22$x.7DN*	2&T*C 	)GOOGR(	)  	T()JU)RSS	Ts   B) )Cc                     	 | j                   |   }|j                  di       }g d}|D ]  \  }}|j                  ||        y# t        $ r t        d|z        w xY w)zY
        Make sure the test settings are available in the 'TEST' sub-dictionary.
        rn   TEST))CHARSETN)	COLLATIONN)MIGRATET)MIRRORN)rt   NNrz   )r*   r}   r~   test_settingsdefault_test_settingskeyvalues          r   prepare_test_settingsz'ConnectionHandler.prepare_test_settings   sy    	T>>%(D 3!
 0 	1JC$$S%0	1  	T()JU)RSS	Ts   A Ac                 .   t        | j                  |      rt        | j                  |      S | j                  |       | j	                  |       | j
                  |   }t        |d         }|j                  ||      }t        | j                  ||       |S )Nri   )	hasattrrf   r2   r   r   rg   r^   DatabaseWrappersetattr)r*   r}   dbbackendr~   s        r   __getitem__zConnectionHandler.__getitem__   s    4$$e,4,,e44U#""5)^^E"r(|,&&r51!!5$/r   c                 2    t        | j                  ||       y r-   )r   rf   )r*   r   r   s      r   __setitem__zConnectionHandler.__setitem__   s    !!3.r   c                 0    t        | j                  |       y r-   )delattrrf   )r*   r   s     r   __delitem__zConnectionHandler.__delitem__   s    !!3'r   c                 ,    t        | j                        S r-   )iterrg   r.   s    r   __iter__zConnectionHandler.__iter__   s    DNN##r   c                 2    | D cg c]  }| |   	 c}S c c}w r-   r   )r*   r}   s     r   allzConnectionHandler.all   s    )-.U...s   c                 ~    | D ])  }	 t        | j                  |      }|j                          + y # t        $ r Y 8w xY wr-   )r2   rf   AttributeErrorclose)r*   r}   
connections      r   	close_allzConnectionHandler.close_all   sJ     	E$T%6%6>
 	 " s   0	<<r-   )r   r   r   r+   r   rg   r   r   r   r   r   r   r   r   r   r   r   rb   rb      sC    8  )*1(
/($/r   rb   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
isinstancerL   r	   append)r*   r   rrouters       r   r   zConnectionRouter.routers   sb    == $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   r2   r   get_stater   rl   )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   r   )r*   obj1obj2r   r   r   allows          r   r   zConnectionRouter.allow_relation  st    ll 		!F!..
 tT3U3$ L		! {{~~// " s   A	A('A(c                 ~    | j                   D ]  }	 |j                  } |||fi |}||c S  y# t        $ r Y .w xY wr1   )r   allow_migrater   )r*   r   	app_labelr   r   r   r   s          r   r   zConnectionRouter.allow_migrate'  s\    ll 
	F--
 2y2E2E 
	  " s   0	<<c                 |    | j                  ||j                  j                  |j                  j                  |      S )N)
model_namer   )r   _metar   r   )r*   r   r   s      r   allow_migrate_modelz$ConnectionRouter.allow_migrate_model5  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_configr   r   modelsr   s         r   get_migratable_modelsz&ConnectionRouter.get_migratable_models=  s9    &&<P&Q#)Q%T-E-Eb%-P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   pathlibr   asgiref.localr   django.confr   django.core.exceptionsr   django.utils.functionalr   django.utils.module_loadingr	   rl   DJANGO_VERSION_PICKLE_KEY	Exceptionr   r   r   r   r   r   r!   r#   r%   r'   r^   r`   rb   r   r   r   r   <module>r      s     #     7 3 5 - 	I 		U 		E 		 		} 		] 		M 		} 		 	. .b>	Y 	e ePPR PRr   