
    ,h F                       % S r SSKJr  SSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SS	KJ
r
  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSKJ!r!  SSKJr  SSK"J#r#  SS K$J%r%  \(       a  SS!K&J'r'  SS"K"J(r(  SS#K"J)r)  \" S$\S%9r*\\+\\,S&4   4   r-\." 5       r/S'\0S('           S>S) jr1        S?S* jr2        S@S+ jr3 " S, S&5      r4 " S- S.\45      r5 " S/ S0\45      r6 " S1 S25      r7 " S3 S45      r8\!Rr                  " \85      " S5 5         " S6 S75      r:SAS8 jr; " S9 S:5      r<Sq=S;\0S<'   SBS= jr>g)CzRoutines 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ClsRegistryTokenzSet[ClsRegistryToken]_registriesc                `   X;   a3  X    n[        U[        5      (       d  [        U[        SU5      /5      X '   OXU '    [        [        US   5      nUR
                  R                  S5      nU(       aX  UR                  S5      nUR                  U5      nU H  nUR                  U5      nM      UR                  X5        U(       a  MW  gg! [         a    [        SS5      =US'   n Nf = f! [         a6  n[        U[        5      (       d  [        R                  " SU  S35      Uee SnAff = f)zVAdd 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)		classnameclsdecl_class_registryexistingroot_moduletokenstokenmoduleaes	            R/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/orm/clsregistry.pyr6   r6   @   sG    '&1($899-Ad;12.* *-I&
./DE
 ^^!!#&F 

1''.E&&u-F 		Y, &  
/6	
12[
.  	fm44--YK (3 3 
 	s)   C 0C- C*)C*-
D-71D((D-c                   X;   a-  X    n[        U[        5      (       a  UR                  U5        OX 	  [        [        US   5      nUR                  R                  S5      nU(       aX  UR                  S5      nUR                  U5      nU H  nUR                  U5      nM      UR                  X5        U(       a  MW  g g ! [
         a     g f = f! [         a    [        U[        5      (       d   N<e f = f)Nr*   r+   r   )r.   r/   remove_itemr   r0   r1   r2   r3   r4   r5   remove_classr7   )r9   r:   r;   r<   r=   r>   r?   r@   s           rB   rE   rE   v   s     '&1h 455  %#../DE
 ^^!!#&F


1''.E&&u-F 		/ &    	fm44		s#   C &C 
CCC53C5c                    X;  a  gX   n[        U[        5      (       a-  UR                   H  nU" U5      (       d  M    g   [        S5      eU" U5      (       + $ )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.

TFzunknown codepath)r.   r/   contentsNotImplementedError)keyr;   testthing	sub_things        rB   _key_is_emptyrM      sW    $ %$E%-..II ( &&899;    c                      \ rS rSrSrSrSrg)r&      zAan object that can be in the registry._class_registry as a value. N)__name__r2   __qualname____firstlineno____doc__	__slots____static_attributes__rQ   rN   rB   r&   r&      s
    KIrN   c                  z    \ rS rSr% SrSrS\S'   S\S'    S   SS	 jjrSS
 jrSS jr	SS jr
SS jrSS jrSrg)r/      zJrefers to multiple classes of the same name
within _decl_class_registry.

)	on_removerG   __weakref__zSet[weakref.ref[Type[Any]]]rG   z/CallableReference[Optional[Callable[[], None]]]rZ   Nc                    X l         U Vs1 s H#  n[        R                  " X0R                  5      iM%     snU l        [
        R                  U 5        g s  snf N)rZ   weakrefref_remove_itemrG   r'   add)selfclassesrZ   items       rB   __init___MultipleClassMarker.__init__   sF    
 #=D
=DTGKK//0W
 	
s   *Ac                N    U R                  [        R                  " U5      5        g r]   )r`   r^   r_   rb   r:   s     rB   rD    _MultipleClassMarker.remove_item   s    '++c*+rN   c                (    S U R                    5       $ )Nc              3  .   #    U  H  o" 5       v   M     g 7fr]   rQ   ).0r_   s     rB   	<genexpr>0_MultipleClassMarker.__iter__.<locals>.<genexpr>   s     /#s   rG   )rb   s    rB   __iter___MultipleClassMarker.__iter__   s    ///rN   c                    [        U R                  5      S:  a+  [        R                  " SSR	                  X/-   5      -  5      e[        U R                  5      S   nU" 5       nUc  [        U5      eU$ )Nr   zxMultiple classes found for path "%s" in the registry of this declarative base. Please use a fully module-qualified path.r+   r   )lenrG   r   r8   joinlist	NameError)rb   pathrI   r_   r:   s        rB   attempt_get _MultipleClassMarker.attempt_get   ss    t}}!))B 88D5L)+  t}}%a(C%C{n$JrN   c                    U R                   R                  U5        U R                   (       d8  [        R                  U 5        U R                  (       a  U R                  5         g g g r]   )rG   discardr'   rZ   )rb   r_   s     rB   r`   !_MultipleClassMarker._remove_item   sD    c"}}%~~   rN   c                   [        U R                  5       Vs/ s H	  o"" 5       PM     sn Vs1 s H  nUc  M  UR                  iM     nnUR                  U;   a3  [        R                  " SUR                  < SUR
                  < S35        U R                  R                  [        R                  " XR                  5      5        g s  snf s  snf )Nz[This declarative base already contains a class with the same class name and module name as r+   z2, and will be replaced in the string-lookup table.)
ru   rG   r2   r   warnrR   ra   r^   r_   r`   )rb   rd   r_   r:   moduless        rB   add_item_MultipleClassMarker.add_item   s     *.dmm)<=)<#)<=
= CNN= 	 

 ??g%II ??DMM3 	'++d,=,=>? >
s   CCC)rG   rZ   r]   )rc   zIterable[Type[Any]]rZ   zOptional[Callable[[], None]])r:   r)   returnNone)r   z*Generator[Optional[Type[Any]], None, None])rw   	List[str]rI   strr   r)   )r_   zweakref.ref[Type[Any]]r   r   )rd   r)   r   r   )rR   r2   rS   rT   rU   rV   __annotations__re   rD   rp   rx   r`   r   rW   rQ   rN   rB   r/   r/      sP    
 7I))>>
 37	$	 0	,0!@rN   r/   c                      \ rS rSr% SrSrS\S'   S\S'   S\S	'   S
\S'   SS jrSS jrSS jr	SS jr
SS jrSS jrSS jrSS jrSrg)r0   i  z6Refers to a module name within
_decl_class_registry.

)parentnamerG   mod_nsrw   r[   Optional[_ModuleMarker]r   z5Dict[str, Union[_ModuleMarker, _MultipleClassMarker]]rG   _ModNSr   r   rw   c                    X l         Xl        0 U l        [        U 5      U l        U R                   (       a*  U R                   R
                  U R                  /-   U l        O/ U l        [        R                  U 5        g r]   )r   r   rG   r   r   rw   r'   ra   )rb   r   r   s      rB   re   _ModuleMarker.__init__  sT    	Tl;;((DII;6DIDIrN   c                    XR                   ;   $ r]   ro   rb   r   s     rB   __contains___ModuleMarker.__contains__  s    }}$$rN   c                     U R                   U   $ r]   ro   r   s     rB   __getitem___ModuleMarker.__getitem__  s    }}T""rN   c                    U R                   R                  US 5        U R                   (       dH  U R                  b%  U R                  R                  U R                  5        [
        R                  U 5        g g r]   )rG   r4   r   r`   r   r'   r{   r   s     rB   r`   _ModuleMarker._remove_item   sP    $%}}{{&((3% rN   c                8    U R                   R                  U5      $ r]   )r   __getattr__rb   rI   s     rB   resolve_attr_ModuleMarker.resolve_attr'  s    {{&&s++rN   c                    XR                   ;  a  [        X5      nX R                   U'   U$ [        [        U R                   U   5      nU$ r]   )rG   r0   r   )rb   r   markers      rB   r5   _ModuleMarker.get_module*  sE    }}$"4.F"(MM$  -t)<=FrN   c                H  ^ ^ TT R                   ;   a0  [        [        T R                   T   5      n UR                  U5        g [        U/UU 4S jS9T R                   T'   g ! [         a6  n[        U[        5      (       d  [        R                  " ST S35      Uee S nAff = f)Nr,   r-   c                 &   > TR                  T 5      $ r]   )r`   )r   rb   s   rB   <lambda>)_ModuleMarker.add_class.<locals>.<lambda>A  s    ):):4)@rN   )rZ   )rG   r   r/   r   r7   r.   r   r8   )rb   r   r:   r<   rA   s   ``   rB   r6   _ModuleMarker.add_class2  s    4== 0$--2EFH	!!#& #7!@#DMM$ " !(,@AA11  '7 7 
 s   A! !
B!+1BB!c                    XR                   ;   a/  [        [        U R                   U   5      nUR                  U5        g g r]   )rG   r   r/   rD   )rb   r   r:   r<   s       rB   rE   _ModuleMarker.remove_classD  s5    == 0$--2EFH  % !rN   )rG   r   r   r   rw   N)r   r   r   r   )r   r   r   bool)r   r   r   r&   )r   r   r   r   rI   r   r   zUnion[_ModNS, Type[Any]])r   r   r   r0   )r   r   r:   r)   r   r   )rR   r2   rS   rT   rU   rV   r   re   r   r   r`   r   r5   r6   rE   rW   rQ   rN   rB   r0   r0     sM    
 NI##CCN
O	%#&,$&rN   r0   c                  8    \ rS rSr% SrS\S'   SS jrS	S jrSrg)
r   iJ  )__parentr0   _ModNS__parentc                    Xl         g r]   )r   )rb   r   s     rB   re   _ModNS.__init__O  s    rN   c                h    U R                   R                  U   nUb^  [        U[        5      (       a  UR                  $ [        U[
        5      (       d   eUR                  U R                   R                  U5      $  [        SU R                   R                  < SU< 35      e! [         a     N3f = f)NzModule z1 has no mapped classes registered under the name )r   rG   r.   r0   r   r/   rx   rw   r1   rv   r   )rb   rI   values      rB   r   _ModNS.__getattr__R  s    
	FMM**3/E  e]33 <<'%e-ABBBB ,,T]]-?-?EE ! .2mm.@.@#G
 	
  		s   B$ $
B10B1N)r   r0   r   	rR   r2   rS   rT   rV   r   re   r   rW   rQ   rN   rB   r   r   J  s    I
rN   r   c                  8    \ rS rSr% SrS\S'   SS jrS	S jrSrg)
_GetColumnsid  r:   r)   r:   c                    Xl         g r]   r   rh   s     rB   re   _GetColumns.__init__i  s    rN   c                "   [        U R                  SS9nU(       a  XR                  ;  a  [        SU R                  < SU< 35      eUR                  U   nUR                  [
        R                  R                  L a}  [        U[        R                  5      (       d   eUR                  n[        U[        5      (       a  UR                  nO.[        U[        5      (       d  [        R                   " SU-  5      e[#        U R                  U5      $ )NF)	configurezClass z% does not have a mapped column named zaProperty %r is not an instance of ColumnProperty (i.e. does not correspond directly to a Column).)r   r:   all_orm_descriptorsr7   extension_typer   NotExtensionNOT_EXTENSIONr.   r   QueryableAttributepropertyr   r   r   r   r8   getattr)rb   rI   mpdescprops        rB   r   _GetColumns.__getattr__l  s    $((e4000$xx& 
 ))#.D""j&=&=&K&KK!$
(E(EFFFF}}dO44))C#D.99112478 
 txx%%rN   N)r:   r)   rI   r   r   r   r   rQ   rN   rB   r   r   d  s    I	N&rN   r   c                B    [         R                  " U R                  5      $ r]   )r   inspectr:   )targets    rB   r   r     s    :%%fjj1rN   c                  B    \ rS rSr% SrS\S'   S\S'   S
S jrSS jrSrg	)	_GetTablei  rI   metadatar   rI   r"   r   c                    Xl         X l        g r]   r   )rb   rI   r   s      rB   re   _GetTable.__init__  s     rN   c                Z    U R                   R                  [        XR                  5         $ r]   )r   tablesr   rI   r   s     rB   r   _GetTable.__getattr__  s     }}##N3$ABBrN   N)rI   r   r   r"   )rI   r   r   r#   r   rQ   rN   rB   r   r     s    !I	H!CrN   r   c                f    [        U[        5      (       a  UR                  / U 5      n[        U5      $ r]   )r.   r/   rx   r   )rI   r   s     rB   _determine_containerr     s-    %-..!!"c*urN   c                      \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'    S         SS jjrSS jrSS jrSS jr	SS jr
Srg)_class_resolveri  )r:   r   argfallback_dict
_resolversfavor_tablesr)   r:   RelationshipProperty[Any]r   Mapping[str, Any]r   r   r   r   r   z Tuple[Callable[[str], Any], ...]r   c                    Xl         X l        X@l        X0l        [        R
                  " U R                  5      U l        SU l        XPl	        g )NrQ   )
r:   r   r   r   r   PopulateDict_access_clsr   r   r   )rb   r:   r   r   r   r   s         rB   re   _class_resolver.__init__  s=     	 &&t'7'78
(rN   c                   U R                   n[        R                  " U5      nUR                  nUc   eUR                  nUR
                  nU R                  (       aD  XR                  ;   a  UR                  U   $ XR                  ;   a  [        U[        USU5      5      $ X;   a  [        XU   5      $ U R                  (       dD  XR                  ;   a  UR                  U   $ XR                  ;   a  [        U[        USU5      5      $ SU;   a;  U[        [        US   5      ;   a$  [        [        US   5      nUR                  U5      $ U R                  (       a"  U R                   H  nU" U5      n	U	c  M  U	s  $    U R                   U   $ )Nr   r*   )r:   r   manager_of_classregistry_class_registryr   r   r   _schemasr   r   r   r   r0   r   r   r   )
rb   rI   r:   manager	decl_baser;   r   r   resolvr   s
             rB   r   _class_resolver._access_cls  sp   hh--c2$$	$$$'77%%oo%s++))) gc:x&HII%'-EFF  oo%s++))) gc:x&HII $77C4./DED
 =
 23HIH ((--__//s$ L *
 }}S!!rN   c                   [         R                  " SU5      nU(       a  UR                  S5      R                  S5      n[        R
                  " SU R                  R                   SU R                  < SU R                  R                   SUR                  S5       S	U S
35      Ue[        R
                  " SU R                  R                  < SU R                  < SU< SU R                  < S3	5      Ue)Nz(.+)\[(.+)\]r   'zWhen 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[r   z['z']] = relationship()"z, expression z failed to locate a name (zG). If this is a class name, consider adding this relationship() to the z6 class after both dependent classes have been defined.)rematchgroupstripr   r8   r   r   r   rI   r:   )rb   r   errgeneric_matchclsargs        rB   _raise_for_name_class_resolver._raise_for_name  s    $7"((+11#6F))+DII,<,<+= >,,0HH< 8 IIMM?)M,?,?,B+CVH24  ))
 99##TXXtTXX	? rN   c                   U R                   nU R                  nS n UR                  S5       H  nUc  X$   nM  [        X45      nM     [	        U[
        5      (       a  UR                  $ [        (       a"  [	        U[        [        [        45      (       d   eU$ ! [         a  nU R                  X5         S nAg S nAf[         a)  nU R                  UR                  S   U5         S nAg S nAff = f)Nr+   r   )r   r   r3   r   r.   r   r:   r   typer#   r   r1   r   rv   args)rb   r   drvalr?   r   ns          rB   _resolve_name_class_resolver._resolve_name  s    xxJJ	C<8D"4/D	 ) $,,xx =%dT5&,ABBBB  	,  ++ 	/  A..	/s#   ,B 
C."B88C.C))C.c                    [        U R                  [        5       U R                  5      n[	        U[
        5      (       a  UR                  $ U$ ! [         a)  nU R                  UR                  S   U5         S nAg S nAff = f)Nr   )
evalr   globalsr   r.   r   r:   rv   r   r   )rb   xr   s      rB   __call___class_resolver.__call__  se    	/TXXwy$**5A![))uu 	/  A..	/s   A	A A 
BA<<B)r   r   r   r:   r   r   r   NF)
r:   r)   r   r   r   r   r   r   r   r   r   )r   r   r   	Exceptionr   r   )r   zUnion[Table, Type[Any], _ModNS])r   r   )rR   r2   rS   rT   rV   r   re   r   r   r   r   rW   rQ   rN   rB   r   r     s|    I 
N
##	H00 #)) () $	)
 ) ) %"N.,	/rN   r   r   _fallback_dictc                   ^ ^ [         cA  SS KnSSKJn  SSKJn  [
        R                  " UR                  5      R                  X4S.5      q SS	U U4S jjjn    S
U U4S jjnXe4$ )Nr   r   )foreign)remote)r  r  c                $   > [        TT[        XS9$ )N)r   )r   r  )r   r   r:   r   s     rB   resolve_arg_resolver.<locals>.resolve_arg1  s    ~s
 	
rN   c                <   > [        TT[        U 5      R                  $ r]   )r   r  r   )r   r:   r   s    rB   resolve_name_resolver.<locals>.resolve_name6  s     sD.#>LLLrN   r  )r   r   r   r   r   r   )r   r   r   z-Callable[[], Union[Type[Any], Table, _ModNS]])	r  
sqlalchemy r  r  r   immutabledict__dict__union)r:   r   r  r  r  r	  r  s   ``     rB   	_resolverr  "  sn     ++J,?,?@FF2

 

MM	6M M
 $$rN   )r9   r   r:   zType[_T]r;   _ClsRegistryTyper   r   )r9   r   r:   r)   r;   r  r   r   )rI   r   r;   r  rJ   zCallable[[Any], bool]r   r   )rI   r   r   r   r   r   )r:   r)   r   r   r   zmTuple[Callable[[str], Callable[[], Union[Type[Any], Table, _ModNS]]], Callable[[str, bool], _class_resolver]])?rU   
__future__r   r   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r^   r  r   r   descriptor_propsr   
propertiesr   r   r   r   r   
sql.schemar   util.typingr    relationshipsr!   r"   r#   r$   r   r   r  setr'   r   r6   rE   rM   r&   r/   r0   r   r   	_inspectsr   r   r   r  r  rQ   rN   rB   <module>r     s   # 	         !             - &     ' +3%"T!#uT3E-E'F"FG  &)U" *33!38H3	3l"9I	B	)   
	@ B@+ B@JE&$ E&P
 
4& &@   [ !1
C C/ /D %)! (%rN   