
    [hdE                   n   d Z ddlmZ ddlZddlZ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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dlmZ ddlmZ 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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d#l*m,Z, dd$l*m-Z- dd%l*m.Z. dd&l*m/Z/ dd'l*m0Z0 dd(l1m2Z2 dd)l3m4Z4 dd*l3m5Z5 dd+l6m7Z7 dd,l6m8Z8 dd-l6m9Z9 dd.l6m:Z: d/d0lm;Z; d/dlmZ d/d1lm6Z6 d/d2l<m=Z= d/d3l>m?Z? d/d4l@mAZA d/d5l@mBZB d/d6l6mCZC d/d7lDmEZE d/d8lDmFZF d/d9lDmGZG d/d:lDmHZH d/d;lDmIZI d/d<lDmJZJ er0dd=lmKZK dd>lmLZL dd?l$mMZM dd@lNmOZO ddAlmPZP d/dBlQmRZR d/dCl@mSZS d/dDlTmUZU  edEeF          ZVeeWef         ZXeeedGf         e
eWef         f         ZY G dH dIeIe                    ZZ G dJ dKeZe          eI          Z[ G dL dMeJ          Z\ddRZ]ddTZ^ddVZ_	 ddd\Z`dd_ZaddeZbddkZc e6jd        dl          ddo            ZeddqZf G dr ds          Zg G dt dueg          Zh G dv dwe          Zi G dx dyeg          Zj e6jd        dl          dd}            Zk G d~ dej          ZlddZmddZnddZodeo_p        ddZqdS )z(Internal implementation for declarative.    )annotationsN)Any)Callable)cast)Dict)Iterable)List)Mapping)
NamedTuple)NoReturn)Optional)Sequence)Tuple)Type)TYPE_CHECKING)TypeVar)Union   )
attributes)clsregistry)exc)instrumentation)	mapperlib)_O)attr_is_internal_proxy)InstrumentedAttribute)QueryableAttribute)_is_mapped_class)InspectionAttr)CompositeProperty)SynonymProperty)_AttributeOptions)_DCAttributeOptions)_IntrospectsAnnotations)_MappedAttribute)_MapsColumns)MapperProperty)Mapper)ColumnProperty)MappedColumn)_extract_mapped_subtype)_is_mapped_annotation)class_mapper)de_stringify_annotation   )event)util)
expression)_NoArg)Column)Table)topological)_AnnotationScanType)get_args)
is_fwd_ref)
is_literal)Protocol)	TypedDict)
_ClassDict)_RegistryType)Mapped)declared_attr)ClassManager)NamedColumn)MetaData)
FromClause_T)bound.c                  :    e Zd ZU dZded<   ded<   ded<   ddZdS )MappedClassProtocolzA protocol representing a SQLAlchemy mapped class.

    The protocol is generic on the type of class, use
    ``MappedClassProtocol[Any]`` to allow any mapped class.
    str__name__
Mapper[_O]
__mapper__rD   	__table__kwr   returnr   c                    d S N )selfrN   s     g/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/orm/decl_base.py__call__zMappedClassProtocol.__call__e             N)rN   r   rO   r   )rJ   
__module____qualname____doc____annotations__rU   rR   rW   rT   rH   rH   Z   sK           MMM,,,,,,rW   rH   c                  V    e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   ddZddZdS )_DeclMappedClassProtocolz:Internal more detailed version of ``MappedClassProtocol``.rC   metadatarI   __tablename___MapperKwArgs__mapper_args__Optional[_TableArgsType]__table_args__Optional[_DataclassArguments]_sa_apply_dc_transformsrO   Nonec                    d S rQ   rR   rS   s    rT   __declare_first__z*_DeclMappedClassProtocol.__declare_first__q   rV   rW   c                    d S rQ   rR   rh   s    rT   __declare_last__z)_DeclMappedClassProtocol.__declare_last__s   rV   rW   NrO   rf   )rJ   rX   rY   rZ   r[   ri   rk   rR   rW   rT   r]   r]   h   sl         @@"""",,,,::::,,,,++++++rW   r]   c                  `    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded<   d	ed
<   dS )_DataclassArgumentszUnion[_NoArg, bool]initrepreqorderunsafe_hash
match_argskw_onlyz'Union[_NoArg, Callable[..., Type[Any]]]dataclass_callableNrJ   rX   rY   r[   rR   rW   rT   rn   rn   v   sr         $$$$####    ??????rW   rn   cls	Type[Any]rO   3Optional[Union[_DeferredMapperConfig, Mapper[Any]]]c                    t                               |           rt                               |           S t          |           rt	          | d          S d S )NF)	configure)_DeferredMapperConfighas_clsconfig_for_clsr   r-   rx   s    rT   _declared_mapping_infor      sV     $$S)) $33C888	#		 C51111trW   boolc                    t                               |           rt          | dd           S t          |           rdS dS )a  return True if this class will be used as a superclass to set in
    'inherits'.

    This includes deferred mapper configs that aren't mapped yet, however does
    not include classes with _sa_decl_prepare_nocascade (e.g.
    ``AbstractConcreteBase``); these concrete-only classes are not set up as
    "inherits" until after mappers are configured using
    mapper._set_concrete_base()

    _sa_decl_prepare_nocascadeTstrictF)r}   r~   _get_immediate_cls_attrr   r   s    rT   _is_supercls_for_inheritsr      sZ     $$S)) *-d
 
 
 
 	
 
#		 turW   Optional[Type[Any]]c                    | t           u rd S | j                            dd          r!| j        D ]}t	          |          }||c S d S t          |           }|r|j        S | S )N__abstract__F)object__dict__get	__bases__"_resolve_for_abstract_or_classical_dive_for_cls_managerclass_)rx   base_sup
clsmanagers       rT   r   r      s    
f}}t |.. ] 	 	E4U;;C


  4*3//
 	$$JrW   FattrnamerI   r   Optional[Any]c                   |dk    sJ t          | t                    sdS || j        v rt          | |          S | j        dd         D ]A}t          |          du}||j        v r%|| u s|r
|| j        v rn	 |st          ||          c S BdS )a  return an attribute of the class that is either present directly
    on the class, e.g. not on a superclass, or is from a superclass but
    this superclass is a non-mapped mixin, that is, not a descendant of
    the declarative base and is also not classically mapped.

    This is used to detect attributes that indicate something about
    a mapped class independently from any mapped classes that it may
    inherit from.

    r   Nr   )
issubclassr   r   getattr__mro__r   r   )rx   r   r   base_is_classical_inheritss        rT   r   r      s      ~%%%%c6"" t3<sH%%%ABB  !6t!<!<D!Ht}$$CKK*0 &&&&. ' 4*****trW   Type[_O]Optional[ClassManager[_O]]c                N    | j         D ]}t          j        |          }|r|c S d S rQ   )r   r   opt_manager_of_class)rx   r   managers      rT   r   r      sG    
   .8.M/
 /
  	NNN	4rW   registryr>   dict_r=   Optional[_MapperConfig]c                >    t                               | ||d i           S rQ   )_MapperConfigsetup_mapping)r   rx   r   s      rT   _as_declarativer      s     
 &&xeT2FFFrW   tableOptional[FromClause]	mapper_kwr`   rK   c                P    t          | |||           t          d|          j        S )NzMappedClassProtocol[_O])_ImperativeMapperConfigr   rL   )r   rx   r   r   s       rT   _mapperr      s,     Hc5)<<<)3//::rW   zsqlalchemy.orm.decl_apiobjr   c                f    t           j        j        j        }t	          | |t           j        f          S rQ   )r1   	preloadedorm_decl_api_declared_attr_common
isinstanceclassproperty)r   r   s     rT   _is_declarative_propsr     s)     N7Mc143EFGGGrW   namec                    t          |           r.t          | dd          rt          j        d|d|d           dS dS )N
_cascadingFz1@declared_attr.cascading is not supported on the z attribute on class z5.  This attribute invokes for subclasses in any case.T)r   r   r1   warn)r   r   rx   s      rT   _check_declared_props_nocascader     s^     S!! 	3e,, 	II .2TT3338  
 turW   c                  v    e Zd ZU dZded<   ded<   ded<   ded	<   ed"d            Zd#dZd$dZd%d&dZ	d'd Z
d!S )(r   )rx   	classname
propertiesdeclared_attr_reg__weakref__ry   rx   rI   r   z_util.OrderedDict[str, Union[Sequence[NamedColumn[Any]], NamedColumn[Any], MapperProperty[Any]]]r   zDict[declared_attr[Any], Any]r   r   r>   cls_r   r   r=   r   r   r   r`   rO   r   c                >   t          j        |           }|r!|j        |u rt          j        d| d          |j                            dd          rd S t          |dd          pt          |d          }|rt          |||||          S t          |||||          S )	NClass z, already has been instrumented declarativelyr   Fr   Tr   _sa_decl_prepare)r   r   r   r   InvalidRequestErrorr   r   r   hasattrr}   _ClassScanMapperConfig)rx   r   r   r   r   r   r   	defer_maps           rT   r   z_MapperConfig.setup_mapping*  s     1#66 	w~--)LLLL   =^U33 	4+.t
 
 
 /T-.. 	  	($ui   *$ui  rW   c                   t          j        |t          d          | _        |j        | _        t          j                    | _        i | _        |	                    dd          s%t          j        | j        d|| |j                   d S t          j        | j                  }|r|j        st!          j        d| j        z            d S )Nr   non_primaryF)finalizer   declarative_scaninit_methodztClass %s has no primary mapper configured.  Configure a primary mapper first before setting up a non primary Mapper.)r1   assert_arg_typetyperx   rJ   r   OrderedDictr   r   r   r   register_classconstructorr   r   	is_mappedr   r   )rS   r   r   r   r   s        rT   __init__z_MapperConfig.__init__I  s     'dF;;*,,!#}}]E22 	*!!%$0      !5dh??G '"3 - $)   rW   r   valuerE   c                d    t          j        | j                  }|                    ||           |S rQ   )r   manager_of_classrx   install_member)rS   r   r   r   s       rT   set_cls_attributez_MapperConfig.set_cls_attributee  s/    !248<<x///rW   .Mapper[Any]c                    t                      rQ   )NotImplementedErrorrS   r   s     rT   mapz_MapperConfig.mapj  s    !###rW   rf   c                0    |                      |           d S rQ   )r   r   s     rT   _early_mappingz_MapperConfig._early_mappingm  s    rW   N)r   r>   r   r   r   r=   r   r   r   r`   rO   r   )r   r>   r   ry   r   r`   )r   rI   r   rE   rO   rE   ).r   r`   rO   r   r   r`   rO   rf   )rJ   rX   rY   	__slots__r[   classmethodr   r   r   r   r   rR   rW   rT   r   r     s         I NNNNNN    5444   [<   8   
$ $ $ $ $     rW   r   c                  B     e Zd ZdZd fd
Zej        fddZddZ xZ	S )r   )local_tableinheritsr   r>   r   r   r   r   r   r`   c                   t                                          |||           |                     d|          | _        t          j        5  |                    dd          s%t          j        | j	        | j
        |j                   |                     |           |                     |           d d d            d S # 1 swxY w Y   d S )NrM   r   F)superr   r   r   r   _CONFIGURE_MUTEXr   r   	add_classr   rx   _class_registry_setup_inheritancer   )rS   r   r   r   r   	__class__s        rT   r   z _ImperativeMapperConfig.__init__t  s	    	433311+uEE' 	+ 	+==66 %NDHh.F   ##I...	***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   A&B??CCrO   r   c                `    t           }|                     d || j        | j        fi |          S )NrL   )r(   r   rx   r   rS   r   
mapper_clss      rT   r   z_ImperativeMapperConfig.map  s>    
%%Jtx!1??Y??
 
 	
rW   rf   c                   | j         }|                    dd           }|~g }|j        D ]<}t          |          }|t	          |          r||vr|                    |           =|r5t          |          dk    rt          j        d|d|          |d         }nt          |t                    r|j        }|| _        d S )Nr   r   r    has multiple mapped bases: r   )rx   r   r   r   r   appendlenr   r   r   r(   r   r   )rS   r   rx   r   inherits_searchr   cs          rT   r   z*_ImperativeMapperConfig._setup_inheritance  s    h==T22 !O . .6u==9,Q// .A_4L4L#**1--- .''!++11331   +1-&)) 	'H rW   )r   r>   r   r   r   r   r   r`   r   r   )
rJ   rX   rY   r   r   r1   
EMPTY_DICTr   r   __classcell__r   s   @rT   r   r   q  sv        +I+ + + + + +* .2_ 
 
 
 
 
! ! ! ! ! ! ! !rW   r   c                  V    e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   dS )_CollectedAnnotationr7   raw_annotationzOptional[Type[Mapped[Any]]]mapped_containerzUnion[_AnnotationScanType, str]extracted_mapped_annotationr   is_dataclassr   
attr_valuerI   originating_modulery   originating_classNrw   rR   rW   rT   r   r     sc         ''''1111@@@@OOO      rW   r   c                      e Zd ZU dZdZded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded <   ded!<   d"ed#<   	 ded$<   	 da fd+Zdbd.Zdcd1Zh d2Z	 e
j        d3          Zddd6Zdbd7Zdbd8Zeded;            Zedfd>            Zedgd@            ZdhdKZdidNZdjdSZdbdTZdbdUZdkdldWZdmd[Zdnd\Zdnd]Zdnd^Zej        fdod`Z  xZ!S )pr   )r   clsdict_viewcollected_attributescollected_annotationsr   persist_selectabledeclared_columnscolumn_orderingcolumn_copies
table_args	tablenamemapper_argsmapper_args_fntable_fnr   singleallow_dataclass_fieldsdataclass_setup_argumentsis_dataclass_prior_to_mappingallow_unmapped_annotationsFr>   r   r=   r  zDict[str, _CollectedAnnotation]r  Dict[str, Any]r  r   r   r	  zutil.OrderedSet[Column[Any]]r
  zDict[Column[Any], int]r  zRDict[Union[MappedColumn[Any], Column[Any]], Union[MappedColumn[Any], Column[Any]]]r  zOptional[str]r  Mapping[str, Any]r  rb   r  z&Optional[Callable[[], Dict[str, Any]]]r  r   r   r   r  r  r  rd   r  r  r   r   r   r   r   r`   c                   |rt          j        |          nt           j        | _        t	                                          |||           || _        d | _        i | _        i | _	        t          j
                    | _        i | _        i | _        d| _        t          | j        dd           x| _        }t          | j        dd          pt%          | j                  | _        t)          j        |          x| _        }t/          |d          }|r|r|rt1          j        d          t%          |o|          | _        |                                  |                                  |                                  t<          j        5  tA          j!        | j"        | j        |j#                   | $                    |           | %                                 | &                                 | '                    |           | (                    |           | )                    |           d d d            d S # 1 swxY w Y   d S )NFre   __allow_unmapped____sa_dataclass_metadata_key__zSQLAlchemy mapped dataclasses can't consume mapping information from dataclass.Field() objects if the immediate class is not already a dataclass.)*r1   immutabledictr   r  r   r   r   r	  r  r  
OrderedSetr
  r  r  r  r   rx   r  r   r  dataclassesr  r  r   r   r   r  _setup_declared_events_scan_attributes_setup_dataclasses_transformsr   r   r   r   r   r   _setup_inheriting_mapper_extract_mappable_attributes_extract_declared_columns_setup_table_setup_inheriting_columnsr   )
rS   r   r   r   r   r   dcacldsdkr   s
            rT   r   z_ClassScanMapperConfig.__init__  s    */CDu%%%DO 	 	4333 "&$&!%'" $ 1 1!/6H/0
 0
 	
& +2H*E+
 +
 +2$011 	' 4?3K4
 4
 	
*S &d,KLL  	s 	 	)4   '+3;3&7&7###%%%**,,,' 	+ 	+!(*B   )))444--///**,,,e$$$**9555	***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   B"H33H7:H7rO   rf   c                     t           j        d          r&t          j        t          d          d	 fd            }t           j        d          r(t          j        t          d          d	 fd            }d S d S )
Nrk   after_configuredrO   rf   c                 V    t          d j                                                   d S N_DeclMappedClassProtocol[Any])r   rx   rk   rh   s   rT   r+  zG_ClassScanMapperConfig._setup_declared_events.<locals>.after_configuredI  s,    3TX ""$$$$$rW   ri   before_configuredc                 V    t          d j                                                   d S r-  )r   rx   ri   rh   s   rT   r/  zH_ClassScanMapperConfig._setup_declared_events.<locals>.before_configuredQ  s,    3TX ##%%%%%rW   rl   )r   rx   r0   listens_forr(   )rS   r+  r/  s   `  rT   r  z-_ClassScanMapperConfig._setup_declared_eventsF  s    "48-?@@ 	%v'9::% % % % % ;:%
 #48-@AA 	&v':;;& & & & & <;& & &	& 	&rW   rx   Callable[[str, Any], bool]c                   | j         rt          d          ndsdfd	}nWfd
t          j                  D             fdt          j                  D             t                      dfd}|S )zProduce a function that checks if a class has overridden an
        attribute, taking SQLAlchemy-enabled dataclass fields into account.

        r  NkeyrI   r   r   rO   r   c                *    t          | |          |uS rQ   )r   )r4  r   rx   s     rT   attribute_is_overriddenzR_ClassScanMapperConfig._cls_attr_override_checker.<locals>.attribute_is_overriddenh  s    sC--S88rW   c                H    i | ]}|j         v |j        |j                  S rR   r^   r   .0fsa_dataclass_metadata_keys     rT   
<dictcomp>zE_ClassScanMapperConfig._cls_attr_override_checker.<locals>.<dictcomp>l  s<     " " ",
:: 
#<=:::rW   c                H    i | ]}|j         v |j        |j                  S rR   r8  r9  s     rT   r=  zE_ClassScanMapperConfig._cls_attr_override_checker.<locals>.<dictcomp>q  s<     $ $ $,
:: 
#<=:::rW   c                L   t          |          r|j        }                    |           }t          |          r|j        }||u rdS |urdS                     |           }t          | |          }||u rdS |urt	          |t
                    rdS ||u rdS |urdS dS )NFT)r   fgetr   r   r   r   )r4  r   ret	all_fieldabsentall_datacls_fieldsrx   local_datacls_fieldss       rT   r6  zR_ClassScanMapperConfig._cls_attr_override_checker.<locals>.attribute_is_overriddeny  s    (-- #(C +..sF;;(-- #(C#:: 5&&4.223??	c3,,#:: 5
 f$$.* *$  4## 5f,,4 urW   )r4  rI   r   r   rO   r   )r  r   r1   dataclass_fieldslocal_dataclass_fieldsr   )rS   rx   r6  rC  rD  rE  r<  s    ` @@@@rT   _cls_attr_override_checkerz1_ClassScanMapperConfig._cls_attr_override_checkerW  s	    & 	-(?4) )%% )-%( 9	9 9 9 9 9 9 9" " " ".s33" " "
$ $ $ $4S99$ $ $  XXF& & & & & & & & &P '&rW   >   rM   r_   rc   ra   z^(?:_sa_|__)ry   2Callable[[], Iterable[Tuple[str, Any, Any, bool]]]c                  	
 t          j        |          t          |          | j        | j        fdt          j        t                    t                              D             	| j        rt          |d          
nd

s	d		fd}n+d t          j	        |          D             
d		
fd}|S )
zproduce a function to iterate the "attributes" of a class
        which we want to consider for mapping, adjusting for SQLAlchemy fields
        embedded in dataclass fields.

        c                F    g | ]}                     |          r|v |S rR   )match)r:  n_include_dunders_match_exclude_dunderss     rT   
<listcomp>z=_ClassScanMapperConfig._cls_attr_resolver.<locals>.<listcomp>  sL     
 
 
 *//22

 78;K6K6K	  7L6K6KrW   r  NrO   $Iterable[Tuple[str, Any, Any, bool]]c                 "     fdD             S )Nc              3  p   K   | ]0}|                     |                               |          d fV  1dS )FNr   )r:  r   cls_annotationscls_varss     rT   	<genexpr>z`_ClassScanMapperConfig._cls_attr_resolver.<locals>.local_attributes_for_class.<locals>.<genexpr>  sa           T**'++D11	     rW   rR   )rU  rV  namess   rT   local_attributes_for_classzM_ClassScanMapperConfig._cls_attr_resolver.<locals>.local_attributes_for_class  s5         !&   rW   c                    i | ]
}|j         |S rR   )r   )r:  fields     rT   r=  z=_ClassScanMapperConfig._cls_attr_resolver.<locals>.<dictcomp>  s)          &+
E     rW   c               3  &  K   D ]}                      | d           }|rB|j        v r9|j        t          |j                                       |j                  dfV  \|                      |                                |           dfV  d S )NTF)r   r^   r   _as_dc_declaredattr)r   r[  rU  rV  rF  fixed_sa_dataclass_metadata_keyrX  r<  s     rT   rY  zM_ClassScanMapperConfig._cls_attr_resolver.<locals>.local_attributes_for_class  s       " 	! 	!D,00t<<E !!:en!L!L#j*=!N,K+ +*..uz::DA A A A A #HLL$6$68K8K 9 9 ! ! ! ! !	! 	!rW   )rO   rQ  )
r1   get_annotationsvarsrN  rO  merge_lists_w_orderinglistr  r   rG  )rS   rx   rY  rN  rO  rU  rV  rF  r^  rX  r<  s      @@@@@@@@rT   _cls_attr_resolverz)_ClassScanMapperConfig._cls_attr_resolver  s[    .s33990!%!<
 
 
 
 
0X_ 5 5 
 
 
 & 	-7N48 8%% )-%( "	!           /3/J3/O/O      /H+! ! ! ! ! ! ! ! ! ! ! *)rW   c                	   | j         }t          d|          | j        }| j        }| j        }| j        }d }d x}}d }	d }
d|v }|                     | j                   }g }|j        D ]d}||uot          |          }| 	                    |          }|s||ur| 
                    ||||          }ni }|                    ||||f           e|D ]\  }}}}|                    |            |            D ]\  }}}}||v r|dk    r t          |||          }|s|r|rdfd}|}2|dk    rt          |||          }|
s|r|rj        }
W|dk    rt          |||          }|r
|	sdfd	}|}	{|d
k    rct          |||          }|sO|r|rKj        }t!          |t"          t$          t'          d           f          st)          j        d          ||urd}J |r>t-          |          r-|j        s&t1          j        d|j        d|d|d|d	           &||urt!          |t6          t8          f          rIt!          |t:                    rt)          j        d          t-          |          rT|J |j        rQ||v rt1          j        d|d|d           |                     ||          x||<   x||<   }tC          |||           n|r;tE          ||d           }t!          |tF                    s|$                                }ntE          ||          }t!          |tF                    r0tK          |          r!t!          |j&        t:                    s|j'        }|x||<   ||<   t!          |t6          t:          f          r|j(        |j)        |_(        | *                    ||+                                |d|           tY          |||          r|s||v s ||d           sJ | -                    |||           |r_||vs
||         |urQ |||          rJ t-          |          r|$                                }|||<   | *                    |||d|           w| *                    |||d |          }|d uo|j.        d u}||j/        n|}||s|r||nt9                      ||<   ||v r|||<   А|r|
sd }|| _0        |
| _1        || _2        |	| _3        d S )Nr.  rM   ra   rO   r  c                 ,    t           j                  S rQ   )dictra   cls_as_Decls   rT   _mapper_args_fnz@_ClassScanMapperConfig._scan_attributes.<locals>._mapper_args_fnA  s    '+K,G'H'H HrW   r_   rD   c                      j         S rQ   )rM   rg  s   rT   	_table_fnz:_ClassScanMapperConfig._scan_attributes.<locals>._table_fnW  s    '2'< <rW   rc   z3__table_args__ value must be a tuple, dict, or NoneTFz*Regular (i.e. not __special__) attribute '.z(' uses @declared_attr, but owning class z& is mapped - not applying to subclass zMapper properties (i.e. deferred,column_property(), relationship(), etc.) must be declared as @declared_attr callables on declarative mixin classes.  For dataclass field() objects, use a lambda:Attribute '' on class z> cannot be processed due to @declared_attr.cascading; skipping)rO   r  )rO   rD   )4rx   r   r  r  r  rN  rH  r   r   rc  _produce_column_copiesr   updater   r_   rc   r   tuplerf  r   r   ArgumentErrorr   _quietr1   r   rJ   r4   r*   r'   r   r   __get__setattrr   r   r@  r   original_property
descriptordocrZ   _collect_annotation_collect_return_annotationr,   _warn_for_decl_attributesr   r  r  r  r  r  )rS   rx   r  r  r  rN  r  r  inherited_table_argsr  r  fixed_tabler6  basesr   class_mappedrY  locally_collected_columnsr   r   
annotationis_dataclass_field
check_declri  rk  rA  collected_annotationr   generated_objrh  s                                @rT   r   z'_ClassScanMapperConfig._scan_attributes  sz   h:C@@(#8*0,00
)	!\1"&"A"A$("K"KK 	 	D  s?N/H/N/NL)-)@)@)F)F& /DOO,0,G,G.+	- -)) -/)LL .-	    o	9 o	9 
&% !''(ABBB ,+--c9 c9 "+++000%Ds& &
  . = ,=0:=I I I I I I .=N00%Ds& &
  ) B, B* B(3(AI,,%Ds& &
 & 1h 1= = = = = = (1H!111%Ds& &
  * 
<< 
<: 
<)4)CJ#- *UD$t**,E$ $ " '*&7%4'" '" !"  $37; 4
 %! `9,S11 #* 		
  $}}}dddDDD###	?   __ "#'=>> hH #C88 eH!5=   /s33 ]H  #> 8#|33 !%		 37$$%=!" !" !" !$C 5 5606 6s9K ##Cs33331 9
 '.c4&>&>
 (2#~'F'F !5*-((**C '.c4&8&8 !+3 ? ?5$:3$?$?5 )3$'$9>)" )"5 '*n !$06s9K
 'sV^,DEE2 #&)kCG00 ::<<      /z3EE H  +  $(< < <#:#:4#F#F != < < ! 66tT3GGGG' (9,,T0B#0M0M  76tSAAAAA,S11 )!hhjj14(.,,j$s    ,0+C+Cj$c, ,( -D8 N0AM  0; -77  "
 {;{9{  -8 *M!- -T22
 --58,T2Gc9R   		 	J$", rW   c           
          j         }|sd S d j        j        v rt          j        d j         d          d j        j        v rt          j        d j         d          t          j        t                    d fdt          j	         j                  }|J  fd fd j
                                        D             D             }r]                                D ]H\  }}t          j        d j         dd                    d |D                        d| ddd           Ii }i }|D ]A}t          |          dk    r|\  }	}
n!t          |          dk    r|\  }	}
}|||	<   nJ |
||	<   B|                                D ]\  }}t!           j        ||                                | j        |           d S )N__dataclass_fields__r   z is already a dataclass; ensure that base classes / decorator styles of establishing dataclasses are not being mixed. This can happen if a class that inherits from 'MappedAsDataclass', even indirectly, is been mapped with '@registry.mapped_as_dataclass'rM   zk already defines a '__table__'. ORM Annotated Dataclasses do not support a pre-existing '__table__' elementr4  rI   r  ry   rO   r   c                b    |j         ur$d|j        vr|                             |            dS )Nr  T)rx   r   r   )r4  r  rS   warn_for_non_dc_attrss     rT   _allow_dataclass_fieldzT_ClassScanMapperConfig._setup_dataclasses_transforms.<locals>._allow_dataclass_field:  s@     "11*2C2LLL%&78??DDD4rW   c                    g | ]@\  }}}t          j        |||j                            |t          j                            AS rR   )r"   !_get_arguments_for_make_dataclassr  r   r3   NO_ARG)r:  r4  annor   rS   s       rT   rP  zH_ClassScanMapperConfig._setup_dataclasses_transforms.<locals>.<listcomp>H  s`     %
 %
 %
 ,T+ ? )--c6=AA	 %
 %
 %
rW   c              3     K   | ]M\  }\  }}}}}}} 	||          r4|
j         vs t          
j         |         t                    B||r|n||fV  Nd S rQ   )r  r   r   )r:  r4  raw_annor   mapped_annois_dcr  r  r  r  rS   s            rT   rW  zG_ClassScanMapperConfig._setup_dataclasses_transforms.<locals>.<genexpr>O  s       0 0C $&%))#/@AA0" t888 &1#68J  9 #.<KKH$  9888#0 0rW   zWhen transforming z to a dataclass, attribute(s) , c              3  4   K   | ]}t          |          V  d S rQ   rp   )r:  r4  s     rT   rW  zG_ClassScanMapperConfig._setup_dataclasses_transforms.<locals>.<genexpr>w  s(       C Csc C C C C C CrW   z originates from superclass a  , which is not a dataclass.  This usage is deprecated and will raise an error in SQLAlchemy 2.1.  When declaring SQLAlchemy Declarative Dataclasses, ensure that all mixin classes and other superclasses which include attributes are also a subclass of MappedAsDataclass.z2.0dcmxcoder/      F)r4  rI   r  ry   rO   r   )r  rx   r   r   r   collectionsdefaultdictrb  r   r   r  itemsr1   warn_deprecatedjoinr   ru  _apply_dataclasses_to_any_class)rS   r  r   
field_listr  non_dc_attrsr   defaultsitemr   tpspeckvr  r  s   `             @@rT   r!  z4_ClassScanMapperConfig._setup_dataclasses_transforms  s   $($B!( 	F "TX%666)2 2 2 2   $(+++)& & & &   !, 7 = =		 		 		 		 		 		 		 "248<<"""%
 %
 %
 %
0 0 0 0 0 /55770 0 0%
 %
 %

N ! 	 ',,..  !$	6 	6 	6yy C Cl C C CCC	6 	6 )		6 	6 	6       	# 	#D4yyA~~bbTa!%b$!% "KNN$$ 	$ 	$DAqDHa####,,%tx	
 	
 	
 	
 	
rW   klass!Mapping[str, _AnnotationScanType]c                    t          j        |          }i }|                                D ]Q\  }}t          |||          r6t	          |||j        |t          d           ddd          }|r
|\  }}|||<   L|||<   R|S )NFrequiredr  expect_mapped)r1   r_  r  r,   r+   rX   r   )	rx   r  rU  new_annor   r  	extractedinner_s	            rT   (_update_annotations_for_non_mapped_classz?_ClassScanMapperConfig._update_annotations_for_non_mapped_class  s     .u55 / 5 5 7 7 	, 	,D*$Z>> ,3$JJ"',"'	 	 		  +(HE1%*HTN!+rW   rn   use_annotationsc                   |                      |           |d         }|t          j        u rt          j        }|r't          |dd           }t          d|          |_        nd }	  ||fi d |                                D              n<# t          t          f$ r(}t          j        d|j        d|dd	          |d }~ww xY w	 |r||`d S ||_        d S d S # |r||`n||_        w xY w)
Nrv   r[   r  c                B    i | ]\  }}|t           j        u|d k    ||S )rv   )r3   r  )r:  r  r  s      rT   r=  zJ_ClassScanMapperConfig._apply_dataclasses_to_any_class.<locals>.<dictcomp>  s@       1--!7K2K2K q2K2K2KrW   zAPython dataclasses error encountered when creating dataclass for z: zN. Please refer to Python dataclasses documentation for additional information.dcter  )_assert_dc_argumentsr3   r  r  	dataclassr   r   r[   r  	TypeError
ValueErrorr   r   rJ   )rx   r  r  r  rv   restoredexs          rT   r  z6_ClassScanMapperConfig._apply_dataclasses_to_any_class  s    	  !:;;;67KL..!,!6  	
 u&7>>H$()9?$K$KE!!H	5   9 ? ? A A      :& 	 	 	)<!&< << < <    	*  5#---,4E)))	5 5 5#--,4E)4444s*   $%B
 	C 
C#B>>CC C*	argumentsc                    h d}t          |                              |          }|rDd                    d t          |          D                       }t	          j        d| d          d S )N>   rq   ro   rp   rr   ru   rt   rs   rv   r  c              3     K   | ]}|V  d S rQ   rR   )r:  args     rT   rW  z>_ClassScanMapperConfig._assert_dc_arguments.<locals>.<genexpr>  s$      JJ3sJJJJJJJrW   zDataclass argument(s) z are not accepted)set
differencer  sortedr   rr  )rx   r  alloweddisallowed_argsmsgs        rT   r  z+_ClassScanMapperConfig._assert_dc_arguments  s    	
 	
 	
 i..33G<< 	))JJ&2I2IJJJJJC#????  	 	rW   r   rI   r   r7   r  r  Optional[bool]r  r   Optional[_CollectedAnnotation]c           
        || j         v r| j         |         S |d S | j        }| j        }|:t          |t          j                  }| o| o|d u pt          |t                    }nd}d}t          || j        |j	        |t          |          d||o|           }	|	d S |	\  }
}|yt          |
          sjt          |
          D ]Z}t          |dd          rt          | j        ||j	        d          }t          |t                    r|                                }[t#          |||
|||j	        |          x| j         |<   }|S )NFr  T)check_genericcheck_for_plain_string)include_generic)r  r  r  r   r  Fieldr%   r+   rx   rX   r   r:   r8   r9   r.   r$   found_in_pep593_annotatedr   )rS   r   r   r  r  r  r  allow_unmappedr  r  r   r   elemcas                 rT   ry  z*_ClassScanMapperConfig._collect_annotation  s    4----d33!498 !+J8I!J!J&& && $& @!*.>?? M "'"+H(1'<,<	
 	
 	
	 48A5#%5j1L&M&M !<== B BT    3)4(,	  D d$;<< B!%!?!?!A!AJ0D'(1
 1
 	
"4(2 	rW   r4  r   c                t    t          |t          j                  rt          j        d| d| d           d S d S )Nrm  rn  z appears to be a non-schema SQLAlchemy expression object; this won't be part of the declarative mapping. To map arbitrary expressions, use ``column_property()`` or a similar function such as ``deferred()``, ``query_expression()`` etc. )r   r2   ColumnElementr1   r   )rS   rx   r4  r   s       rT   r{  z0_ClassScanMapperConfig._warn_for_decl_attributesB  sc     a122 	I/c / /c / / /    	 	rW   attributes_for_classr6  r}  0Dict[str, Union[Column[Any], MappedColumn[Any]]]c                   | j         }| j        }i }| j        } |            D ]Q\  }	}
}}|sk|
it          |||          rX ||	|
          r*|                     |	||d|
          }||j        n|
}
|
t                      }
|
||	<   t          ||	|
           ut          |
t          t          f          r ||	|
          r|                     |	||d|
          }||j        n|
}
|	|vrd|v r t          |
dd           p|	|d         j        v sg|
j        r1|
j        D ])}|j         |j        j        t          j        d          *|
                                x||
<   }|||	<   t          ||	|           S|S )NTrM   r   zColumns with foreign keys to non-table-bound columns must be declared as @declared_attr callables on declarative mixin classes.  For dataclass field() objects, use a lambda:.)rx   r  r  r,   ry  r  r*   ru  r   r4   r   r   foreign_keys_table_columnr   r   r   _copy)rS   r  r6  r}  r  rx   r   locally_collected_attributesr  r   r   r  r  r  fkcopy_s                   rT   ro  z-_ClassScanMapperConfig._produce_column_copiesO  s/    h!')$* 4H3G3I3I G	. G	./D#z<F.K)*c;LMM  
 +*455  '+'?'?*&7s( ($
 ,7 )33 
 ;&..C58,T2T3''''C&,!788 ).**455 
 '+'?'?*&7s( ($
 ,7 )33  u$$5(( fd33;t[)+, , ' ""%"2 " "B " 0 <$&$4$:$B&)&=%F'" '" !" 25<M#&9>06Cu---++rW   c                \   | j         }| j        }| j        }| j        }t	          |dd          }| j        }|p| j        }t          | j                  }t          |          D ]G}	|	|v r||	         t                    r4j        rt          j        d| j         z             t          ||	          nNt          t                     r9j        |ur0j        |	k    r%t'          j                  t)          ||	           t          t*                    rNt-                    dk    r;t          d         t.          t0          f          rt          j        d|	z             |rt          t2          j                  r"t          t.          t6          f          sA|                    |	           |                     ||	           |st)          ||	           |	dv rt=          j        d	|	 d
          t          t.                    r+tA          |	| j!        "                                         ngt          tF                    r|| j$        "                    |	d          \  }
}}}}}}||
|rO	 %                    | | j&        |||	||
||	  	         n/# tN          $ r}tQ          j)        d|
 d          |d }~ww xY w|sJ t          t6                    rj*        rv|stt          tV                    rg d}ng d}fd|D             }t=          j,        d|	 d| dd-                    t]          d |D                                  d          t          tV          t^          f          s(|                    |	           t)          ||	           B||	<   Id S )Nr   Tr   zUse of @declared_attr.cascading only applies to Declarative 'mixin' and 'abstract' classes.  Currently, this flag is ignored on mapped class %sr   r   zIgnoring declarative-like tuple value of attribute '%s': possibly a copy-and-paste error with a comma accidentally placed at the end of the line?)r^   zAttribute name 'z-' is reserved when using the Declarative API.)NNNFNNNz7Could not resolve all types within mapped annotation: "zU".  Ensure all types are written correctly and are imported within the module in use.)ro   default_factoryrp   default)ro   r  rp   c                \    h | ](}t          j        d |           t          j        u&|)S )dataclasses_)r   _attribute_optionsr3   r  )r:  ar   s     rT   	<setcomp>zF_ClassScanMapperConfig._extract_mappable_attributes.<locals>.<setcomp>H  sX           !& % 8:L:L:L    $*= 1  1  1  1  1rW   rm  rn  z# includes dataclasses argument(s): r  c              3  4   K   | ]}t          |          V  d S rQ   r  )r:  r  s     rT   rW  zF_ClassScanMapperConfig._extract_mappable_attributes.<locals>.<genexpr>T  s(      /F/FAQ/F/F/F/F/F/FrW   zF but class does not specify SQLAlchemy native dataclass configuration.)0rx   r  r   rN  r   r  r  r   r  rb  r   r   r1   r   r   r   r   r   r4  r!   ru  rq  r   r4   r%   r  r  r#   popr{  r   r   _undefer_column_namer  r   r$   r  r   r   	NameErrororm_excMappedAnnotationError_has_dataclass_argumentsr'   rr  r  r  r&   )rS   rx   r  	our_stuffrN  late_mappedr  expect_annotations_wo_mappedlook_for_dataclass_thingsr  r  r   r   r  r  r  r  neargnamesargsr   s                       @rT   r#  z3_ClassScanMapperConfig._extract_mappable_attributes  s   h#8O	0--d
 
 
 &*%D"&L$*L 	% %))G$H$H!*++ p	! p	!A$$$(+E$U++ ' # I  $x(    Q 5"455'L++INN (	22Q&&& 5%((P!JJ!OOuQx&2B)CDD $ 	BDEF  
 * E!z{(0 0 E!
 0C'DEE !
 %((+++..sAu===" +CE*** m##-'q ' ' '   E6** k!$t)--eU;;    e%<== 3< 266F "(3$"*) )4%-
 6 .&!22 $ $ # 2 ! 0 * ; ,
 
 
 
  ) & & &")"?!F0:!F !F !F# #
 $&&&  <;;;e%899 1!6 9 &e^<< K( ( (HH (K'J'JH       %-      "/I! I I I I#yy/F/F/F/F/F)F)FGGI I I   &enl-KLL ! -00333  Q...  IaLLap	! p	!s   ="J  
K*KKc                ~   | j         }| j        }| j        }t          j        t
                    }t          |                                          D ]\  }}t          |t                    r|j
        }|r|||<   n||= |j        D ]f\  }}	t          |t                    s ||j                                     |           |                    |           |	||<   |||j        k    r|||<   gt          |t                     rL|j        J ||j                                     |           |                    |           ||j        k    r||= |                                D ][\  }
}t#          |          dk    rCt%          j        d| j        d|
dd                    t-          |                    d           \d S )Nr   z	On class z, Column object z7 named directly multiple times, only one will be used: r  z$. Consider using orm.synonym instead)r   r
  r  r  r  r  rb  r  r   r&   mapper_property_to_assigncolumns_to_assignr    r   addr4  r4   r   r1   r   r   r  r  )rS   r  r
  r  name_to_prop_keyr4  r   mp_to_assigncol
sort_orderr   keyss               rT   r$  z0_ClassScanMapperConfig._extract_declared_columnsn  s   O	  0.&23779??,,-- '	' '	'FC!\** &' : '%1IcNN "#'(': - -OC%a):;; <(266s;;;$((--- ,6OC( $+sw),	#!-" Av&& ' v))) (,,S111 $$Q''' !%<<!#*0022 	 	JD$4yy1}}		
 ~~~tttdiit.E.E.E.E	H  	 	rW   Nc           	     ,   | j         }t          d|          }| j        }| j        }| j        }| j        }| j        t          j        |          }| j	        ?d|vr:|7t          |d          r8t          t          t                   t          j        |j                            }	nt          }	|d}
i }|r]t!          |t"                    r|}nEt!          |t$                    r0t!          |d         t"                    r|dd         |d         }}
n|}
|                    d          }|r||d<   |                    d	          }|rd
|d<   t)          |fd          }|                     d |	||                     |          g||
R i |          }nv|7| j	        r)|                     d| 	                                          }n|j        }|r;|D ]8}|j                            |          st5          j        d|j        z            9|| _        d S )NMappedClassProtocol[Any]rM   __table_cls__rR   r   __autoload_with__autoload_with__autoload__Tautoloadc                0                         | d          S )Nr   rT  )r   r  s    rT   <lambda>z5_ClassScanMapperConfig._setup_table.<locals>.<lambda>  s    /"5"5a";"; rW   r4  z8Can't add additional column %r when specifying __table__)rx   r   r  r  r  r
  r  r   r   r  r   r   r5   r1   unbound_method_to_callabler  r   rf  rq  r   r  r   _metadata_for_clsrM   r   contains_columnr   rr  r4  r   )rS   r   rx   rh  r  r  r  r
  r   	table_clsr  table_kwr  r  sorted_columnsr   r  s                   @rT   r%  z#_ClassScanMapperConfig._setup_table  s   h5s;;N	_
(0.-c22 M!<//sO,, " K3C4EFF 		
 "	$(*+- .!*d33 .#-#J66 .%jnd;; .-7"-=z"~(DD#-D , 0 01D E E  >0=H_-'++N;; 0+/HZ(!'$;;;;" " " ..I!..w77 ( 	  
 # 	 	 }= 2 22#T]]__ EE (1E )  A 722155 !/356U;   !rW   r   ClassManager[Any]rC   c                N    t          | j        dd           }||S |j        j        S )Nr^   )r   rx   r   r^   )rS   r   metas      rT   r  z(_ClassScanMapperConfig._metadata_for_cls  s,    #*48Z#F#FK#,,rW   c                   | j         }|                    dd           }|~g }|j        D ]<}t          |          }|t	          |          r||vr|                    |           =|r5t          |          dk    rt          j        d|d|          |d         }nt          |t                    r|j        }|| _        | j        }d|vr| j        d| _        d S d S d S )Nr   r   r   r   r   rM   T)rx   r   r   r   r   r   r   r   r   r   r(   r   r   r  r  r  )rS   r   rx   r   r   r   r   r  s           rT   r"  z/_ClassScanMapperConfig._setup_inheriting_mapper  s!   h==T22 !O . .6u==9,Q// .A_4L4L#**1--- .''!++11331   +1-&)) 	'H (l**t~/EDKKK +*/E/ErW   c           
     <   | j         }| j        }| j        }| j        }|.| j        't          |d          st          j        d|z            | j        rCt          | j                  }|J |j         }|j	        }||rt          j
        d          |r:t          |t                    s%t          j
        d| j         d| j         d          |D ]}	|J |	j        |j        v rH|j        |	j                 |	u r)t          j
        d|	 d|j         d	|j        |	j                  d
          |	j        rt          j
        d          t"          rt          |t                    sJ |                    |	           |||ur|                    |	           d S d S d S )N__no_table__zwClass %r does not have a __table__ or __tablename__ specified and does not inherit from an existing table-mapped class.z?Can't place __table_args__ on an inherited class with no table.z9Can't declare columns on single-table-inherited subclass z; superclass z is not mapped to a TablezColumn 'rn  z! conflicts with existing column 'zs'.  If using Declarative, consider using the use_existing_column parameter of mapped_column() to resolve conflicts.zDCan't place primary key columns on an inherited class with no table.)r   rx   r  r
  r   r   r   r   r   r	  rr  r   r5   r   r   rJ   primary_keyr   append_column_refresh_for_new_column)
rS   r   r   rx   r  r
  inherited_mapper_or_configinherited_tableinherited_persist_selectabler  s
             rT   r&  z0_ClassScanMapperConfig._setup_inheriting_columns  s]    h_
0 M%+C@@ & )&(+,  
 ] 6	)?)N)N&-9998DO*= ) }  +)   $ J,N,N +3$(H3 3;?=3 3 3   ,  C*666x?#444*,SX6#==$!/4s 4 4s| 4 4 / 1#( ;4 4 4    !/3  
 % B)/5AAAAA#11#6664@8OO4LL  i6	 6	 }" rW   c                     j         } j        r                                 }ni }|r|                    |           d|v r*t          |          }|                    |d                    dD ],}||v r&||         } j                            ||          ||<   -d|v r) fdt          j        |d                   D             |d<   d|v rJ|d         }t          |t                    r|j
        }| j        urt          j        d|d         z             j        r
 j        |d<    j        r|                    dd          st           j        d          j        }d	|vrVfd
|j        D                                 j        pd          x|d	<   }|                    d  j        D                        t+          |                                          D ]Y\  }}	t          |	t.          j                  s |j        v r0j        |         }
t          |
t4                    r|	g|
j        z   ||<   Z|                                }||d<   | _        d S )Nr   )version_id_colpolymorphic_onr  c                F    g | ]}j                             ||          S rR   )r  r   )r:  r  rS   s     rT   rP  zD_ClassScanMapperConfig._prepare_mapper_arguments.<locals>.<listcomp>~  s<     * * * "&&q!,,* * *rW   r   z:mapper inherits argument given for non-inheriting class %sconcreteFexclude_propertiesc                0    h | ]}|j         v|j        S rR   )_columntopropertyr4  )r:  r   inherited_mappers     rT   r  zC_ClassScanMapperConfig._prepare_mapper_arguments.<locals>.<setcomp>  s7     J J J 0 BBB EBBBrW   rR   c                    g | ]	}|j         
S rR   r  )r:  r   s     rT   rP  zD_ClassScanMapperConfig._prepare_mapper_arguments.<locals>.<listcomp>  s    :::qQU:::rW   )r   r  rp  rf  r  r   r1   to_listr   r(   r   r   r   r   r-   r   r   unionr  difference_updater
  rb  r  r2   r  _propsr)   columnscopyr  )rS   r   r   r  r  r  inherits_argr  r  r  presult_mapper_argsr!  s   `           @rT   _prepare_mapper_argumentsz0_ClassScanMapperConfig._prepare_mapper_argumentsg  s   _
 	--//KKK 	*y)));&&j))Jk,7888 6 	> 	>AKN!%!3!7!71!=!=AK''* * * *k-&@AA* * *K&
 $$&z2L,// 3+24=00-"-j"9;  
 = 	4&*mK
#= "	:U!C!C "	:  ,DM5AA.:O $;66J J J J,.J J J %(;ArBB	C014F
 #44::D$9:::   z//1122 : :3!#z'?@@ (///(/2A!!^44 : *-	(9
1(--//+5<(-rW   r   c                   |                      |           t          | j        d          r-t          dt	          j        | j        j                            }nt          }|                     d || j        | j	        fi | j
                  S )N__mapper_cls__zType[Mapper[Any]]rL   )r,  r   rx   r   r1   r  r.  r(   r   r   r  r   s      rT   r   z_ClassScanMapperConfig.map  s    &&y11148-.. 	 #/H+  JJ  J%%Jtx!1FFT5EFF
 
 	
rW   )
r   r>   r   r   r   r=   r   r   r   r`   rl   )rx   r   rO   r2  )rx   ry   rO   rI  )r  r   rO   r  )r  rn   r  r   r  r  rO   rf   )r  rn   rO   rf   )r   rI   r   r7   r  ry   r  r  r  r   rO   r  )rx   ry   r4  rI   r   r   rO   rf   )
r  rI  r6  r2  r}  r   r  ry   rO   r  rQ   )r   r   rO   rf   )r   r  rO   rC   r   r   )"rJ   rX   rY   r   is_deferredr[   r   r  rH  rN  recompilerO  rc  r   r!  r   r  r  r  ry  r{  ro  r#  r$  r%  r  r"  r&  r,  r1   r   r   r   r   s   @rT   r   r     sX        I. K::::((((%%%%,,,,2222++++    """"((((::::!!!!LLL''''$$$$<<<< !   K+ K+ K+ K+ K+ K+Z& & & &"J' J' J' J'X   (RZ88B* B* B* B*Hl! l! l! l!\	v
 v
 v
 v
p    [2 25 25 25 [25h    [$H H H HT   X, X, X, X,tC! C! C! C!J9 9 9 9vL! L! L! L! L!\- - - -   BF F F FPO. O. O. O.b .2_ 
 
 
 
 
 
 
 
 
rW   r   field_metadatar  r<  c                    t           j        j        }| |         }t          |          r*t	          ||j                  s|                    |          S |S rQ   )r1   r   r   callabler   r@   )r2  r<  decl_apir   s       rT   r]  r]    sT     ~*H
2
3C}} ZX-CDD %%c***
rW   c                  $    e Zd ZU ded<   dZ ej                    Zded<   dd
Ze	dd            Z
e
j        dd            Z
edd            Zed d            Zed!d            Zed"d            Ze	 d#d$d            Zej        fd% fdZ xZS )&r}   weakref.ref[Type[Any]]_clsTz?util.OrderedDict[weakref.ref[Type[Any]], _DeferredMapperConfig]_configsr   r`   rO   rf   c                    d S rQ   rR   r   s     rT   r   z$_DeferredMapperConfig._early_mapping  s    rW   ry   c                *    |                                  S rQ   )r8  rh   s    rT   rx   z_DeferredMapperConfig.cls  s    yy{{rW   r   c                b    t          j        || j                  | _        | | j        | j        <   d S rQ   )weakrefref_remove_config_clsr8  r9  )rS   r   s     rT   rx   z_DeferredMapperConfig.cls  s,    K(?@@	#'di   rW   r>  c                <    | j                             |d            d S rQ   )r9  r  )rx   r>  s     rT   r?  z(_DeferredMapperConfig._remove_config_cls  s     d#####rW   r   c                b    t          |t                    ot          j        |          | j        v S rQ   )r   r   r=  r>  r9  rx   r   s     rT   r~   z_DeferredMapperConfig.has_cls  s*     &$''OGK,?,?3<,OOrW   r   c                    t          |d          r|                                 t          j        |dt          j        |           d          )N_sa_raise_deferred_configr   zG has a deferred mapping on it.  It is not yet usable as a mapped class.)r  )r   rD  r  UnmappedClassError_safe_cls_namerB  s     rT   raise_unmapped_for_clsz,_DeferredMapperConfig.raise_unmapped_for_cls  si    6677 	/,,...(J/77 J J J
 
 
 	
rW   c                @    | j         t          j        |                   S rQ   )r9  r=  r>  rB  s     rT   r   z$_DeferredMapperConfig.config_for_cls  s    |GK//00rW   base_clssortList[_DeferredMapperConfig]c                &   fdd | j                                         D             D             }|s|S d |D             g }D ])|                    fdj        D                        *t	          t          j        ||                    S )Nc                >    g | ]\  }}|t          |          |S rQ   )r   )r:  mr   rI  s      rT   rP  z:_DeferredMapperConfig.classes_for_base.<locals>.<listcomp>  s<     
 
 
4JtX$>$> rW   c                     g | ]}||j         fS rR   r   r:  rN  s     rT   rP  z:_DeferredMapperConfig.classes_for_base.<locals>.<listcomp>  s    FFF1QJFFFrW   c                    i | ]
}|j         |S rR   r   rP  s     rT   r=  z:_DeferredMapperConfig.classes_for_base.<locals>.<dictcomp>  s    ;;;Qq;;;rW   c              3  @   K   | ]}|v |                  fV  d S rQ   rR   )r:  rI  all_m_by_clsm_clss     rT   rW  z9_DeferredMapperConfig.classes_for_base.<locals>.<genexpr>  sI        |++ h'e)<=++++ rW   )r9  valuesextendr   rb  r6   rJ  )rx   rI  rJ  classes_for_basetuplesrS  rT  s    `   @@rT   rW  z&_DeferredMapperConfig.classes_for_base	  s    
 
 
 
FF0C0C0E0EFFF
 
 
  	$##;;*:;;;LN! 	 	EMM      %      
 K$V-=>>???rW   r   c                    | j                             | j        d            t                                          |          S rQ   )r9  r  r8  r   r   )rS   r   r   s     rT   r   z_DeferredMapperConfig.map!  s3    $)T***ww{{9%%%rW   r   )rO   ry   )r   ry   rO   rf   )r>  r7  rO   rf   )r   ry   rO   r   )r   ry   rO   r   )r   ry   rO   r}   )T)rI  ry   rJ  r   rO   rK  r   )rJ   rX   rY   r[   r/  r1   r   r9  r   propertyrx   setterr   r?  r~   rG  r   rW  r   r   r   r   s   @rT   r}   r}     s            K 	            X 	Z( ( ( Z( $ $ $ [$ P P P [P 

 

 

 [

 1 1 1 [1 /3@ @ @ @ [@. .2_ & & & & & & & & & & &rW   r}   r4  r   MapperProperty[Any]rf   c                   d| j         v rt          d|           }d
d}t          |t                    rMt	          ||            ||                              |d           |j                            ||           d	S t          |t                    r|j	        }|j
        D ]R\  }}t	          ||            ||                              |d           |s|j                            ||           S|r|j                            ||           d	S d	S t          |t                    r|j                            ||           d	S t          |t                    r<|j        |k    r1t          |j                  }|j                            ||           d	S t                              | ||           |j                                         d	S t                              | ||           d	S )zadd an attribute to an existing declarative class.

    This runs through the logic to determine MapperProperty,
    adds it to the Mapper, adds a column to the mapped Table, etc.

    rL   r  mcrO   r5   c                ~    t          | j        t                    r| j        S t          j        d| j        d          )Nz+Cannot add a new attribute to mapped class z) because it's not mapped against a table.)r   rM   r5   r   r   rJ   )r^  s    rT   _table_or_raisez'_add_attribute.<locals>._table_or_raise3  sK    ",.. $|#);bk ; ; ;  rW   T)replace_existingN)r^  r  rO   r5   )r   r   r   r4   r  r  rL   add_propertyr&   r  r  r'   r   r4  r!   r   __setattr___expire_memoizations)rx   r4  r   
mapped_clsr`  mpr  r  s           rT   _add_attributerg  &  s;    s|##4c::
	 	 	 	 eV$$ 	9 e,,,OJ''55 6    !..sE:::::|,, 	90B1 A AQ$S#...
++99$ :     A)66sC@@@ <%223;;;;;< <~.. 		9!..sE:::::122 	9uyC7G7G $EI..E!..sE:::::S#u---!6688888c5)))))rW   c                   d| j         v r|| j         v rt          d|           j        j        s| j         |         }t	          |t
          t          t          t          f          rt          d          t                              | |           t          d|           j                                         d S t                              | |           d S )NrL   r  z<Can't un-map individual mapped attributes on a mapped class.)r   r   rL   _dispose_calledr   r4   r&   r'   r   r   r   __delattr__rd  )rx   r4  r   s      rT   _del_attributerk  Z  s    $$3<&
 

_  
 S!FL.:LM
 
 
	0 &N   S#&&&*C --/////c"""""rW   rS   kwargsc                    t          |           }|D ]B}t          ||          st          |d|j                  t	          | |||                    CdS )a=  A simple constructor that allows initialization from kwargs.

    Sets attributes on the constructed instance using the names and
    values in ``kwargs``.

    Only keys that are present as
    attributes of the instance's class are allowed. These could be,
    for example, any mapped columns or relationships.
    z$ is an invalid keyword argument for N)r   r   r  rJ   ru  )rS   rl  r   r  s       rT   _declarative_constructorrn  r  sw     ::D $ $tQ 	>?aaO   	a####$ $rW   r   columnColumn[Any]c                B    |j         | |_         |j        	| |_        d S d S rQ   )r4  r   )r4  ro  s     rT   r  r    s,    z
{ rW   )rx   ry   rO   rz   )rx   ry   rO   r   )rx   ry   rO   r   )F)rx   ry   r   rI   r   r   rO   r   )rx   r   rO   r   )r   r>   rx   ry   r   r=   rO   r   )
r   r>   rx   r   r   r   r   r`   rO   rK   )r   r   rO   r   )r   r   r   rI   rx   r   rO   r   )r2  r  r<  rI   rO   r   )rx   ry   r4  rI   r   r\  rO   rf   )rx   ry   r4  rI   rO   rf   )rS   r   rl  r   rO   rf   )r4  rI   ro  rp  rO   rf   )rrZ   
__future__r   r  r  r0  typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r=   r   r   r   r  r   r   _typingr   r   r   r   r   r   r   descriptor_propsr    r!   
interfacesr"   r#   r$   r%   r&   r'   mapperr(   r   r)   r*   r1   r+   r,   r-   r.   r0   sqlr2   sql.baser3   
sql.schemar4   r5   r6   util.typingr7   r8   r9   r:   r;   r<   r=   r>   r?   r5  r@   rA   sql.elementsrB   rC   sql.selectablerD   rE   rI   r`   _TableArgsTyperH   r]   rn   r   r   r   r   r   r   r   preload_moduler   r   r   r   r   r   r]  r}   rg  rk  rn  rJ   r  rR   rW   rT   <module>r     s   / . " " " " " "         				                                                                                                                                            + + + + + + - - - - - - * * * * * * " " " " " "             / / / / / / - - - - - - ) ) ) ) ) ) + + + + + + / / / / / / ( ( ( ( ( ( $ $ $ $ $ $ & & & & & &       & & & & & & $ $ $ $ $ $ ) ) ) ) ) ) ' ' ' ' ' '       ) ) ) ) ) )                                                 - - - - - - " " " " " " $ $ $ $ $ $ $ $ $ $ $ $ " " " " " " # # # # # # ,######&&&&&&''''''------******%%%%%%++++++WTS!uS#XS#X67- - - - -(2, - - -, , , , ,226 , , ,@ @ @ @ @) @ @ @
 
 
 
   ,   . 38$ $ $ $ $N   G G G G; ; ; ; .//H H H 0/H   W W W W W W W Wt;! ;! ;! ;! ;!m ;! ;! ;!|! ! ! ! !: ! ! !N
 N
 N
 N
 N
] N
 N
 N
b0 .//   0/J& J& J& J& J&2 J& J& J&Z1* 1* 1* 1*h# # # #0$ $ $ $& %/  !     rW   