zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
U
¸ý°d[Hã@s¦UdZddlmZddlZddlmZddlmZddlmZddlmZddlm    Z    dd    lm
Z
dd
lm Z dd lm Z dd lm Z dd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlmZddl"m#Z#dd l$m%Z%erdd!l&m'Z'dd"l"m(Z(dd#l"m)Z)ed$ed%Z*e e+ee,d&ffZ-e.ƒZ/d'e0d(<d)d*d+d,d-œd.d/„Z1d)d0d+d,d-œd1d2„Z2d)d+d3d4d5œd6d7„Z3Gd8d&„d&ƒZ4Gd9d:„d:e4ƒZ5Gd;d<„d<e4ƒZ6Gd=d>„d>ƒZ7Gd?d@„d@ƒZ8e! 9e8¡dAdB„ƒGdCdD„dDƒZ:d)dEd@dFœdGdH„Z;GdIdJ„dJƒZ<da=dKe0dL<d0dMdNdOœdPdQ„Z>dS)Rz±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ÚstrzType[_T]Ú_ClsRegistryTypeÚNone)Ú    classnameÚclsÚdecl_class_registryÚreturnc    
Cs||kr6||}t|tƒs>t|td|ƒgƒ}||<n|||<ztt|dƒ}Wn&tk
rvtddƒ|d<}YnX|j d¡}|r | d¡}| |¡}|D]}| |¡}q¢z|     ||¡Wq„t
k
r}z&t|tƒsöt   d|›d¡|‚n‚W5d}~XYq„Xq„dS)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©rDúQd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/orm/clsregistry.pyr;@sF
 ÿÿþÿþ
 
 
 
 
ÿýr;r.cCsÈ||kr,||}t|tƒr&| |¡n||=ztt|dƒ}Wntk
rTYdSX|j d¡}|rÄ| d¡}|     |¡}|D]}|     |¡}q~z| 
||¡Wqbt k
rÀt|tƒsºn‚YqbXqbdS)Nr/r0r) r3r4Ú remove_itemrr5r6r7r8r9r:Ú remove_classr<)r*r+r,r>r?r@rArBrDrDrErGvs0
 ÿ 
 
 
rGzCallable[[Any], bool]Úbool)Úkeyr,Útestr-cCsP||kr dS||}t|tƒrB|jD]}||ƒr$dSq$tdƒ‚n
||ƒ SdS)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 codepathN)r3r4ÚcontentsÚNotImplementedError)rIr,rJÚthingZ    sub_thingrDrDrEÚ _key_is_empty—s
 
 
rNc@seZdZdZdZdS)r%zAan object that can be in the registry._class_registry as a value.rDN)Ú__name__r7Ú __qualname__Ú__doc__Ú    __slots__rDrDrDrEr%·sc@sˆeZdZUdZdZded<ded<d"dd    d
œd d „Zd ddœdd„Zddœdd„Zddd dœdd„Z    dddœdd„Z
d ddœd d!„Z dS)#r4zRrefers to multiple classes of the same name
    within _decl_class_registry.
 
    )Ú    on_removerKÚ __weakref__zSet[weakref.ref[Type[Any]]]rKz/CallableReference[Optional[Callable[[], None]]]rSNzIterable[Type[Any]]zOptional[Callable[[], None]])ÚclassesrScs(|ˆ_‡fdd„|Dƒˆ_t ˆ¡dS)Ncsh|]}t |ˆj¡’qSrD)ÚweakrefÚrefÚ _remove_item)Ú.0Úitem©ÚselfrDrEÚ    <setcomp>Îsz0_MultipleClassMarker.__init__.<locals>.<setcomp>)rSrKr&Úadd)r\rUrSrDr[rEÚ__init__Ès
 
ÿz_MultipleClassMarker.__init__r.r))r+r-cCs| t |¡¡dS©N)rXrVrW©r\r+rDrDrErFÓsz _MultipleClassMarker.remove_itemz*Generator[Optional[Type[Any]], None, None]©r-cCsdd„|jDƒS)Ncss|] }|ƒVqdSr`rD©rYrWrDrDrEÚ    <genexpr>×sz0_MultipleClassMarker.__iter__.<locals>.<genexpr>©rKr[rDrDrEÚ__iter__Ösz_MultipleClassMarker.__iter__ú    List[str]r')ÚpathrIr-cCsVt|jƒdkr*t dd ||g¡¡‚n(t|jƒd}|ƒ}|dkrNt|ƒ‚|SdS)NrzxMultiple classes found for path "%s" in the registry of this declarative base. Please use a fully module-qualified path.r0r)ÚlenrKrr=ÚjoinÚlistÚ    NameError)r\rhrIrWr+rDrDrEÚ attempt_getÙsýÿz _MultipleClassMarker.attempt_getzweakref.ref[Type[Any]])rWr-cCs.|j |¡|js*t |¡|jr*| ¡dSr`)rKÚdiscardr&rS)r\rWrDrDrErXès
 
z!_MultipleClassMarker._remove_item)rZr-cCsTdd„dd„|jDƒDƒ}|j|kr:t d|j|jf¡|j t ||j¡¡dS)NcSsh|]}|dk    r|j’qSr`)r7)rYr+rDrDrEr]ósþz0_MultipleClassMarker.add_item.<locals>.<setcomp>cSsg|]
}|ƒ‘qSrDrDrcrDrDrEÚ
<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.)    rKr7rÚwarnrOr^rVrWrX)r\rZÚmodulesrDrDrEÚadd_itemïsþ
 
ýÿz_MultipleClassMarker.add_item)N) rOr7rPrQrRÚ__annotations__r_rFrfrmrXrrrDrDrDrEr4½s
ý r4c@sºeZdZUdZdZded<ded<ded<d    ed
<d dd œd d„Zd ddœdd„Zd ddœdd„Zd ddœdd„Z    d ddœdd„Z
d ddœdd„Z d ddd œd!d"„Z d ddd œd#d$„Z d%S)&r5z>Refers to a module name within
    _decl_class_registry.
 
    )ÚparentÚnamerKÚmod_nsrhrTzOptional[_ModuleMarker]rtz5Dict[str, Union[_ModuleMarker, _MultipleClassMarker]]rKÚ_ModNSrvrgrhr')rurtcCsJ||_||_i|_t|ƒ|_|jr6|jj|jg|_ng|_t |¡dSr`)rtrurKrwrvrhr&r^)r\rurtrDrDrEr_s
z_ModuleMarker.__init__rH)rur-cCs
||jkSr`re©r\rurDrDrEÚ __contains__sz_ModuleMarker.__contains__r%cCs
|j|Sr`rerxrDrDrEÚ __getitem__sz_ModuleMarker.__getitem__r)cCs:|j |d¡|js6|jdk    r6|j |j¡t |¡dSr`)rKr9rtrXrur&rnrxrDrDrErX sz_ModuleMarker._remove_itemúUnion[_ModNS, Type[Any]]©rIr-cCs |j |¡Sr`)rvÚ __getattr__©r\rIrDrDrEÚ resolve_attr&sz_ModuleMarker.resolve_attrcCs4||jkr t||ƒ}||j|<ntt|j|ƒ}|Sr`)rKr5r)r\ruÚmarkerrDrDrEr:)s
 
 
 z_ModuleMarker.get_moduler.)rur+r-c
s–ˆˆjkrpttˆjˆƒ}z| |¡Wq’tk
rl}z&t|tƒsZt dˆ›d¡|‚n‚W5d}~XYq’Xn"t|g‡‡fdd„d}ˆjˆ<dS)Nr1r2cs
ˆ ˆ¡Sr`)rXrD©rur\rDrEÚ<lambda>@óz)_ModuleMarker.add_class.<locals>.<lambda>)rS)rKrr4rrr<r3rr=)r\rur+r>rCrDrrEr;1s 
 
 
ÿý ÿz_ModuleMarker.add_classcCs(||jkr$tt|j|ƒ}| |¡dSr`)rKrr4rF)r\rur+r>rDrDrErGCs
z_ModuleMarker.remove_classN)rOr7rPrQrRrsr_ryrzrXrr:r;rGrDrDrDrEr5s
 r5c@s8eZdZUdZded<ddœdd„Zddd    œd
d „Zd S) rw)Z__parentr5Ú_ModNS__parent)rtcCs
||_dSr`)r„)r\rtrDrDrEr_Nsz_ModNS.__init__r'r{r|cCstz|jj|}Wntk
r$Yn8X|dk    r\t|tƒr>|jSt|tƒsLt‚| |jj    |¡St
d|jj |fƒ‚dS)Nz<Module %r has no mapped classes registered under the name %r) r„rKr6r3r5rvr4ÚAssertionErrorrmrhrlru)r\rIÚvaluerDrDrEr}Qs
 
ÿÿz_ModNS.__getattr__N©rOr7rPrRrsr_r}rDrDrDrErwIs
rwc@s8eZdZUdZded<ddœdd„Zdddœd    d
„Zd S) Ú _GetColumns©r+r.r+cCs
||_dSr`r‰rarDrDrEr_hsz_GetColumns.__init__r'rr|cCs’t|jdd}|r†||jkr.td|j|fƒ‚|j|}|jtjjkr†t|t    j
ƒsVt ‚|j }t|t ƒrn|j}nt|tƒs†t 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+Zall_orm_descriptorsr<Zextension_typerZ NotExtensionZ NOT_EXTENSIONr3rZQueryableAttributer…Úpropertyrrurrr=Úgetattr)r\rIÚmpÚdescÚproprDrDrEr}ks*
ÿÿ
 
 
þÿz_GetColumns.__getattr__Nr‡rDrDrDrErˆcs
rˆcCs t |j¡Sr`)rÚinspectr+)ÚtargetrDrDrEr‚„rƒr‚c@sBeZdZUdZded<ded<dddœdd„Zddd    œd
d „Zd S) Ú    _GetTable©rIÚmetadatar'rIr!r”cCs||_||_dSr`r“)r\rIr”rDrDrEr_Žsz_GetTable.__init__r"r|cCs|jjt||jƒSr`)r”ÚtablesrrIr~rDrDrEr}’sz_GetTable.__getattr__Nr‡rDrDrDrEr’ˆs
 
r’r)rIr†r-cCst|tƒr| g|¡}t|ƒSr`)r3r4rmrˆ)rIr†rDrDrEÚ_determine_container–s
 r–c@s˜eZdZUdZded<ded<ded<ded    <d
ed <d ed <d"ddddd
dœdd„Zdddœdd„Zddddœdd„Zddœdd„Zddœdd „Z    d!S)#Ú_class_resolver)r+rÚargÚfallbackÚ_dictÚ
_resolversÚ favor_tablesr.r+úRelationshipProperty[Any]rúMapping[str, Any]r™r'r˜rHrœz Tuple[Callable[[str], Any], ...]r›F)r+rr™r˜rœcCs6||_||_||_||_t |j¡|_d|_||_    dS)NrD)
r+rr˜r™rZ PopulateDictÚ _access_clsršr›rœ)r\r+rr™r˜rœrDrDrEr_®sz_class_resolver.__init__rr|c
Cs|j}t |¡}|j}|dk    s"t‚|j}|j}|jrd||jkrH|j|S||j    krdt
|t |d|ƒƒS||krzt |||ƒS|js°||jkr”|j|S||j    kr°t
|t |d|ƒƒSd|krâ|t t|dƒkrât t|dƒ}| |¡S|jr|jD]}||ƒ}    |    dk    rð|    Sqð|j|S)Nr”r/)r+rZmanager_of_classÚregistryr…Z_class_registryr”rœr•Z_schemasr’rŒr–rr5rr›r™)
r\rIr+ÚmanagerZ    decl_baser,r”r Zresolvr†rDrDrErŸ¾sB
 
 
 
 
 
 
 ÿÿ
 
 
z_class_resolver._access_clsÚ    Exceptionr )ruÚerrr-c Cs‚t d|¡}|r^| d¡ d¡}t d|jj›d|j›d|jj    ›d| d¡›d    |›d
 ¡|‚n t d |jj|j||j
f¡|‚dS) 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rtr˜rIr+)r\rur£Z generic_matchZclsargrDrDrEÚ_raise_for_nameås 2ÿø
üÿúz_class_resolver._raise_for_namezUnion[Table, Type[Any], _ModNS]rbc
CsÒ|j}|j}d}z0| d¡D] }|dkr2||}qt||ƒ}qWn`tk
rn}z| ||¡W5d}~XYn`tk
r }z| |jd|¡W5d}~XYn.Xt|t    ƒr²|j
St rÊt|t t tfƒsÊt‚|SdS)Nr0r)r˜ršr8rŒr6r©rlÚargsr3rˆr+rÚtyper"rwr…)r\ruÚdÚrvalrAr£ÚnrDrDrEÚ _resolve_nameüs"
$
z_class_resolver._resolve_namec
Cshz.t|jtƒ|jƒ}t|tƒr&|jWS|WSWn4tk
rb}z| |j    d|¡W5d}~XYnXdS)Nr)
Úevalr˜Úglobalsršr3rˆr+rlr©rª)r\Úxr®rDrDrEÚ__call__s
 
z_class_resolver.__call__N)F)
rOr7rPrRrsr_rŸr©r¯r³rDrDrDrEr—œs
 
ú'r—ržÚ_fallback_dictrzmTuple[Callable[[str], Callable[[], Union[Type[Any], Table, _ModNS]]], Callable[[str, bool], _class_resolver]])r+rr-csxtdkr@ddl}ddlm}ddlm}t |j¡ ||dœ¡adddd    d
œ‡‡fd d „ }dd dœ‡‡fdd„ }||fS)Nrr)Úforeign)Úremote)rµr¶Fr'rHr—)r˜rœr-cstˆˆt||dS)N)rœ)r—r´)r˜rœ©r+rrDrEÚ resolve_arg3sÿz_resolver.<locals>.resolve_argz-Callable[[], Union[Type[Any], Table, _ModNS]])r˜r-cstˆˆt|ƒjSr`)r—r´r¯)r˜r·rDrEÚ resolve_name8sz_resolver.<locals>.resolve_name)F)    r´Ú
sqlalchemyÚrµr¶rZ immutabledictÚ__dict__Úunion)r+rrºrµr¶r¸r¹rDr·rEÚ    _resolver!s       ÿr¾)?rQÚ
__future__rr¥Útypingrrrrrrr    r
r r r rrrrrrrVr»rrZdescriptor_propsrZ
propertiesrrrrrZ
sql.schemarZ util.typingrZ relationshipsr r!r"r#r'r«r(Úsetr&rsr;rGrNr%r4r5rwrˆZ    _inspectsr’r–r—r´r¾rDrDrDrEÚ<module>sl                                6! EG ÿ