HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/__pycache__/clsregistry.cpython-310.pyc
o

���g6F�@svUdZddlmZddlZddlmZddlmZddlmZddlmZddlm	Z	dd	lm
Z
dd
lmZddlmZddlm
Z
dd
lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlmZddl"m#Z#dd l$m%Z%er�dd!l&m'Z'dd"l"m(Z(dd#l"m)Z)ed$ed%�Z*e
e+ee,d&ffZ-e.�Z/d'e0d(<dVd1d2�Z1dWd4d5�Z2dXd:d;�Z3Gd<d&�d&�Z4Gd=d>�d>e4�Z5Gd?d@�d@e4�Z6GdAdB�dB�Z7GdCdD�dD�Z8e!�9e8�dEdF��GdGdH�dH�Z:dYdKdL�Z;GdMdN�dN�Z<da=dOe0dP<dZdTdU�Z>dS)[z�Routines to handle the string class registry used by declarative.

This system allows specification of classes and expressions used in
:func:`_orm.relationship` using strings.

�)�annotationsN)�Any)�Callable)�cast)�Dict)�	Generator)�Iterable)�List)�Mapping)�MutableMapping)�NoReturn)�Optional)�Set)�Tuple)�Type)�
TYPE_CHECKING)�TypeVar)�Union�)�
attributes)�
interfaces)�SynonymProperty)�ColumnProperty)�class_mapper�)�exc)�
inspection)�util)�_get_table_key)�CallableReference)�RelationshipProperty)�MetaData)�Table�_T)�bound�ClsRegistryTokenzSet[ClsRegistryToken]�_registries�	classname�str�cls�Type[_T]�decl_class_registry�_ClsRegistryType�return�Nonec	
Cs||vr||}t|t�st|td|�g�}||<n|||<z	tt|d�}Wnty:tdd�|d<}Ynw|j�d�}|r�|�d�}|�|�}|D]}|�|�}qOz|�	||�Wnt
y{}zt|t�svt�d|�d��|��d}~ww|sCdSdS)z^Add a class to the _decl_class_registry associated with the
    given declarative class.

    �	Type[Any]�_sa_module_registryN�.r�name "�-" matches both a class name and a module name)
�
isinstance�_MultipleClassMarkerr�
_ModuleMarker�KeyError�
__module__�split�pop�
get_module�	add_class�AttributeErrorr�InvalidRequestError)	r'r)r+�existing�root_module�tokens�token�module�ae�rE�E/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/clsregistry.pyr<@sF
�����




�����r<r/cCs�||vr||}t|t�r|�|�n||=z	tt|d�}Wn
ty)YdSw|j�d�}|rc|�d�}|�	|�}|D]}|�	|�}q>z|�
||�Wnty^t|t�s[n�Ynw|s2dSdS)Nr0r1r)r4r5�remove_itemrr6r7r8r9r:r;�remove_classr=)r'r)r+r?r@rArBrCrErErFrHvs6
��


���rH�key�test�Callable[[Any], bool]�boolcCsJ||vrdS||}t|t�r |jD]	}||�rdSqtd��||�S)a�test if a key is empty of a certain object.

    used for unit tests against the registry to see if garbage collection
    is working.

    "test" is a callable that will be passed an object should return True
    if the given object is the one we were looking for.

    We can't pass the actual object itself b.c. this is for testing garbage
    collection; the caller will have to have removed references to the
    object itself.

    TFzunknown codepath)r4r5�contents�NotImplementedError)rIr+rJ�thing�	sub_thingrErErF�
_key_is_empty�s

�
rQc@seZdZdZdZdS)r%zAan object that can be in the registry._class_registry as a value.rEN)�__name__r8�__qualname__�__doc__�	__slots__rErErErFr%�sc@sfeZdZUdZdZded<ded<	d#d$dd�Zd%dd�Zd&dd�Zd'dd�Z	d(dd�Z
d)d!d"�ZdS)*r5zRrefers to multiple classes of the same name
    within _decl_class_registry.

    )�	on_removerM�__weakref__zSet[weakref.ref[Type[Any]]]rMz/CallableReference[Optional[Callable[[], None]]]rVN�classes�Iterable[Type[Any]]�Optional[Callable[[], None]]cs(|�_�fdd�|D��_t���dS)Ncsh|]	}t�|�j��qSrE)�weakref�ref�_remove_item)�.0�item��selfrErF�	<setcomp>�s�z0_MultipleClassMarker.__init__.<locals>.<setcomp>)rVrMr&�add)rarXrVrEr`rF�__init__�s

�z_MultipleClassMarker.__init__r)r/r-r.cCs|�t�|��dS�N)r]r[r\�rar)rErErFrG��z _MultipleClassMarker.remove_item�*Generator[Optional[Type[Any]], None, None]cCsdd�|jD�S)Ncss�|]}|�VqdSrerE�r^r\rErErF�	<genexpr>�s�z0_MultipleClassMarker.__iter__.<locals>.<genexpr>�rMr`rErErF�__iter__�sz_MultipleClassMarker.__iter__�path�	List[str]rIr(cCsPt|j�dkrt�dd�||g���t|j�d}|�}|dur&t|��|S)NrzxMultiple classes found for path "%s" in the registry of this declarative base. Please use a fully module-qualified path.r1r)�lenrMrr>�join�list�	NameError)rarmrIr\r)rErErF�attempt_get�s��z _MultipleClassMarker.attempt_getr\�weakref.ref[Type[Any]]cCs6|j�|�|jst�|�|jr|��dSdSdSre)rM�discardr&rV)rar\rErErFr]�s
�z!_MultipleClassMarker._remove_itemr_cCsXdd�dd�t|j�D�D�}|j|vrt�d|j|jf�|j�t�||j	��dS)NcSsh|]	}|dur|j�qSre)r8)r^r)rErErFrb�s
�z0_MultipleClassMarker.add_item.<locals>.<setcomp>cSsg|]}|��qSrErErirErErF�
<listcomp>�sz1_MultipleClassMarker.add_item.<locals>.<listcomp>z�This declarative base already contains a class with the same class name and module name as %s.%s, and will be replaced in the string-lookup table.)
rqrMr8r�warnrRrcr[r\r])rar_�modulesrErErF�add_item�s�

��z_MultipleClassMarker.add_itemre)rXrYrVrZ)r)r/r-r.)r-rh)rmrnrIr(r-r/)r\rtr-r.)r_r/r-r.)rRr8rSrTrU�__annotations__rdrGrlrsr]ryrErErErFr5�s
�



r5c@s�eZdZUdZdZded<ded<ded<d	ed
<d&d
d�Zd'dd�Zd(dd�Zd)dd�Z	d*dd�Z
d+dd�Zd,d!d"�Zd,d#d$�Z
d%S)-r6z>Refers to a module name within
    _decl_class_registry.

    )�parent�namerM�mod_nsrmrW�Optional[_ModuleMarker]r{z5Dict[str, Union[_ModuleMarker, _MultipleClassMarker]]rM�_ModNSr}rnrmr|r(cCsJ||_||_i|_t|�|_|jr|jj|jg|_ng|_t�|�dSre)r{r|rMrr}rmr&rc)rar|r{rErErFrds
z_ModuleMarker.__init__r-rLcCs
||jvSrerk�rar|rErErF�__contains__�
z_ModuleMarker.__contains__r%cCs
|j|Srerkr�rErErF�__getitem__r�z_ModuleMarker.__getitem__r.cCs>|j�|d�|js|jdur|j�|j�t�|�dSdSre)rMr:r{r]r|r&rur�rErErFr] s
�z_ModuleMarker._remove_itemrI�Union[_ModNS, Type[Any]]cCs|j�|�Sre)r}�__getattr__�rarIrErErF�resolve_attr'sz_ModuleMarker.resolve_attrcCs6||jvrt||�}||j|<|Stt|j|�}|Sre)rMr6r)rar|�markerrErErFr;*s


�z_ModuleMarker.get_moduler)r/c
s���jvr2tt�j��}z|�|�WdSty1}zt|t�s,t�d��d��|��d}~wwt|g��fdd�d�}�j�<dS)Nr2r3cs
����Sre)r]rE�r|rarErF�<lambda>As
z)_ModuleMarker.add_class.<locals>.<lambda>)rV)rMrr5ryr=r4rr>)rar|r)r?rDrEr�rFr<2s"


����	�z_ModuleMarker.add_classcCs,||jvrtt|j|�}|�|�dSdSre)rMrr5rG)rar|r)r?rErErFrHDs
�z_ModuleMarker.remove_classN)r|r(r{r~)r|r(r-rL)r|r(r-r%)r|r(r-r.�rIr(r-r�)r|r(r-r6)r|r(r)r/r-r.)rRr8rSrTrUrzrdr�r�r]r�r;r<rHrErErErFr6s







r6c@s.eZdZUdZded<ddd�Zddd�Zd
S)r)�__parentr6�_ModNS__parentr{cC�
||_dSre)r�)rar{rErErFrdOr�z_ModNS.__init__rIr(r-r�cCsnz|jj|}Wn	tyYnw|dur-t|t�r|jSt|t�s%J�|�|jj|�St	d|jj
|f��)Nz<Module %r has no mapped classes registered under the name %r)r�rMr7r4r6r}r5rsrmrrr|)rarI�valuerErErFr�Rs�

��z_ModNS.__getattr__N)r{r6r��rRr8rSrUrzrdr�rErErErFrJ�


rc@s.eZdZUdZded<d
dd�Zdd
d�ZdS)�_GetColumns�r)r/r)cCr�rer�rfrErErFrdir�z_GetColumns.__init__rIr(r-rcCs�t|jdd�}|rC||jvrtd|j|f��|j|}|jtjjurCt|t	j
�s+J�|j}t|t�r7|j
}nt|t�sCt�d|��t|j|�S)NF)�	configurez/Class %r does not have a mapped column named %rzaProperty %r is not an instance of ColumnProperty (i.e. does not correspond directly to a Column).)rr)�all_orm_descriptorsr=�extension_typer�NotExtension�
NOT_EXTENSIONr4r�QueryableAttribute�propertyrr|rrr>�getattr)rarI�mp�desc�proprErErFr�ls*
��


��z_GetColumns.__getattr__N)r)r/�rIr(r-rr�rErErErFr�dr�r�cCst�|j�Sre)r�inspectr))�targetrErErFr��sr�c@s6eZdZUdZded<ded<d
dd�Zdd
d�ZdS)�	_GetTable�rI�metadatar(rIr!r�cCs||_||_dSrer�)rarIr�rErErFrd�s
z_GetTable.__init__r-r"cCs|jjt||j�Sre)r��tablesrrIr�rErErFr��rgz_GetTable.__getattr__N)rIr(r�r!)rIr(r-r"r�rErErErFr��s

r�r�rcCst|t�r|�g|�}t|�Sre)r4r5rsr�)rIr�rErErF�_determine_container�s
r�c@sxeZdZUdZded<ded<ded<ded	<d
ed<ded
<	d"d#dd�Zd$dd�Zd%dd�Zd&dd�Zd'dd �Z	d!S)(�_class_resolver)r)r��arg�fallback�_dict�
_resolvers�favor_tablesr/r)�RelationshipProperty[Any]r��Mapping[str, Any]r�r(r�rLr�z Tuple[Callable[[str], Any], ...]r�FcCs6||_||_||_||_t�|j�|_d|_||_	dS)NrE)
r)r�r�r�r�PopulateDict�_access_clsr�r�r�)rar)r�r�r�r�rErErFrd�s
z_class_resolver.__init__rIr-rc
Cs|j}t�|�}|j}|dusJ�|j}|j}|jr2||jvr$|j|S||jvr2t	|t
|d|��S||vr=t|||�S|jsX||jvrJ|j|S||jvrXt	|t
|d|��Sd|vrq|tt
|d�vrqtt
|d�}|�|�S|jr�|jD]}||�}	|	dur�|	Sqw|j|S)Nr�r0)r)r�manager_of_class�registry�_class_registryr�r�r��_schemasr�r�r�rr6r�r�r�)
rarIr)�manager�	decl_baser+r�r��resolvr�rErErFr��s@






��

�
z_class_resolver._access_clsr|�err�	Exceptionrc
Cs|t�d|�}|r.|�d��d�}t�d|jj�d|j�d|jj	�d|�d��d	|�d
��|�t�d|jj|j||j
f�|�)Nz(.+)\[(.+)\]r�'zWhen initializing mapper z, expression "relationship(z�)" seems to be using a generic class as the argument to relationship(); please state the generic argument using an annotation, e.g. "z	: Mapped[rz['z']] = relationship()"z�When initializing mapper %s, expression %r failed to locate a name (%r). If this is a class name, consider adding this relationship() to the %r class after both dependent classes have been defined.)�re�match�group�striprr>r�r{r�rIr))rar|r��
generic_match�clsargrErErF�_raise_for_name�s.������
���z_class_resolver._raise_for_name�Union[Table, Type[Any], _ModNS]c
Cs�|j}|j}d}z|�d�D]}|dur||}qt||�}qWn4ty9}z
|�||�WYd}~dSd}~wtyT}z|�|jd|�WYd}~dSd}~wwt|t	�r]|j
Strit|tt
tf�siJ�|S)Nr1r)r�r�r9r�r7r�rr�argsr4r�r)r�typer"r)rar|�d�rvalrBr��nrErErF�
_resolve_name�s*
�� ��
z_class_resolver._resolve_namec
Csdzt|jt�|j�}t|t�r|jWS|WSty1}z|�|j	d|�WYd}~dSd}~ww)Nr)
�evalr��globalsr�r4r�r)rrr�r�)ra�xr�rErErF�__call__s
 ��z_class_resolver.__call__N�F)
r)r/r�r�r�r�r�r(r�rLr�)r|r(r�r�r-r)r-r�)r-r)
rRr8rSrUrzrdr�r�r�r�rErErErFr��s

�

'
r�r��_fallback_dictr�r��mTuple[Callable[[str], Callable[[], Union[Type[Any], Table, _ModNS]]], Callable[[str, bool], _class_resolver]]csjtdur ddl}ddlm}ddlm}t�|j��||d��add��fd
d�
}d��fdd�}||fS)Nrr)�foreign)�remote)r�r�Fr�r(r�rLr-r�cst��t||d�S)N)r�)r�r�)r�r��r)r�rErF�resolve_arg1s
�z_resolver.<locals>.resolve_arg�-Callable[[], Union[Type[Any], Table, _ModNS]]cst��t|�jSre)r�r�r�)r�r�rErF�resolve_name6sz_resolver.<locals>.resolve_namer�)r�r(r�rLr-r�)r�r(r-r�)	r��
sqlalchemy�r�r�r�
immutabledict�__dict__�union)r)r�r�r�r�r�r�rEr�rF�	_resolver"s�r�)r'r(r)r*r+r,r-r.)r'r(r)r/r+r,r-r.)rIr(r+r,rJrKr-rL)rIr(r�rr-r�)r)r/r�r�r-r�)?rT�
__future__rr��typingrrrrrrr	r
rrr
rrrrrrr[r�rr�descriptor_propsr�
propertiesrrrrr�
sql.schemar�util.typingr�
relationshipsr r!r"r#r(r�r,�setr&rzr<rHrQr%r5r6rr��	_inspectsr�r�r�r�r�rErErErF�<module>sn

6
! EH �