
    hM                   t   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\	 	 	 	 dhdNZ]didOZ^djdPZ_	 dk	 	 	 	 	 	 	 dldQZ`dmdRZa	 	 	 	 	 	 	 	 dndSZb	 	 	 	 	 	 	 	 	 	 dodTZc e6j                  dU      dpdV       Ze	 	 	 	 	 	 	 	 dqdWZf G dX dY      Zg G dZ d[eg      Zh G d\ d]e      Zi G d^ d_eg      Zj e6j                  dU      	 	 	 	 	 	 drd`       Zk G da dbej      Zl	 	 	 	 	 	 	 	 dsdcZmdtddZndudeZodfeo_p        dvdgZqy)wz(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                  8    e Zd ZU dZded<   ded<   ded<   d
dZy	)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__c                     y N )selfkws     AD:\EasyAligner\venv\Lib\site-packages\sqlalchemy/orm/decl_base.py__call__zMappedClassProtocol.__call__e           N)rR   r   returnr   )rJ   
__module____qualname____doc____annotations__rT   rP   rV   rS   rH   rH   Z   s     M,rV   rH   c                  T    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y)_DeclMappedClassProtocolz:Internal more detailed version of ``MappedClassProtocol``.rC   metadatarI   __tablename___MapperKwArgs__mapper_args__Optional[_TableArgsType]__table_args__Optional[_DataclassArguments]_sa_apply_dc_transformsc                     y rO   rP   rQ   s    rS   __declare_first__z*_DeclMappedClassProtocol.__declare_first__q   rU   rV   c                     y rO   rP   rg   s    rS   __declare_last__z)_DeclMappedClassProtocol.__declare_last__s   s    rV   NrW   None)rJ   rX   rY   rZ   r[   rh   rj   rP   rV   rS   r]   r]   h   s)    @"",,::,+rV   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
<   y)_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[   rP   rV   rS   rn   rn   v   s2    

$$##  ??rV   rn   c                    t         j                  |       rt         j                  |       S t        |       rt	        | d      S y )NF)	configure)_DeferredMapperConfighas_clsconfig_for_clsr   r-   clss    rS   _declared_mapping_infor      s;     $$S)$33C88	#	C511rV   c                d    t         j                  |       rt        | dd       S t        |       ryy)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)rz   r{   _get_immediate_cls_attrr   r}   s    rS   _is_supercls_for_inheritsr      s<     $$S)*-d
 
 	
 
#	rV   c                    | t         u ry | j                  j                  dd      r#| j                  D ]  }t	        |      }||c S  y t        |       }|r|j                  S | S )N__abstract__F)object__dict__get	__bases__"_resolve_for_abstract_or_classical_dive_for_cls_managerclass_)r~   base_sup
clsmanagers       rS   r   r      sg    
f} ||.]]E4U;C
 #
 *3/
$$$JrV   c                   |dk7  sJ t        | t              sy|| j                  v rt        | |      S | j                  dd D ]E  }t        |      du}||j                  v s|| u s|r|| j                  v s4n	 |r9t        ||      c S  y)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   )r~   attrnamer   base_is_classical_inheritss        rS   r   r      s      ~%%%c6"3<<sH%%AB!6t!<D!Ht}}$CK*0&d. 4**   rV   c                \    | j                   D ]  }t        j                  |      }|s|c S  y rO   )r   r   opt_manager_of_class)r~   r   managers      rS   r   r      s4    
 .8.M.M/
 N  rV   c                4    t         j                  | ||d i       S rO   )_MapperConfigsetup_mapping)registryr~   dict_s      rS   _as_declarativer      s    
 &&xeT2FFrV   c                J    t        | |||       t        d|      j                  S )NzMappedClassProtocol[_O])_ImperativeMapperConfigr   rL   )r   r~   table	mapper_kws       rS   _mapperr      s&     Hc5)<)3/:::rV   zsqlalchemy.orm.decl_apic                    t         j                  j                  j                  }t	        | |t         j
                  f      S rO   )r1   	preloadedorm_decl_api_declared_attr_common
isinstanceclassproperty)objr   s     rS   _is_declarative_propsr     s1     NN77MMc143E3EFGGrV   c                n    t        |       r*t        | dd      rt        j                  d|d|d       yy)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   namer~   s      rS   _check_declared_props_nocascader     s8     S!3e,II .238
 rV   c                      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
y)r   )r~   	classname
propertiesdeclared_attr_reg__weakref__	Type[Any]r~   rI   r   z_util.OrderedDict[str, Union[Sequence[NamedColumn[Any]], NamedColumn[Any], MapperProperty[Any]]]r   zDict[declared_attr[Any], Any]r   c                0   t        j                  |       }|r'|j                  |u rt        j                  d| d      |j
                  j                  dd      ry t        |dd      xs 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   hasattrrz   _ClassScanMapperConfig)r~   r   cls_r   r   r   r   	defer_maps           rS   r   z_MapperConfig.setup_mapping*  s     11#6w~~-))KL  ==^U3+.t
 /T-. 	 ($ui  *$ui rV   c                   t        j                  |t        d      | _        |j                  | _        t        j                         | _        i | _        |j                  dd      s/t        j                  | j                  d|| |j                         y t        j                  | j                        }|r|j                  s"t!        j"                  d| j                  z        y )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typer~   rJ   r   OrderedDictr   r   r   r   register_classconstructorr   r   	is_mappedr   r   )rQ   r   r   r   r   s        rS   __init__z_MapperConfig.__init__I  s     ''dF;**,!#}}]E2**!!%$00 !55dhh?G'"3"3-- $)  #4rV   c                h    t        j                  | j                        }|j                  ||       |S rO   )r   manager_of_classr~   install_member)rQ   r   valuer   s       rS   set_cls_attributez_MapperConfig.set_cls_attributee  s+    !22488<x/rV   c                    t               rO   )NotImplementedErrorrQ   r   s     rS   mapz_MapperConfig.mapj  s    !##rV   c                &    | j                  |       y rO   )r   r   s     rS   _early_mappingz_MapperConfig._early_mappingm  s    rV   N)r   r>   r   Type[_O]r   r=   r   Optional[FromClause]r   r`   rW   Optional[_MapperConfig])r   r>   r   r   r   r`   )r   rI   r   rE   rW   rE   ).r   r`   rW   zMapper[Any]r   r`   rW   rl   )rJ   rX   rY   	__slots__r[   classmethodr   r   r   r   r   rP   rV   rS   r   r     s    I 
NN  54  	
 $ ! 
! <  !	8
$rV   r   c                  \     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inheritsc                r   t         |   |||       | j                  d|      | _        t        j
                  5  |j                  dd      s5t        j                  | j                  | j                  |j                         | j                  |       | j                  |       d d d        y # 1 sw Y   y xY w)NrM   r   F)superr   r   r   r   _CONFIGURE_MUTEXr   r   	add_classr   r~   _class_registry_setup_inheritancer   )rQ   r   r   r   r   	__class__s        rS   r   z _ImperativeMapperConfig.__init__t  s     	4311+uE''==6%%NNDHHh.F.F ##I.	* (''s   A*B--B6c                j    t         }| j                  d || j                  | j                  fi |      S )NrL   )r(   r   r~   r   rQ   r   
mapper_clss      rS   r   z_ImperativeMapperConfig.map  s6    
%%txx!1!1?Y?
 	
rV   c                   | j                   }|j                  dd       }|{g }|j                  D ]2  }t        |      }|t	        |      s||vs"|j                  |       4 |rRt        |      dkD  rt        j                  d|d|      |d   }|| _        y t        |t              r|j                  }|| _        y )Nr   r   r    has multiple mapped bases: r   )r~   r   r   r   r   appendlenr   r   r   r(   r   r   )rQ   r   r~   r   inherits_searchr   cs          rS   r   z*_ImperativeMapperConfig._setup_inheritance  s    hh==T2 !O6u=9,Q/A_4L#**1- ' '!+111  +1- ! &)H rV   )r   r>   r   r   r   r   r   r`   r   r   )
rJ   rX   rY   r   r   r1   
EMPTY_DICTr   r   __classcell__r   s   @rS   r   r   q  sF    +I++ + $	+
 !+* .2__ 
!rV   r   c                  T    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<   y)_CollectedAnnotationr7   raw_annotationzOptional[Type[Mapped[Any]]]mapped_containerzUnion[_AnnotationScanType, str]extracted_mapped_annotationboolis_dataclassr   
attr_valuerI   originating_moduler   originating_classNrw   rP   rV   rS   r   r     s+    ''11!@@O  rV   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$<   	 	 	 	 	 	 	 	 	 	 	 d; fd%Zd<d&Z	 	 	 	 d=d'Zh d(Z	 e
j                  d)      Z	 	 	 	 d>d*Zd<d+Zd<d,Ze	 	 	 	 d?d-       Ze	 	 	 	 	 	 	 	 d@d.       ZedAd/       Z	 	 	 	 	 	 	 	 	 	 	 	 dBd0Z	 	 	 	 	 	 	 	 dCd1Z	 	 	 	 	 	 	 	 	 	 dDd2Zd<d3Zd<d4ZdEdFd5ZdGd6ZdHd7ZdHd8ZdHd9Zej>                  fdId:Z  xZ!S )Jr   )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  Optional[Type[Any]]r   r   r  r  r  rd   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      xs t%        | j"                        | _        t)        j*                  |      x| _        }t/        |d      }|r|r|rt1        j2                  d      t%        |xr |      | _        | j7                          | j9                          | j;                          t<        j>                  5  tA        jB                  | jD                  | j                   |jF                         | jI                  |       | jK                          | jM                          | jO                  |       | jQ                  |       | jS                  |       d d d        y # 1 sw Y   y xY w)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   r~   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   )
rQ   r   r   r   r   r   dcacldsdkr   s
            rS   r   z_ClassScanMapperConfig.__init__  s    */Du%DOO 	 	43 "&$&!%'" $ 1!/6HH/0
 	
& +2HH*E+
 +2$001 	' 4?3K3K4
 	
*S &d,KL s))4  '+3;3&7###%**,''!!(*B*B )))4--/**,e$**95	* (''s   1BHHc                     t         j                  d      r#t        j                  t        d      d fd       }t         j                  d      r$t        j                  t        d      d fd       }y y )Nrj   after_configuredc                 N    t        d j                        j                          y N_DeclMappedClassProtocol[Any])r   r~   rj   rg   s   rS   r'  zG_ClassScanMapperConfig._setup_declared_events.<locals>.after_configuredI  s    3TXX""$rV   rh   before_configuredc                 N    t        d j                        j                          y r)  )r   r~   rh   rg   s   rS   r+  zH_ClassScanMapperConfig._setup_declared_events.<locals>.before_configuredQ  s    3TXX##%rV   rk   )r   r~   r0   listens_forr(   )rQ   r'  r+  s   `  rS   r  z-_ClassScanMapperConfig._setup_declared_eventsF  si    "488-?@v'9:% ;%
 #488-@Av':;& <& BrV   c                   | j                   rt        d      }nd}|sdfd}|S t        j                        D ci c]*  }||j                  v r|j
                  |j                  |   , c}t        j                        D ci c]*  }||j                  v r|j
                  |j                  |   , c}t               dfd}|S c c}w c c}w )zProduce a function that checks if a class has overridden an
        attribute, taking SQLAlchemy-enabled dataclass fields into account.

        r  Nc                "    t        | |      |uS rO   )r   )keyr   r~   s     rS   attribute_is_overriddenzR_ClassScanMapperConfig._cls_attr_override_checker.<locals>.attribute_is_overriddenh  s    sC-S88rV   c                    t        |      r|j                  }j                  |       }t        |      r|j                  }||u ry|uryj                  |       }t        | |      }||u ry|urt	        |t
              ry||u ry|uryy)NFT)r   fgetr   r   r   r   )r0  r   ret	all_fieldabsentall_datacls_fieldsr~   local_datacls_fieldss       rS   r1  zR_ClassScanMapperConfig._cls_attr_override_checker.<locals>.attribute_is_overriddeny  s    (-((C +..sF;(-((C#: &.223?	c3,#: 
 f$.*  # f, rV   )r0  rI   r   r   rW   r   )r  r   r1   dataclass_fieldsr^   r   local_dataclass_fieldsr   )rQ   r~   sa_dataclass_metadata_keyr1  fr6  r7  r8  s    `   @@@rS   _cls_attr_override_checkerz1_ClassScanMapperConfig._cls_attr_override_checkerW  s     &&(?4)% )-%(9r '&g ..s3"3A,

: 

#<==3" 44S9$9A,

: 

#<==9$  XF& &P '&k"
$s   /C
/C>   rM   r_   rc   ra   z^(?:_sa_|__)c                  	
 t        j                  |      t        |      | j                  }| j                  }t        j
                  t              t                    D cg c]  }|j                  |      r||v r| c}| j                  rt        |d      nds	 	 dfd}|S t        j                  |      D ci c]  }|j                  | c}	
	 	 d	
fd}|S c c}w c c}w )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.

        r  Nc                      fdD        S )Nc              3  f   K   | ](  }|j                  |      j                  |      d f * yw)FNr   ).0r   cls_annotationscls_varss     rS   	<genexpr>z`_ClassScanMapperConfig._cls_attr_resolver.<locals>.local_attributes_for_class.<locals>.<genexpr>  s?       !&  T*'++D1	 !&s   .1rP   )rC  rD  namess   rS   local_attributes_for_classzM_ClassScanMapperConfig._cls_attr_resolver.<locals>.local_attributes_for_class  s     !& rV   c               3  ,  K   D ]  } j                  | d       }|rN|j                  v r@|j                  t        |j                        j                  |j                        df e| j                  |       j                  |       df  y w)NTF)r   r^   r   _as_dc_declaredattr)r   fieldrC  rD  r9  fixed_sa_dataclass_metadata_keyrF  r;  s     rS   rG  zM_ClassScanMapperConfig._cls_attr_resolver.<locals>.local_attributes_for_class  s      "D,00t<E!:enn!L#jj*=!NN,K+*..uzz:DA A #HLL$68K8K 9 ! ! "s   BB)rW   z$Iterable[Tuple[str, Any, Any, bool]])r1   get_annotationsvars_include_dunders_match_exclude_dundersmerge_lists_w_orderinglistmatchr  r   r:  r   )rQ   r~   rN  rO  nrG  rJ  rC  rD  r9  rK  rF  r;  s          @@@@@@rS   _cls_attr_resolverz)_ClassScanMapperConfig._cls_attr_resolver  s&    ..s3900!%!<!< 00X_ 5
 *//2a;K6K	 
 &&7N48% )-%(4D *)' 04/J/J3/O /Oe

E!/O  /H+!4! ! *)g
> s   )C2
C7c                d	   | j                   }t        d|      | j                  }| j                  }| j                  }| j
                  }d }d x}}d }	d }
d|v }| j                  | j                         }g }|j                  D ]V  }||uxr t        |      }| j                  |      }|s||ur| j                  ||||      }ni }|j                  ||||f       X |D ]  \  }}}}|j                  |        |       D ]  \  }}}}||v r|dk(  rt        |||      }|r"|r|s'dfd}|}0|dk(  r"t        |||      }|
rE|r|sJj                  }
W|dk(  rt        |||      }|sl|	rodfd}|}	x|dk(  r^t        |||      }|r|r|sj                  }t!        |t"        t$        t'        d       f      st)        j*                  d      ||usd	}J |rEt-        |      r8|j.                  s,t1        j2                  d|j4                  d|d|d|d	       $||urt!        |t6        t8        f      rAt!        |t:              rt)        j<                  d      t-        |      r9|J |j>                  rJ||v rt1        j2                  d|d|d       |jA                  ||      x||<   x||<   }tC        |||       n|r.tE        ||d       }t!        |tF              s|jI                         }ntE        ||      }t!        |tF              r1tK        |      r&t!        |jL                  t:              s|jN                  }|x||<   ||<   t!        |t6        t:        f      r|jP                  |jR                  |_(        | jU                  ||jW                         |d	|       tY        |||      r|s||v s ||d       sJ | j[                  |||       |rM||vs||   |urB |||      rJ t-        |      r|jI                         }|||<   | jU                  |||d
|       /| jU                  |||d |      }|d uxr |j\                  d u}||j^                  n|}||s|r||n	t9               ||<   ||v s|||<     |r|
sd }|| _0        |
| _1        || _2        |	| _3        y )Nr*  rM   ra   c                 .    t         j                        S rO   )dictra   cls_as_Decls   rS   _mapper_args_fnz@_ClassScanMapperConfig._scan_attributes.<locals>._mapper_args_fnA  s    '+K,G,G'H HrV   r_   c                      j                   S rO   )rM   rX  s   rS   	_table_fnz:_ClassScanMapperConfig._scan_attributes.<locals>._table_fnW  s    '2'<'< <rV   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)rW   r  )rW   rD   )4r~   r   r  r  r  rN  r=  r   r   rT  _produce_column_copiesr   updater   r_   rc   r   tuplerW  r   r   ArgumentErrorr   _quietr1   r   rJ   r4   r*   r'   r   r   __get__setattrr   r   r3  r   original_property
descriptordocrZ   _collect_annotation_collect_return_annotationr,   _warn_for_decl_attributesr   r   r  r	  r  r  )rQ   r~   r  r  r  rN  r  r  inherited_table_argsr  r	  fixed_tabler1  basesr   class_mappedrG  locally_collected_columnsr   r   
annotationis_dataclass_field
check_declrZ  r\  r4  collected_annotationr   generated_objrY  s                                @rS   r  z'_ClassScanMapperConfig._scan_attributes  s~   hh:C@((#88**00,00
)	!\1"&"A"A$(("KKKD  s?N/H/NL)-)@)@)F&DO,0,G,G.+	-) -/)LL .-	+  F 
&% !''(AB ,-"++00%Ds&
  . ,
I .=N0%Ds&
  ),*(3(A(AI,%Ds&
 &h= (1H!11%Ds&
  *<:)4)C)CJ#- *UD$t*,E$ '*&7&7%4'" !"  $37; 4
 %u!,S1#**		
  $}}dD#	? _ "#'=> #C8!55=  /s3  #.>>#|3 !%		 37%=!" !$C 5606 6s9K ##Cs31
 '.c4&>
 (2#~'F*-((*C '.c4&8 !+3 ?$:3$?(2$'$9$9>)" '*nn !$06s9K
 'sV^,DE #&)kkCG00 ::<   /z3E  + $(< <#:4#F!G ! 66tT3G',T0B#0M  7tSAAA,S1!hhj14(.,,j$s ,0+C+Cj$c,( -D8 N0AAM  0; -77  "
 {;9  -8 *!- -T2
 -58,T2} . `  	J$", rV   c                r     j                   }|sy 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 j                  j                         D        D cg c]F  \  }}}t        j                  ||| j                  j                  |t         j"                              H }}}}rZj                         D ]G  \  }}t%        j&                  d j                   d	d
j)                  d |D               d| ddd       I i }	i }
|D ]7  }t+        |      dk(  r|\  }}nt+        |      dk(  r|\  }}}||
|<   nJ ||	|<   9 |
j                         D ]  \  }}t-         j                  ||         j/                  | j                  |	       y c c}}}w )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__' elementc                f    |j                   ur"d|j                  vr|   j                  |        y)Nrx  T)r~   r   r   )r0  r   rQ   warn_for_non_dc_attrss     rS   _allow_dataclass_fieldzT_ClassScanMapperConfig._setup_dataclasses_transforms.<locals>._allow_dataclass_field:  s7     "1*2C2L2LL%&78??DrV   c              3     K   | ]L  \  }\  }}}}}}} 	||      r6|
j                   vst        
j                   |   t              s||r|n||f N y wrO   )r  r   r   )rB  r0  raw_annor   mapped_annois_dcr   r   r   r{  rQ   s            rS   rE  zG_ClassScanMapperConfig._setup_dataclasses_transforms.<locals>.<genexpr>O  s      0 8C $&%)#/@At888 &11#68J/ #.KH$ 8s   AAzWhen transforming z to a dataclass, attribute(s) , c              3  2   K   | ]  }t        |        y wrO   rp   )rB  r0  s     rS   rE  zG_ClassScanMapperConfig._setup_dataclasses_transforms.<locals>.<genexpr>w  s      Clscl   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/      )r0  rI   r   r   rW   r   )r  r~   r   r   r   collectionsdefaultdictrQ  r   r   r  itemsr"   !_get_arguments_for_make_dataclassr  r   r3   NO_ARGr1   warn_deprecatedjoinr   rf  _apply_dataclasses_to_any_class)rQ   r  r   r0  annor   
field_listr   non_dc_attrsr   defaultsitemr   tpspeckvr{  rz  s   `                @@rS   r  z4_ClassScanMapperConfig._setup_dataclasses_transforms  si   $($B$B!( "TXX%6%66))
 #2 2  $((+++))
 #& &  !, 7 7 =				)2				 "22488<"""0 //5570%
0+T+ ?? ))--c6==A	0 	 %
N ! ',,.!$$(
 3$yy Cl CCD E2() *5		6  /  D4yA~bTa!%b$!%u "K  NN$DAqDHHa# % 	,,%txx	
U%
s   :AH2c                    t        j                  |      }i }|j                         D ]K  \  }}t        |||      r4t	        |||j
                  |t        d       ddd      }|s<|\  }}|||<   G|||<   M |S )NFrequiredrs  expect_mapped)r1   rL  r  r,   r+   rX   r   )	r~   klassrC  new_annor   rr  	extractedinner_s	            rS   (_update_annotations_for_non_mapped_classz?_ClassScanMapperConfig._update_annotations_for_non_mapped_class  s     ..u5 / 5 5 7D*$Z>3$$J"',"'		 (HE1%*HTN!+! !8" rV   c           
        | j                  |       |d   }|t        j                  u rt        j                  }|rt        |dd       }t        d|      |_        nd }	  ||fi |j                         D ci c]  \  }}|t        j                  ur|dk7  r||! c}} 	 |r||`y ||_        y y c c}}w # t        t        f$ r.}t        j                  d|j                  d|dd      |d }~ww xY w# |r||`w ||_        w w xY w)	Nrv   r[   r  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   )	r~   r  r  use_annotationsrv   restoredr  r  exs	            rS   r  z6_ClassScanMapperConfig._apply_dataclasses_to_any_class  sO    	  !:;67KL.!,!6!6 
 u&7>H$()9?$KE!H	5 !: ? ? A A1-!7K2K qD A* #-,4E)	 ' :& 	))!!& 2"& <<  	 #-,4E)	 s6   B6 5$B0B6 0B6 6C3)C..C33C6 6Dc                    h d}t        |      j                  |      }|r:dj                  d t        |      D              }t	        j
                  d| d      y )N>   rq   ro   rp   rr   ru   rt   rs   rv   r  c              3  "   K   | ]  }| 	 y wrO   rP   )rB  args     rS   rE  z>_ClassScanMapperConfig._assert_dc_arguments.<locals>.<genexpr>  s     J2I3sgJ2Is   zDataclass argument(s) z are not accepted)set
differencer  sortedr   rc  )r~   	argumentsalloweddisallowed_argsmsgs        rS   r  z+_ClassScanMapperConfig._assert_dc_arguments  s`    	
 i.33G<))J&2IJJC##(->?  rV   c                   || j                   v r| j                   |   S |y | j                  }| j                  }|;t        |t        j
                        }| xr | xr |d u xs t        |t              }nd}d}t        || j                  |j                  |t        |      d||xr |       }	|	y |	\  }
}|mt        |
      sbt        |
      D ]T  }t        |dd      r#t        | j                  ||j                  d      }t        |t              sE|j!                         }V t#        |||
|||j                  |      x| j                   |<   }|S )NFr  T)check_genericcheck_for_plain_string)include_generic)r  r  r  r   r  Fieldr%   r+   r~   rX   r   r:   r8   r9   r.   r$   found_in_pep593_annotatedr   )rQ   r   r   r   r  r   r   allow_unmappedrs  r  r   r   elemcas                 rS   rj  z*_ClassScanMapperConfig._collect_annotation  s    4-----d33!9988 !+J8I8I!J&& && $& @!*.>?  "'"+HH((1'<,<	
	 8A5#%5j1L&M !<=T 3)44(,	D d$;<!%!?!?!AJ > 1E'((1
 	
""4(2 	rV   c                r    t        |t        j                        rt        j                  d| d| d       y y )Nr^  r_  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   )rQ   r~   r0  r   s       rS   rl  z0_ClassScanMapperConfig._warn_for_decl_attributesB  s<     a112IIcU+cU 3/ / 3rV   c                   | j                   }| j                  }i }| j                  } |       D ]S  \  }	}
}}|s]|
[t        |||      rN ||	|
      r$| j	                  |	||d|
      }||j
                  n|
}
|

t               }
|
||	<   t        ||	|
       ht        |
t        t        f      s ||	|
      r| j	                  |	||d|
      }||j
                  n|
}
|	|vsd|v r!t        |
dd       xs |	|d   j                  v r|
j                  rI|
j                  D ]:  }|j                  |j                  j                  't        j                   d       |
j#                         x||
<   }|||	<   t        ||	|       V |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:.)r~   r  r  r,   rj  r   r*   rf  r   r4   r   r   foreign_keys_table_columnr   r   r   _copy)rQ   attributes_for_classr1  rn  r   r~   r   locally_collected_attributesr  r   r   rr  r   ru  fkcopy_s                   rS   r`  z-_ClassScanMapperConfig._produce_column_copiesO  s    hh!!')$** 4H3I/D#z<K)*c;LM +45 '+'?'?*&7s($
 ,7 )33 
 ;&.C58,T2T3'C&,!78*45
 '+'?'?*&7s($
 ,7 )33  u$5( fd3;t[)++, ''"%"2"2B " 0 0 <$&$4$4$:$:$B&)&=&=%F'" !" #3 25<M#&9>06Cu-O 4JR ,+rV   c                V   | j                   }| j                  }| j                  }| j                  }t	        |dd      }| j
                  }|xs | j                  }t        | j                        }t        |      D ]  }	|	|v r	||	   }
t        |
      r;|
j                  r"t        j                  d| j                   z         t        ||	      }
nOt        |
t               r?|
j"                  |ur1|
j$                  |	k7  r"t'        |
j$                        }
t)        ||	|
       t        |
t*              r@t-        |
      dk(  r2t        |
d   t.        t0        f      rt        j                  d|	z         |rt        |
t2        j4                        rt        |
t.        t6        f      s5|j9                  |	       | j;                  ||	|
       |st)        ||	|
       \|	dv rt=        j>                  d	|	 d
      t        |
t.              r(tA        |	| jB                  jE                  |
|
             nFt        |
tF              rS| jH                  jE                  |	d      \  }}}}}}}|||r%	 |
jK                  | | jL                  |||	||||	       n|sJ t        |
t6              r|
jT                  r|st        |
tV              rg d}ng d}|D ch c]-  }t        |
jX                  d|       tZ        j\                  ur|/ }}t=        j^                  d|	 d| ddja                  tc        d |D                     d      t        |
tV        td        f      s |j9                  |	       t)        ||	|
       |
||	<    y # tN        $ r}tQ        jR                  d| d      |d }~ww xY wc c}w )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   dataclasses_r^  r_  z# includes dataclasses argument(s): r  c              3  2   K   | ]  }t        |        y wrO   r  )rB  as     rS   rE  zF_ClassScanMapperConfig._extract_mappable_attributes.<locals>.<genexpr>T  s     /FAQr  zF but class does not specify SQLAlchemy native dataclass configuration.)3r~   r  r   rN  r   r  r  r   r  rQ  r   r   r1   r   r   r   r   r   r0  r!   rf  rb  r   r4   r%   r  r  r#   poprl  r   r   _undefer_column_namer  r   r$   r  r   r   	NameErrororm_excMappedAnnotationError_has_dataclass_argumentsr'   _attribute_optionsr3   r  rc  r  r  r&   )rQ   r~   r  	our_stuffrN  late_mappedr  expect_annotations_wo_mappedlook_for_dataclass_thingsr  r   rr  r   r   r   r   r   r   neargnamesr  argss                         rS   r  z3_ClassScanMapperConfig._extract_mappable_attributes  s   hh#88OO	00--d
 &*%D%D"&L$*L*L 	% %))G)G$H!*+A$$(+E$U+ ##II  $xx(  Q 5"45LL+IIN (		2Q& 5%(J!OuQx&2B)CD		BDEF
 *z{((0
 0C'DE
 %((+..sAu="CE* m#--&qc *' '  E6*$t))--eU; e%<= 2266F"(3$"*) )4%-
 6&!22 $ $ # 2 ! 0 * ; ,
.  <;;e%8966 9%e^<(H (KH &. %-& % 8 8L:L  $*== 1 %-    "//)!Ku =8#yy/F/F)FGH III  &enl-KL -003  Q.  IaLa ,^  ) &")"?"?#00:| <E!F#
 $&&&: s   '#M;
2N&;	N#NN#c                   | j                   }| j                  }| j                  }t        j                  t
              }t        |j                               D ]  \  }}t        |t              r|j                  }|r|||<   n||= |j                  D ]a  \  }}	t        |t              s||j                     j                  |       |j                  |       |	||<   |M||j                  k7  s]|||<   c t        |t               s|j                  J ||j                     j                  |       |j                  |       ||j                  k(  s||=  |j                         D ]U  \  }
}t#        |      dkD  st%        j&                  d| j(                  d|
ddj+                  t-        |            d       W y )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  rQ  r  r   r&   mapper_property_to_assigncolumns_to_assignr    r   addr0  r4   r   r1   r   r   r  r  )rQ   r  r  r  name_to_prop_keyr0  r   mp_to_assigncol
sort_orderr   keyss               rS   r   z0_ClassScanMapperConfig._extract_declared_columnsn  s   OO	  00..&22379??,-FC!\* ::%1IcN "#'(':':OC%a):;(266s;$((- ,6OC( $+sww),	#! (;" Av& vv))) (,,S1 $$Q' !%%<!#O .R +002JD$4y1}		
 ~~tdiit.E	H 3rV   c           	     $   | j                   }t        d|      }| j                  }| j                  }| j                  }| j
                  }| j                  t        j                  |      }| j                  d|vr|	t        |d      r5t        t        t           t        j                  |j                              }	nt        }	|@d}
i }|rCt!        |t"              r|}n0t!        |t$              r t!        |d   t"              r|dd |d   }}
n|}
|j'                  d      }|r||d<   |j'                  d	      }|rd
|d<   t)        |fd      }| j+                  d |	|| j-                  |      g||
i |      }|| _        y |9| j                  r!| j+                  d| j                               }n|j.                  }|rD|D ]?  }|j0                  j3                  |      rt5        j6                  d|j8                  z         || _        y )NMappedClassProtocol[Any]rM   __table_cls__rP   r   __autoload_with__autoload_with__autoload__Tautoloadc                (    j                  | d      S )Nr   rA  )r   r  s    rS   <lambda>z5_ClassScanMapperConfig._setup_table.<locals>.<lambda>  s    /"5"5a";rV   )r0  z8Can't add additional column %r when specifying __table__)r~   r   r	  r  r  r  r  r   r   r  r   r   r5   r1   unbound_method_to_callabler  r   rW  rb  r   r  r   _metadata_for_clsrM   r   contains_columnr   rc  r0  r   )rQ   r   r~   rY  r	  r  r  r  r   	table_clsr  table_kwr  r  sorted_columnsr   r  s                   @rS   r!  z#_ClassScanMapperConfig._setup_table  s#   hh5s;NN	__
((00..--c2 MM!</sO, K33C4E4EF	
 "	$(*+-!*d3#-#J6%jnd;-7"-=z"~(D#-D , 0 01D E 0=H_-'++N;+/HZ(!'$;" ..!..w7 ( 	
 #	4 ! }== 22#T]]_E (11E)A 772215!//356UU;  * !rV   c                d    t        | j                  dd       }||S |j                  j                  S )Nr^   )r   r~   r   r^   )rQ   r   metas      rS   r  z(_ClassScanMapperConfig._metadata_for_cls  s1    #*488Z#FK##,,,rV   c                   | j                   }|j                  dd       }|tg }|j                  D ]2  }t        |      }|t	        |      s||vs"|j                  |       4 |rKt        |      dkD  rt        j                  d|d|      |d   }nt        |t              r|j                  }|| _        | j                  }d|vr| j                  d| _        y y y )Nr   r   r   r   r   rM   T)r~   r   r   r   r   r   r   r   r   r   r(   r   r   r  r	  r  )rQ   r   r~   r   r   r   r   r  s           rS   r  z/_ClassScanMapperConfig._setup_inheriting_mapper  s    hh==T2 !O6u=9,Q/A_4L#**1- ' '!+111  +1-&)H ((l*t~~/EDK 0F*rV   c           
        | j                   }| j                  }| j                  }| j                  }|0| j                  $t        |d      st        j                  d|z        | j                  rqt        | j                        }|J |j                   }|j                  }|<|rt        j                  d      |r@t        |t              s0t        j                  d| j                   d| j                   d      |D ]  }	|J |	j                  |j                  v r\|j                  |	j                     |	u r;t        j                  d|	 d|j                   d	|j                  |	j                      d
      |	j                   rt        j                  d      t"        rt        |t              sJ |j%                  |	       |||us|j'                  |	        y y y )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 'r_  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   r~   r  r  r   r   r   r   r   r  rc  r   r5   r   r   rJ   primary_keyr   append_column_refresh_for_new_column)
rQ   r   r   r~   r  r  inherited_mapper_or_configinherited_tableinherited_persist_selectabler  s
             rS   r"  z0_ClassScanMapperConfig._setup_inheriting_columns  s     hh__
00 M%+C@))&(+, 
 ]])?)N&-9998DDO*== ) } ++)  $J,N++$$(HH:]4==/ J33  ,C*666xx?#4#44*,,SXX6#=$!//&se;s||n E  / 1 1#(( ;< =44  !//3 
 %)/5AAA#11#64@8O4LL7 ,#  rV   c                r   | j                   }| j                  r| j                         }ni }|r|j                  |       d|v rt        |      }|j                  |d          dD ]+  }||v s||   }| j                  j                  ||      ||<   - d|v rCt        j                  |d         D cg c]  }| j                  j                  ||        c}|d<   d|v rJ|d   }t        |t              r|j                  }|| j                  urt        j                  d|d   z        | j                  r| j                  |d<   | j                  r>|j                  dd      s+t        | j                  d      }|j                  }d|vr|j                   D 	ch c]  }	|	|j"                  vr|	j$                   c}	j'                  |j(                  xs d	      x|d<   }
|
j+                  | j,                  D 	cg c]  }	|	j$                   c}	       t/        |j1                               D ]b  \  }}t        |t2        j4                        s!||j6                  v s0|j6                  |   }t        |t8              sP|g|j:                  z   ||<   d |j=                         }||d<   || _        y c c}w c c}	w c c}	w )
Nr   )version_id_colpolymorphic_onr  r   z:mapper inherits argument given for non-inheriting class %sconcreteFexclude_propertiesrP   ) r   r  ra  rW  r  r   r1   to_listr   r(   r   r   r   r   r-   r   r   _columntopropertyr0  unionr  difference_updater  rQ  r  r2   r  _propsr)   columnscopyr
  )rQ   r   r   r
  r  r  inherits_arginherited_mapperr  r   r  r  presult_mapper_argss                 rS   _prepare_mapper_argumentsz0_ClassScanMapperConfig._prepare_mapper_argumentsg  s   __
--/KKy);&j)Jk,78 6AKN!%!3!3!7!71!=A 6
 K' k-&@A*AA ""&&q!,A*K&
 $&z2L,/+224==0--"-j"9; 
 ==&*mmK
#==U!C  ,DMM5A.::O $;6 -..J. 0 B BB EE.J %(;;ArB	C014F
 #44$($9$9:$9qQUU$9: z//123!#z'?'?@(///(//2A!!^4 *-		(9
1 3 )--/+5<(-q*<J ;s   0#J*!J/5J4c                4   | j                  |       t        | j                  d      r4t        dt	        j
                  | j                  j                              }nt        }| j                  d || j                  | j                  fi | j                        S )N__mapper_cls__zType[Mapper[Any]]rL   )r  r   r~   r   r1   r  r  r(   r   r   r
  r   s      rS   r   z_ClassScanMapperConfig.map  s    &&y1488-.#//HH++J  J%%txx!1!1FT5E5EF
 	
rV   )
r   r>   r   r   r   r=   r   r   r   r`   rk   )r~   r   rW   Callable[[str, Any], bool])r~   r   rW   2Callable[[], Iterable[Tuple[str, Any, Any, bool]]])r  r   rW   !Mapping[str, _AnnotationScanType])r  rn   r  r   r  r  rW   rl   )r  rn   rW   rl   )r   rI   r   r7   r   r   r  zOptional[bool]r   r   rW   zOptional[_CollectedAnnotation])r~   r   r0  rI   r   r   rW   rl   )
r  r  r1  r  rn  r   r   r   rW   z0Dict[str, Union[Column[Any], MappedColumn[Any]]]rO   )r   r   rW   rl   )r   zClassManager[Any]rW   rC   r   r   )"rJ   rX   rY   r   is_deferredr[   r   r  r=  rN  recompilerO  rT  r  r  r   r  r  r  rj  rl  r`  r  r   r!  r  r  r"  r  r1   r   r   r   r   s   @rS   r   r     s   I. K::((%%,,22++  ""((::!!L#'' $$<< ! K+K+ K+ 	K+
 $K+ !K+Z&"J'J'	#J'X (RZZ8B*B*	;B*Hl!\	v
p 	* 2 25#625 25 ;	25
 
25 25h  $HH ,H %	H
 &H H 
(HT#&+.	X,
X,
 "<X, X, %X, 
:X,tC!J9vL!\-BFPO.b .2__ 
 
rV   r   c                    t         j                  j                  }| |   }t        |      r't	        ||j
                        s|j                  |      S |S rO   )r1   r   r   callabler   r@   )field_metadatar;  decl_apir   s       rS   rI  rI    sJ     ~~**H
2
3C}ZX-C-CD%%c**
rV   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 )rz   weakref.ref[Type[Any]]_clsTz?util.OrderedDict[weakref.ref[Type[Any]], _DeferredMapperConfig]_configsc                     y rO   rP   r   s     rS   r   z$_DeferredMapperConfig._early_mapping  s    rV   c                "    | j                         S rO   )r   rg   s    rS   r~   z_DeferredMapperConfig.cls  s    yy{rV   c                    t        j                  || j                        | _        | | j                  | j                  <   y rO   )weakrefref_remove_config_clsr   r!  )rQ   r   s     rS   r~   z_DeferredMapperConfig.cls  s,    KK(?(?@	#'dii rV   c                <    | j                   j                  |d        y rO   )r!  r  )r~   r&  s     rS   r'  z(_DeferredMapperConfig._remove_config_cls  s    d#rV   c                h    t        |t              xr! t        j                  |      | j                  v S rO   )r   r   r%  r&  r!  r~   r   s     rS   r{   z_DeferredMapperConfig.has_cls  s(     &$'OGKK,?3<<,OOrV   c                    t        |d      r|j                          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   r,  r  UnmappedClassError_safe_cls_namer*  s     rS   raise_unmapped_for_clsz,_DeferredMapperConfig.raise_unmapped_for_cls  sN    667,,.((//78 9J J
 	
rV   c                F    | j                   t        j                  |         S rO   )r!  r%  r&  r*  s     rS   r|   z$_DeferredMapperConfig.config_for_cls  s    ||GKK/00rV   c                   | j                   j                         D cg c]  }||j                  f c}D cg c]  \  }}|t        ||      r| }}}|s|S |D ci c]  }|j                  | c}g }D ]'  |j	                  fdj
                  D               ) t        t        j                  ||            S c c}w c c}}w c c}w )Nc              3  :   K   | ]  }|v r|      f  y wrO   rP   )rB  base_clsall_m_by_clsm_clss     rS   rE  z9_DeferredMapperConfig.classes_for_base.<locals>.<genexpr>  s0       /H|+ h'e)<= /s   )	r!  valuesr~   r   extendr   rQ  r6   sort)	r~   r3  r8  mr   classes_for_basetuplesr4  r5  s	          @@rS   r:  z&_DeferredMapperConfig.classes_for_base	  s     140C0C0EF0E1QJ0EF
F4JtX$> F 	 
 ##*:;*:Qq*:;LN!EMM  %  " K$$V-=>??! G
 <s   CCCc                n    | j                   j                  | j                  d        t        |   |      S rO   )r!  r  r   r   r   )rQ   r   r   s     rS   r   z_DeferredMapperConfig.map!  s*    $))T*w{9%%rV   r   )rW   r   )r   r   rW   rl   )r&  r  rW   rl   )r   r   rW   r   )r   r   rW   r   )r   r   rW   rz   )T)r3  r   r8  r   rW   zList[_DeferredMapperConfig]r   )rJ   rX   rY   r[   r  r1   r   r!  r   propertyr~   setterr   r'  r{   r/  r|   r:  r   r   r   r   s   @rS   rz   rz     s    
  K 	      	ZZ( ( $ $ P P 

 

 1 1 /3@ @(,@	$@ @. .2__ & &rV   rz   c                   d| j                   v rt        d|       }dd}t        |t              rBt	        ||        ||      j                  |d       |j                  j                  ||       yt        |t              r|j                  }|j                  D ]I  \  }}t	        ||        ||      j                  |d       |r.|j                  j                  ||       K |r|j                  j                  ||       yt        |t              r|j                  j                  ||       yt        |t              rA|j                  |k7  r2t        |j                        }|j                  j                  ||       yt        j!                  | ||       |j                  j#                          yyt        j!                  | ||       y)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  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   )mcs    rS   _table_or_raisez'_add_attribute.<locals>._table_or_raise3  sC    ",,.||#))=bkk_ M; ; rV   T)replace_existingN)rA  r  rW   r5   )r   r   r   r4   r  r  rL   add_propertyr&   r  r  r'   r   r0  r!   r   __setattr___expire_memoizations)r~   r0  r   
mapped_clsrB  mpr  r  s           rS   _add_attributerI  &  s    s||#4c:
	 eV$ e,J'55 6  !!..sE:|,00B11Q$S#.
+99$ :  ))66sC@ 2 %%223;~.!!..sE:12uyyC7G $EII.E!!..sE:S#u-!!668  	c5)rV   c                   d| j                   v r|| j                   v rt        d|       j                  j                  su| j                   |   }t	        |t
        t        t        t        f      rt        d      t        j                  | |       t        d|       j                  j                          y t        j                  | |       y )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__rF  )r~   r0  r   s      rS   _del_attributerM  Z  s    $3<<&

*__% S!FL.:LM
 &N  S#&*Cj--/c"rV   c                    t        |       }|D ]8  }t        ||      st        |d|j                        t	        | |||          : y)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   rf  )rQ   kwargsr   r  s       rS   _declarative_constructorrP  r  sL     :DtQ>?O  	a# rV   r   c                R    |j                   | |_         |j                  | |_        y y rO   )r0  r   )r0  columns     rS   r  r    s)    zz
{{ rV   )r~   r   rW   z3Optional[Union[_DeferredMapperConfig, Mapper[Any]]])r~   r   rW   r   )r~   r   rW   r  )F)r~   r   r   rI   r   r   rW   zOptional[Any])r~   r   rW   zOptional[ClassManager[_O]])r   r>   r~   r   r   r=   rW   r   )
r   r>   r~   r   r   r   r   r`   rW   rK   )r   r   rW   r   )r   r   r   rI   r~   r   rW   r   )r  r  r;  rI   rW   r   )r~   r   r0  rI   r   zMapperProperty[Any]rW   rl   )r~   r   r0  rI   rW   rl   )rQ   r   rO  r   rW   rl   )r0  rI   rR  zColumn[Any]rW   rl   )rrZ   
__future__r   r  r  r  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?   r  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   rI  rz   rI  rM  rP  rJ   r  rP   rV   rS   <module>rb     s   / "   	                         + - * "   / - ) + / ( $ &  & $ ) '  )         - " $ $ " ##&'-*%+TS!uS#XS#X67-(2, -,226 ,@) @
	
8
,. 38$	$!$+/$$NGG"+G4>GG;;	;  ; 	;
 ; ./H 0H	&	W Wt;!m ;!|!: !N
] N
b0 ./%BE 0J&2 J&Z1*	1*1*%81*	1*h#0$& %/  !rV   