id1dZddlZddlmZddlmZddlmZddlmZddlmZdd l m Z dd l m Z dd l m Z dd l mZeZd ZGddeZGddeZGddeZGddeZejedGddeZdZGddeZdZdZdS)zRoutines to handle the string class registry used by declarative. This system allows specification of classes and expressions used in :func:`_orm.relationship` using strings. N)exc) inspection)util) class_mapper) interfaces)ColumnProperty)RelationshipProperty)SynonymProperty)_get_table_keyc||jvr>|j|}t|tst||gx}|j|<n ||j|< |jd}n*#t$rt ddx|jd<}YnwxYw|jd}|r^|d}||}|D]}||}| |||\dSdS)z^Add a class to the _decl_class_registry associated with the given declarative class. _sa_module_registryN.r) _decl_class_registry isinstance_MultipleClassMarkerKeyError _ModuleMarker __module__splitpop get_module add_class) classnameclsexisting root_moduletokenstokenmodules [/opt/cloudlinux/venv/lib/python3.11/site-packages/sqlalchemy/ext/declarative/clsregistry.pyrr!sa C,,,+I6($899 6%c8_55 6Hs//2 +E./DE EEE((=tDD E ! KKE ^ ! !# & &F ) 1 ''.. . .E&&u--FFC((( )))))s A!!$BBc6eZdZdZdZd dZdZdZdZdZ dS) rzRrefers to multiple classes of the same name within _decl_class_registry. ) on_removecontents __weakref__Nc|_tfd|D_tdS)NcDg|]}tj|jS)weakrefref _remove_item).0itemselfs r! z1_MultipleClassMarker.__init__..Ts( F F FdW[t0 1 1 F F F)r#setr$ _registriesadd)r.classesr#s` r!__init__z_MultipleClassMarker.__init__QsL" F F F Fg F F F    r0c$d|jDS)Nc3*K|]}|VdSNr(r,r*s r! z0_MultipleClassMarker.__iter__..Ys(//#//////r0r$)r.s r!__iter__z_MultipleClassMarker.__iter__Xs//////r0ct|jdkr.tjdd||gzzt |jd}|}|t ||S)NzxMultiple classes found for path "%s" in the registry of this declarative base. Please use a fully module-qualified path.rr)lenr$rInvalidRequestErrorjoinlist NameError)r.pathkeyr*rs r! attempt_getz _MultipleClassMarker.attempt_get[s t}   ! !)B88DC5L))+ t}%%a(C#%%C{nn$Jr0c|j||js7t||jr|dSdSdSr8)r$remover2discardr#)r.r*s r!r+z!_MultipleClassMarker._remove_itemjsj S!!!} !    % % %~ !      ! ! ! !r0ctdd|jDD}|j|vr%tjd|jd|jd|jtj||j dS)Nc g|] }||j Sr8)r)r,rs r!r/z1_MultipleClassMarker.add_item..vs'   ?"??r0c"g|] }| Sr(r(r9s r!r/z1_MultipleClassMarker.add_item..xs;;;cCCEE;;;r0z[This declarative base already contains a class with the same class name and module name as rz2, and will be replaced in the string-lookup table.) r1r$rrwarn__name__r3r)r*r+)r.r-moduless r!add_itemz_MultipleClassMarker.add_itemqs  ;;T];;;      ?g % % II???DMMM3    '+dD,=>>?????r0r8) rNr __qualname____doc__ __slots__r5r<rFr+rPr(r0r!rrIsz 7I000   !!!@@@@@r0rc@eZdZdZdZdZdZdZdZdZ dZ d Z d S) rz>Refers to a module name within _decl_class_registry. )parentnamer$mod_nsrDr%c||_||_i|_t||_|jr|jj|jgz|_ng|_t |dSr8)rUrVr$_ModNSrWrDr2r3)r.rVrUs r!r5z_ModuleMarker.__init__sd   Tll ;  (DI;6DIIDIr0c||jvSr8r;r.rVs r! __contains__z_ModuleMarker.__contains__st}$$r0c|j|Sr8r;r[s r! __getitem__z_ModuleMarker.__getitem__s}T""r0c|j|d|jsB|j=|j|jt |dSdSdSr8)r$rrUr+rVr2rIr[s r!r+z_ModuleMarker._remove_itemsm $%%%} &!8 K $ $TY / / /    % % % % % & &!8!8r0c,t|j|Sr8)getattrrWr.rEs r! resolve_attrz_ModuleMarker.resolve_attrst{C(((r0ch||jvrt||}||j|<n |j|}|Sr8)r$r)r.rVmarkers r!rz_ModuleMarker.get_modules> t} $ $"4..F"(DM$  ]4(F r0cjvr$j}||dSt|gfdx}j<dS)Nc.Sr8)r+)rVr.sr!z)_ModuleMarker.add_class..s):):4)@)@r0)r#)r$rPr)r.rVrrs`` r!rz_ModuleMarker.add_classss 4= }T*H   c " " " " "-A!@!@!@!@!@... Ht}T***r0N) rNrrQrRrSr5r\r^r+rcrrr(r0r!rrs NI   %%%###&&& )))r0rceZdZdZdZdZdS)rY)__parentc||_dSr8)_ModNS__parent)r.rUs r!r5z_ModNS.__init__s  r0c |jj|}|>>}dO44)CC#D.9912478 tx%%%r0Nrqr(r0r!rsrss7I&&&&&r0rsc4tj|jSr8)rinspectr)targets r!rhrhs:%fj11r0ceZdZdZdZdZdS) _GetTablerEmetadatac"||_||_dSr8r)r.rErs r!r5z_GetTable.__init__s  r0cL|jjt||jSr8)rtablesr rErbs r!rpz_GetTable.__getattr__s}#N3$A$ABBr0Nrqr(r0r!rrs<!I!!!CCCCCr0rcvt|tr|g|}t|Sr8)rrrFrs)rEros r!_determine_containerrs8%-..+!!"c** u  r0c.eZdZddZdZdZdZdZdS) _class_resolverFc||_||_|x|_|_||_t j|j|_d|_ ||_ dS)Nr() rr~arg_declarative_argfallbackr PopulateDict _access_cls_dict _resolvers favor_tables)r.rr~rrrs r!r5z_class_resolver.__init__sP +..4(  &t'788 (r0cR|j}|jrC||jjvr|jj|S||jjvrt ||jS||jvrt||j|S|jsC||jjvr|jj|S||jjvrt ||jSd|jvr1||jdvr"|jd}||S|j r|j D]}||}||cS|j |S)Nr) rrrr_schemasrrrrcrr)r.rErregistryresolvros r!rz_class_resolver._access_clssZh   4cl)))|*3// --- cl333 #* * *'S-Ec-JKK K  4cl)))|*3// --- cl333 "S%= = =s/0EFFF/0EFH((-- - _ !/ ! !s $ LLL%}S!!r0c tjtjd|jjd|jd|d|jd |dS)NzWhen initializing mapper 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.)from_)rraise_rr@r~rUrr)r.rVerrs r!_raise_for_namez_class_resolver._raise_for_name/sh  # # 9###TXXXtttTXXX ?   r0c|j}|j}d} |dD]}| ||} t||} t |t r|jS|S#t$r!}|||Yd}~dSd}~wt$r,}||j d|Yd}~dSd}~wwxYw)Nrr) rrrrarrsrrrrCargs)r.rVdrvalrrns r! _resolve_namez_class_resolver._resolve_name;sx J C 0 0<U8DD"4//DD  0$ ,, x  , , ,  s + + + + + + + + + / / /  A . . . . . . . . . /s#3A$$ C.B  C!B>>Cc t|jt|j}t |t r|jS|S#t$r,}||j d|Yd}~dSd}~wwxYw)Nr) evalrglobalsrrrsrrCrr)r.xrs r!__call__z_class_resolver.__call__Os /TXwyy$*55A![)) u  / / /  A . . . . . . . . . /sAAA A=!A88A=NF)rNrrQr5rrrrr(r0r!rrse))))"""@    ( / / / / /r0rcddl}ddlm}m}|j||ddfd }fd}||fS)Nr)foreignremoteFc,t||S)Nr)r)rrrrr~s r! resolve_argz_resolver..resolve_argbs% x<    r0c2t|jSr8)rr)rrrr~s r! resolve_namez_resolver..resolve_namegssD(C88FFr0r) sqlalchemysqlalchemy.ormrr__dict__copyupdate)rr~rrrrrrs`` @r! _resolverr[s........"''))H OO6::;;;        GGGGGGG  $$r0c Xt|trt||\}}dD]L}t||}t|tjr t |||||dkMdD]F}t||}t|tjrt ||||G|jrat|jtrG|j\}}dD]:}||vr4t||tjr|||||<;|S)N)order_by primaryjoin secondaryjoin secondary_user_defined_foreign_keys remote_siderr)argument)rrr foreign_keysrr) rr rrar string_typessetattrbackreftuple)rr~rrattrvrEkwargss r!_deferred_relationshiprms]$,--%=$-c4$8$8! k   Dd##A!T.// K 0CDDD " 5 5Dd##A!T.// 5dLLOO444 < =Jt|U;; =,KC = =6>>j4L$"3''>$/;vd|#<#rsQ ,,,,,,222222------$$$$$$cee %)%)%)P:@:@:@:@:@6:@:@:@z11111F111h     V   0&&&&&&&&&:" [!!11 CCCCCCCC S/S/S/S/S/fS/S/S/l%%%$)))))r0