
    +hʮ                     6   d Z ddlm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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 Z$d Z%d2dZ&d Z'd Z(d  Z) ejT                  d!      d"        Z+d# Z, G d$ d%e-      Z. G d& d'e.      Z/ G d( d)e.      Z0 ejT                  d!      d*        Z1 G d+ d,e0      Z2d- Z3d. Z4d/ Z5d0e5_6        d1 Z7y)3z(Internal implementation for declarative.    )absolute_importN)
attributes)instrumentation   )clsregistry)exc)mapper)InstrumentedAttribute)QueryableAttribute)_is_mapped_class)InspectionAttr)CompositeProperty)SynonymProperty)MapperProperty)Mapper)ColumnProperty)class_mapper   )event)util)
expression)Column)Table)topologicalc                     t         j                  |       rt         j                  |       S t        |       rt	        | d      S y )NF)	configure)_DeferredMapperConfighas_clsconfig_for_clsr   r   clss    K/var/www/html/venv/lib/python3.12/site-packages/sqlalchemy/orm/decl_base.py_declared_mapping_infor#   %   s9    $$S)$33C88	#	C511    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!   sup
clsmanagers      r"   r+   r+   0   sj    
f}
||.== 	C4S9C
	
 *3/
$$$Jr$   c                    |dk7  sJ t        | t              sy|| j                  v rt        | |      S | j                  dd D ]C  }t        |      }||j                  v s|| u s|r|| j                  v s2n	 |r7t        ||      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!   attrnamestrictbase_is_classicial_inheritss        r"   _get_immediate_cls_attrr8   D   s     ~%%%c6"3<<sH%%AB "7"=t}}$CK*0&d/ 4** r$   c                 v    t        | d      sy | j                  D ]  }t        j                  |      }|s|c S  y )Nr3   )hasattrr3   r   manager_of_class)r!   r6   managers      r"   r,   r,   i   sA     3	" --d3N r$   c                 4    t         j                  | ||d i       S N)_MapperConfigsetup_mapping)registryr!   dict_s      r"   _as_declarativerC   y   s    
 &&xeT2FFr$   c                 6    t        | |||       |j                  S r>   )_ImperativeMapperConfig
__mapper__)rA   r!   table	mapper_kws       r"   _mapperrI      s    Hc5)<>>r$   zsqlalchemy.orm.decl_apic                     t         j                  j                  j                  }t	        | |t         j
                  f      S r>   )r   	preloadedorm_decl_apideclared_attr
isinstanceclassproperty)objrM   s     r"   _is_declarative_propsrQ      s/    NN//==McM4+=+=>??r$   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)rQ   r2   r   warn)rP   namer!   s      r"   _check_declared_props_nocascaderV      s6    S!3e,II .238
 r$   c                   2    e Zd ZdZed        Zd Zd Zd Zy)r?   )r!   	classname
propertiesdeclared_attr_reg__weakref__c                 $   t        j                  |       }|r&|j                  |u rt        j                  d| z        |j
                  j                  dd      ry t        |dd      xs t        |d      }|rt        }nt        } ||||||      S )Nz4Class %r already has been instrumented declarativelyr&   F_sa_decl_prepare_nocascadeTr5   _sa_decl_prepare)r   r;   r-   r   InvalidRequestErrorr(   r)   r8   r:   r   _ClassScanMapperConfig)	r!   rA   cls_rB   rG   rH   r<   	defer_mapcfg_clss	            r"   r@   z_MapperConfig.setup_mapping   s    --c2w~~-))ICO  ==^U3+.t
 /T-. 	 +G,GxueY??r$   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 )Nrb   non_primaryF)finalizerA   declarative_scaninit_methodztClass %s has no primary mapper configured.  Configure a primary mapper first before setting up a non primary Mapper.)r   assert_arg_typetyper!   __name__rX   OrderedDictrY   rZ   r)   r   register_classconstructorr   r;   	is_mappedr   r`   )selfrA   rb   rH   r<   s        r"   __init__z_MapperConfig.__init__   s    ''dF;**,!#}}]E2**!!%$00 !11$((;G'"3"3-- $)  #4r$   c                 h    t        j                  | j                        }|j                  ||       |S r>   )r   r;   r!   install_member)rq   r4   valuer<   s       r"   set_cls_attributez_MapperConfig.set_cls_attribute   s+    !22488<x/r$   c                 &    | j                  |       y r>   )maprq   rH   s     r"   _early_mappingz_MapperConfig._early_mapping   s    r$   N)	rl   
__module____qualname__	__slots__classmethodr@   rr   rv   rz    r$   r"   r?   r?      s.    I @ @*.r$   r?   c                   F     e Zd ZdZ fdZej                  fdZd Z xZ	S )rE   )rB   local_tableinheritsc                    t         t        |   |||       i | _        | 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)N	__table__rf   F)superrE   rr   rB   rv   r   	mapperlib_CONFIGURE_MUTEXr)   r   	add_classrX   r!   _class_registry_setup_inheritancerz   )rq   rA   rb   rG   rH   	__class__s        r"   rr   z _ImperativeMapperConfig.__init__   s     	%t5dI	
 
11+uE'' 	+==6%%NNDHHh.F.F ##I.	*	+ 	+ 	+s   A*B88Cc                 j    t         }| j                  d || j                  | j                  fi |      S )NrF   )r	   rv   r!   r   rq   rH   
mapper_clss      r"   rx   z_ImperativeMapperConfig.map   s6    
%%txx!1!1?Y?
 	
r$   c                    | j                   }|j                  dd       }|g }|j                  D ]=  }t        |      }|t	        |      	 t        |dd      r-|j                  |       ? |rRt        |      dkD  rt        j                  d|d|      |d   }|| _        y t        |t              r|j                  }|| _        y )	Nr   r]   Tr^   r   Class  has multiple mapped bases: r   )r!   r)   r*   r+   r#   r8   appendlenr   r`   rN   r	   r-   r   )rq   rH   r!   r   inherits_searchcs         r"   r   z*_ImperativeMapperConfig._setup_inheritance   s    hh==T2 !O]] 	.6q99)&=3D' $**1-	. '!+111  +1- ! &)H r$   )
rl   r{   r|   r}   rr   r   
EMPTY_DICTrx   r   __classcell__r   s   @r"   rE   rE      s     4I+0 !OO 
!r$   rE   c                        e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZddZd Zd Zd Zej$                  fdZ xZS )ra   )
rB   r   persist_selectabledeclared_columnscolumn_copies
table_args	tablenamemapper_argsmapper_args_fnr   c                 ,   |rt        |      ni | _        t        t        |   |||       d | _        t               | _        i | _        | j                          | j                          t        j                  5  t        j                  | j                  | j                   |j"                         | j%                          | j'                          | j)                  |       | j+                  |       | j-                  |       d d d        y # 1 sw Y   y xY wr>   )dictrB   r   ra   rr   r   setr   r   _setup_declared_events_scan_attributesr   r   r   r   rX   r!   r   _extract_mappable_attributes_extract_declared_columns_setup_tabler   rz   )rq   rA   rb   rB   rG   rH   r   s         r"   rr   z_ClassScanMapperConfig.__init__,  s     %*T%[r
$d4XtYO"& ###%'' 	+!!(*B*B --/**,e$##I.	*	+ 	+ 	+s   8B	D

Dc                      t         j                  d      r"t        j                  t        d       fd       }t         j                  d      r#t        j                  t        d       fd       }y y )N__declare_last__after_configuredc                  :     j                   j                          y r>   )r!   r   rq   s   r"   r   zG_ClassScanMapperConfig._setup_declared_events.<locals>.after_configuredT  s    ))+r$   __declare_first__before_configuredc                  :     j                   j                          y r>   )r!   r   r   s   r"   r   zH_ClassScanMapperConfig._setup_declared_events.<locals>.before_configuredZ  s    **,r$   )r8   r!   r   listens_forr	   )rq   r   r   s   `  r"   r   z-_ClassScanMapperConfig._setup_declared_eventsQ  si    "488-?@v'9:, ;, #488-@Av':;- <- Br$   c                    t        d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               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.

        __sa_dataclass_metadata_key__Nc                      t        |       |uS r>   )r2   )keyrP   r!   s     r"   attribute_is_overriddenzR_ClassScanMapperConfig._cls_attr_override_checker.<locals>.attribute_is_overriddeni  s    sC(33r$   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)rQ   fgetr)   r2   rN   r
   )r   rP   ret	all_fieldabsentall_datacls_fieldsr!   local_datacls_fieldss       r"   r   zR_ClassScanMapperConfig._cls_attr_override_checker.<locals>.attribute_is_overridden{  s    (-((C +..sF;(-((C#: &.223?	c3,#: 
 f$.*  # f, r$   )r8   r   dataclass_fieldsmetadatarU   local_dataclass_fieldsr'   )rq   r!   sa_dataclass_metadata_keyr   fr   r   r   s    `   @@@r"   _cls_attr_override_checkerz1_ClassScanMapperConfig._cls_attr_override_checker^  s    
 %<0$%
! %,4t '&g ..s3",

: 

#<==" 44S9$,

: 

#<==$  XF&P '&k"
$s   /C;/Cc                 Z    t        dd      fd}|S t               fd}|S )zproduce a function to iterate the "attributes" of a class,
        adjusting for SQLAlchemy fields embedded in dataclass fields.

        r   Nc               3   ^   K   t              j                         D ]  \  } }| |df  y w)NF)varsitems)rU   rP   r!   s     r"   local_attributes_for_classzM_ClassScanMapperConfig._cls_attr_resolver.<locals>.local_attributes_for_class  s2     !%c!2 +ID#U**+s   *-c               3   :  K   t        j                        D ]Q  } | j                  v sj                  | j                         | j                  t        | j                        df S t              j                         D ]  \  }}|vs||df  y w)NTF)r   r   r   addrU   _as_dc_declaredattrr   r   )fieldrU   rP   r!   field_namesr   s      r"   r   zM_ClassScanMapperConfig._cls_attr_resolver.<locals>.local_attributes_for_class  s     !88=  E0ENNB#

3#jj*=!NN,E+     "&c!2 /ID#;."C../s   'BA%B
B)r8   r   )rq   r!   r   r   r   s    ` @@r"   _cls_attr_resolverz)_ClassScanMapperConfig._cls_attr_resolver  sC    
 %<0$%
! %,+$ *) %K	/ *)r$   c                 D   | j                   | j                  }| j                  }d }d x}}d }| j                  | j                         }g }j                  D ]g  }	|	uxr t        |	      d uxr t        |	dd       }
| j                  |	      }|
s|	ur| j                  ||      }ni }|j                  |	|
||f       i |D ]  \  }	}
}}|j                  |        |       D ]  \  }}}|dk(  rt        ||      }|r|
r|s"fd}(|dk(  r"t        ||      }|r=|
r|sBj                  }O|dk(  r^t        ||      }|rd|
r|sij                  }t        |t        t         t#        d       f      st%        j&                  d      |	usd}|
r8t)        |      r,t+        j,                  d	|	j.                  d
|d|	dd
	       |	urot        |t0              rt        |t2              rt%        j4                  d      t)        |      r|j6                  rJ||v rt+        j,                  d|dd       |j9                  |      x||<   x||<   }t;        ||       n|r.t=        |d       }t        |t>              s|jA                         }nt=        |      }t        |t>              r2|jB                  r&t        |jD                  t2              s|jF                  }|x||<   ||<   t        |t0        t2        f      s*|jH                  8|jJ                  |_$        K| jM                  |	||       `|sd||vs	||   |usq |||      rJ t)        |      r|jA                         }|||<     |r|sd }|| _'        || _(        || _)        y )Nr]   Tr^   __mapper_args__c                  .    t         j                        S r>   )r   r   r    s   r"   r   z?_ClassScanMapperConfig._scan_attributes.<locals>.mapper_args_fn  s    #'(;(;#<<r$   __tablename____table_args__z3__table_args__ value must be a tuple, dict, or Nonez*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)*r!   rB   r   r   r3   r#   r8   r   _produce_column_copiesr   updaterV   r   r   rN   tupler   rk   r   ArgumentErrorrQ   r   rT   rl   r   r   r`   rS   __get__setattrr2   r   r   _is_internal_proxyoriginal_property
descriptordoc__doc___warn_for_decl_attributesr   r   r   )rq   rB   r   r   r   inherited_table_argsr   r   basesr6   class_mappedr   locally_collected_columnsrU   rP   is_dataclass
check_declr   r!   s                     @r"   r   z'_ClassScanMapperConfig._scan_attributes  s   hh

**,00
)	"&"A"A$(("KKK  	D C *40</6t   *.)@)@)F&DO,0,G,G.+-)
 -/)LL .-	3 	N Z	& 
&% LL23+E+G M&'c<,,!@T3"J *<:= _,!@T3"J %lj$'$5$5	--!@T3"J &|z%(%7%7
)&d4j(A  #&"3"3!0#   s?370!,S1		
  $}}dD#	? _ "#v. #C8!55=  /s3>>#u} !%		 37%=!" '*kk#s&;<E$K <- #+ ##Cs3+
 '.c4&>
 (2#~'F*-((*C '.c4&8 !+3 ?$'$:$:(2$'$9$9>)" '*nn?BBE$K-*<&sV^,DE #&)kkCG
 66tT3G!%tC)?  7tSAAA,S1!hhj"%E$K[M&Z	&x  	J$",r$   c                 r    t        |t        j                        rt        j                  d|d|d       y y )Nr   r   zk appears to be a non-schema 'sqlalchemy.sql.column()' object; this won't be part of the declarative mapping)rN   r   ColumnClauser   rT   )rq   r!   r   r   s       r"   r   z0_ClassScanMapperConfig._warn_for_decl_attributes  s/    a001II  2r$   c                    | j                   }| j                  }i }| j                  } |       D ]  \  }}}	t        |t              s |||      r"|j
                  rt        j                  d      ||vsHd|v r |j                  xs ||d   j                  v rl|j                         x||<   }
|j                  |
_        t        |||
       |
||<    |S )NzColumns with foreign keys to other columns must be declared as @declared_attr callables on declarative mixin classes.  For dataclass field() objects, use a lambda:.r   )r!   rB   r   rN   r   foreign_keysr   r`   rU   r   _copy_creation_orderr   )rq   attributes_for_classr   r!   rB   locally_collected_attributesr   rU   rP   r   copy_s              r"   r   z-_ClassScanMapperConfig._produce_column_copies  s     hh

')$** (<'= 	?#D#|#v&*45 %%11:  &5()TeK.@.B.BB14<M#&,/,?,?E)Cu-9>06+	?, ,+r$   c                 `   | j                   }| j                  }| j                  }t        |dd      }t	        |      D ]m  }|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$        t&        f      rt        j                  d|z         t        |t$        t&        f      sF|j)                  d	      s3|j+                  |       | j-                  |||       |st        |||       O|d
k(  rt/        j0                  d      |||<   p y )Nr]   Tr^   )r   r   r   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   zdAttribute name 'metadata' is reserved for the MetaData instance when using a declarative base class.)r!   rB   rY   r8   listrQ   rS   r   rT   r2   rN   r   r-   r   r   r   r   r   r   r   
startswithpopr   r   r`   )rq   r!   rB   	our_stufflate_mappedkru   s          r"   r   z3_ClassScanMapperConfig._extract_mappable_attributes  s   hh

OO	--d
 e 9	!AEE!HE$U+##II  $xx(  Q 5"45LL+IIN (		2Q& 5%(J!OuQx&.)AB		BDEF
 '?@ ||D)IIaL2235A&Q. j--. 
 !IaLs9	!r$   c                    | j                   t        j                  fd       | j                  }t	        j
                  t              }t        j                               D ]  \  }}t        |t        t        f      r{|j                  D ]k  }t        |t              s|j                  !t        ||       t        |t              s||j                      j#                  |       |j#                  |       m t        |t              st        ||       ||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 )	Nc                 "    |    j                   S r>   r   )r   r   s    r"   <lambda>zB_ClassScanMapperConfig._extract_declared_columns.<locals>.<lambda>	  s    y~'E'E r$   r   r   z	On class z, Column object z7 named directly multiple times, only one will be used: z, z$. Consider using orm.synonym instead)rY   r   sort_dictionaryr   collectionsdefaultdictr   r   r   rN   r   r   columnsr   rG   _undefer_column_namerU   r   r   r   rT   rX   joinsorted)	rq   r   name_to_prop_keyr   r   colrU   keysr   s	           @r"   r   z0_ClassScanMapperConfig._extract_declared_columns  st   OO	 	E	

  00&22379??,- 	'FC!n.?@A99 2C!#v.3993D,S#6)!->?,SXX6::3?(,,S12 Av&$S!, (,,S1 $$Q' !%%<!#%	'( +002 	JD$4y1}		
 ~~tdiit.E	H	r$   c           
         | j                   }| j                  }| j                  }| j                  }| j                  }t        j                  |      }t        |d       x}| _        d|vr|t        |d      r 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<   | j#                  d ||| j%                  |      gt        |      t        |	      z   i |
      }|| _        y ||j&                  }|rD|D ]?  }|j(                  j+                  |      rt-        j.                  d|j0                  z         || _        y )Nc                     | j                   S r>   r   )r   s    r"   r   z5_ClassScanMapperConfig._setup_table.<locals>.<lambda>7  s    A,=,= r$   r   r   __table_cls__r   r   __autoload_with__autoload_with__autoload__Tautoloadz8Can't add additional column %r when specifying __table__)r!   r   r   rB   r   r   r;   r  r:   r   unbound_method_to_callabler  r   rN   r   r   r)   rv   _metadata_for_clsr   r   contains_columnr   r   r   r   )rq   rG   r!   r   r   rB   r   r<   	table_clsargstable_kwr  r  r   s                 r"   r   z#_ClassScanMapperConfig._setup_table-  s   hhNN	__


00--c239"=4
 	
40 e#sO, ;;C<M<MN	!	$!#Rh!*d3#-#J6%jnd;-7"-=z"~(D#-D %		*= > 0=H_- 99^4+/HZ(..!..w7   01E$K? #	& ! }) A 772215!//356UU;  !r$   c                     t        | j                  d      r| j                  j                  S |j                  j                  S )Nr   )r:   r!   r   rA   )rq   r<   s     r"   r  z(_ClassScanMapperConfig._metadata_for_clsi  s2    488Z(88$$$##,,,r$   c           
      `   | j                   }| j                  }| j                  }| j                  }|j	                  dd       }|g }|j
                  D ]B  }t        |      }|t        |      	 t        |dd      r-||vs2|j                  |       D |rKt        |      dkD  rt        j                  d|d|      |d   }nt        |t              r|j                  }|| _        |0| j                   $t        |d	      st        j                  d
|z        | j                   rt        | j                         }	|	j                   }
|	j"                  }||rt        j$                  d      |D ]  }|j&                  |
j(                  v rR|
j(                  |j&                     |u r7t        j$                  d|d|d|
j(                  |j&                     d      |j*                  rt        j$                  d      |
j-                  |       |||
us|j/                  |        y y y )Nr   r]   Tr^   r   r   r   r   __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.zColumn 'r   z! conflicts with existing column ''zDCan't place primary key columns on an inherited class with no table.)r   r!   r   r   r)   r*   r+   r#   r8   r   r   r   r`   rN   r	   r-   r   r   r   rU   r   primary_keyappend_column_refresh_for_new_column)rq   rH   rG   r!   r   r   r   r   r   inherited_mapperinherited_tableinherited_persist_selectables               r"   r   z)_ClassScanMapperConfig._setup_inheritanceo  sR     hh__
00==T2 !O]] 
26q99)&=3D' /'..q1
2 '!+111  +1-&)H  M%+C@ ))&(+, 
 ]]5dmmD.::O+;+N+N(} ++) 
 * PAvv!2!22*,,QVV49$!//  !#'8'8'@B 
 }}!//3  $11!44@8O4LLQO'P  r$   c                    | j                   }| j                  r| j                         }ni }|r|j                  |       d|v rt        |      }|j                  |d          dD ]+  }||v s||   }| j                  j                  ||      ||<   - d|v rJ|d   }t        |t              r|j                  }|| j                  urt        j                  d|d   z        | j                  r| j                  |d<   | j                  rF|j                  dd      s3t        | j                        }|j                  }d|vrt        |j                  D 	cg c]  }	|	|j                   vr|	j"                   c}	      j%                  |j&                  xs d      x|d<   }
|
j)                  | j*                  D 	cg c]  }	|	j"                   c}	       t-        |j/                               D ]b  \  }}t        |t0        j2                        s!||j4                  v s0|j4                  |   }t        |t6              sP|g|j8                  z   ||<   d |j;                         }||d<   || _        y c c}	w c c}	w )	NrY   )version_id_colpolymorphic_onr   z:mapper inherits argument given for non-inheriting class %sconcreteFexclude_propertiesr   )rY   r   r   r   r   r)   rN   r	   r-   r   r   r`   r#   r   r   r   _columntopropertyr   unionr%  difference_updater   r   r   r   ColumnElement_propsr   r  copyr   )rq   rH   rY   r   r   vinherits_argr  r  r   r%  r  presult_mapper_argss                 r"   _prepare_mapper_argumentsz0_ClassScanMapperConfig._prepare_mapper_arguments  sr   __
--/KKy);&j)Jk,78 6 	>AKN!%!3!3!7!71!=A	>
 $&z2L,/+224==0--"-j"9; 
 ==&*mmK
#==U!C
  6dmmD.::O#;6IL "1!2!2$4$F$FF J %(;;ArBC014F #44$($9$9:qQUU: z//12 :3!#z'?'?@(///(//2A!!^4 *-		(9
1: )--/+5<(-7 ;s   !I+6I0c                     | j                  |       t        | j                  d      r*t        j                  | j                  j
                        }nt        }| j                  d || j                  | j                  fi | j                        S )N__mapper_cls__rF   )
r0  r:   r!   r   r  r2  r	   rv   r   r   r   s      r"   rx   z_ClassScanMapperConfig.map  sx    &&y1488-.88''J  J%%txx!1!1FT5E5EF
 	
r$   r>   )rl   r{   r|   r}   rr   r   r   r   r   r   r   r   r   r   r  r   r0  r   r   rx   r   r   s   @r"   ra   ra     sh    I#+J-E'N*>O-b,BC!J'R:!x-PPdI.V !OO 
r$   ra   c                     t         j                  j                  }| |   }t        |      r't	        ||j
                        s|j                  |      S |S r>   )r   rK   rL   callablerN   rM   )field_metadatar   decl_apirP   s       r"   r   r     sJ    
 ~~**H
2
3C}ZX-C-CD%%c**
r$   c                        e Zd Z ej                         Zd Zed        Zej                  d        Ze
d        Ze
d        Ze
d        Ze
d        Ze
d
d       Zej                   f fd		Z xZS )r   c                      y r>   r   ry   s     r"   rz   z$_DeferredMapperConfig._early_mapping+  s    r$   c                 "    | j                         S r>   )_clsr   s    r"   r!   z_DeferredMapperConfig.cls.  s    yy{r$   c                     t        j                  || j                        | _        | | j                  | j                  <   y r>   )weakrefref_remove_config_clsr:  _configs)rq   r-   s     r"   r!   z_DeferredMapperConfig.cls2  s,    KK(?(?@	#'dii r$   c                 <    | j                   j                  |d        y r>   )r?  r   )r!   r=  s     r"   r>  z(_DeferredMapperConfig._remove_config_cls7  s    d#r$   c                 h    t        |t              xr! t        j                  |      | j                  v S r>   )rN   rk   r<  r=  r?  r!   r-   s     r"   r   z_DeferredMapperConfig.has_cls;  s(     &$'OGKK,?3<<,OOr$   c                     t        |d      r|j                          t        j                  |dt        j                  |      z        )N_sa_raise_deferred_configzOClass %s has a deferred mapping on it.  It is not yet usable as a mapped class.)msg)r:   rD  orm_excUnmappedClassError_safe_cls_namerB  s     r"   raise_unmapped_for_clsz,_DeferredMapperConfig.raise_unmapped_for_cls@  sH    667,,.(((*1*@*@*HI
 	
r$   c                 F    | j                   t        j                  |         S r>   )r?  r<  r=  rB  s     r"   r   z$_DeferredMapperConfig.config_for_clsK  s    ||GKK/00r$   c                    | j                   j                         D cg c]  }||j                  f c}D cg c]  \  }}|t        ||      r| }}}|s|S t	        d |D              g }D ]'  |j                  fdj                  D               ) t        t        j                  ||            S c c}w c c}}w )Nc              3   8   K   | ]  }|j                   |f  y wr>   r    ).0ms     r"   	<genexpr>z9_DeferredMapperConfig.classes_for_base.<locals>.<genexpr>Z  s     A1QUUAJAs   c              3   :   K   | ]  }|v r|      f  y wr>   r   )rM  base_clsall_m_by_clsm_clss     r"   rO  z9_DeferredMapperConfig.classes_for_base.<locals>.<genexpr>^  s0      |+ h'e)<=s   )
r?  valuesr!   r1   r   extendr*   r   r   sort)	r!   rQ  rV  rN  rb   classes_for_basetuplesrR  rS  s	          @@r"   rW  z&_DeferredMapperConfig.classes_for_baseO  s     140C0C0EF1QJF
4JtX$> 
 
 ##A0@AA! 	EMM  % 	 K$$V-=>??! G
s
   B:B?c                 v    | j                   j                  | j                  d        t        t        |   |      S r>   )r?  r   r:  r   r   rx   )rq   rH   r   s     r"   rx   z_DeferredMapperConfig.mape  s.    $))T**D5i@@r$   )T)rl   r{   r|   r   rm   r?  rz   propertyr!   setterr~   r>  r   rI  r   rW  r   rx   r   r   s   @r"   r   r   (  s    t!H   	ZZ( ( $ $ P P 
 
 1 1 @ @* !OO A Ar$   r   c                 f   d| j                   v rt        |t              rFt        ||       | j                  j                  |d       | j                  j                  ||       yt        |t              ru|j                  D ]I  }t        |t              s|j                  !t        ||       | j                  j                  |d       K | j                  j                  ||       yt        |t              r| j                  j                  ||       yt        |t              rA|j                  |k7  r2t        |j                        }| j                  j                  ||       yt        j!                  | ||       | j                  j#                          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.

    rF   T)replace_existingN)r(   rN   r   r  r   r  rF   add_propertyr   r  rG   r   r   r   r   rk   __setattr___expire_memoizations)r!   r   ru   r  s       r"   _add_attributera  j  sD    s||#eV$ e,MM'''ENN''U3~.}} Lc6*syy/@(c2MM//d/KL NN''U3~.NN''U312uyyC7G $EII.ENN''U3S#u-NN//1c5)r$   c                 j   d| j                   v r|| j                   v r| j                  j                  sk| j                   |   }t        |t        t
        t        t        f      rt        d      t        j                  | |       | j                  j                          y t        j                  | |       y )NrF   z<Can't un-map individual mapped attributes on a mapped class.)r(   rF   _dispose_calledrN   r   r   r   r   NotImplementedErrorrk   __delattr__r`  )r!   r   ru   s      r"   _del_attributerf    s     	$3<<..S!FNN<NO
 &N  S#&NN//1c"r$   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)rk   r:   	TypeErrorrl   r   )rq   kwargsrb   r   s       r"   _declarative_constructorrj    sQ     :D $tQ>?O  	a#$r$   rr   c                 R    |j                   | |_         |j                  | |_        y y r>   )r   rU   )r   columns     r"   r  r    s)    zz
{{ r$   )F)8r   
__future__r   r   r<  sqlalchemy.ormr   r    r   r   rF  r	   r   r
   r   r6   r   r   descriptor_propsr   r   
interfacesr   r   rY   r   r   r   r   sqlr   
sql.schemar   r   r   r#   r+   r8   r,   rC   rI   preload_modulerQ   rV   r'   r?   rE   ra   r   r   ra  rf  rj  rl   r  r   r$   r"   <module>ru     s   / &   % *   ! - * "   / - & $ &        ("J G
 ./@ 0@
=F =@A!m A!Hz
] z
z ./	 0	?A2 ?AD*B#*$& %/  !r$   