
    [h                    L   d 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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. erBdd&l/m0Z0 dd'lm1Z1 dd(l2m3Z3 dd)l4m5Z5 dd*l6m7Z7 dd+l8m9Z9 dd,l:m;Z; dd-l<m=Z= dd.l>m?Z? dd/l#m@Z@ dd0l'mAZA  ed1e2          ZB ed3eC2          ZD ejE                    ZFeeGeeeGef                  f         ZHd{d:ZI ejJ        d;          d|d=            ZK ejL        d>d?@           ejJ        d;          	 d|d}dH                        ZMd~dRZNdSdSdSdSdTej.        ej.        dTdTdU	ddhZOdSdSdSdSdSdTej.        ej.        dTdTdi
ddnZP	 	 	 	 	 	 ddoZQ	 	 	 ddpZRdq ZS	 	 	 	 ddrZTds ZUdt ZVdu ZWdv ZXdw ZY G dx dy          ZZdz Z[dSS )zprivate module containing functions used to convert database
rows into object instances and associated state.

the functions here are called primarily by Query, Mapper,
as well as some of the attribute loading strategies.

    )annotations)Any)Dict)Iterable)List)Mapping)Optional)Sequence)Tuple)TYPE_CHECKING)TypeVar)Union   )
attributes)exc)path_registry)_DEFER_FOR_STATE)_RAISE_FOR_STATE)_SET_DEFERRED_EXPIRED)PassiveFlag)FromStatement)ORMCompileState)QueryContext)	_none_set)	state_str   )util)result_tuple)ChunkedIteratorResult)FrozenResult)SimpleResultMetaData)select)ForUpdateArg)LABEL_STYLE_TABLENAME_PLUS_COL)SelectState)
EMPTY_DICT)_IdentityKeyType)LoaderCallableStatus)	ORMOption)Mapper)Query)Session)InstanceState)CursorResult)_ExecuteOptions)Result)Select_T)bound_OcursorCursorResult[Any]contextr   returnResult[Any]c                \    t                      _        j        rdj        j        _        n	di _        j        }|j        }j        j         o)t          |j	                  dk    o|j	        d         j
        	 t          t           fdj        j	        D                        \  }}j        r"j        sj        rt!          j        d          nO# t$          $ rB t'          j                    5                                    ddd           n# 1 swxY w Y   Y nw xY wd ddd	d
fdj        j	        D             }t-          |||          } fd}j                            dd          rt           |d                    fd}t3          ||  j        j                  }	|	j                            t=          |                    |	_        j        j        rd }
d|
f|	_         j        r|	                    j                   |	S )a  Return a :class:`.Result` given an ORM query context.

    :param cursor: a :class:`.CursorResult`, generated by a statement
     which came from :class:`.ORMCompileState`

    :param context: a :class:`.QueryContext` object

    :return: a :class:`.Result` object representing ORM results

    .. versionchanged:: 1.4 The instances() function now uses
       :class:`.Result` objects and has an all new interface.

    FTr   r   c                <    g | ]}|                               S  )row_processor).0query_entityr7   r5   s     e/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/orm/loading.py
<listcomp>zinstances.<locals>.<listcomp>q   s9       $ !..w??      zCan't use yield_per with eager loaders that require uniquing or row buffering, e.g. joinedload() against collections or subqueryload().  Consider the selectinload() strategy for better flexibility in loading objects.Nc                *    t          j        d          )Nz@Can't use the ORM yield_per feature in conjunction with unique()sa_excInvalidRequestError)entrys    r@   
_no_uniquezinstances.<locals>._no_unique   s    (N
 
 	
rB   legacy	uncertainc               @     |s fd}|S st           S dfd}|S )Nc                t    r	 t          |           S #  Y nxY wt          j        ddrdnd d          )Nz=Can't apply uniqueness to row tuple containing value of type z; z the values returned appear to bezthis datatype producesz non-hashable values)hashrE   rF   )objdatatyperK   s    r@   goz,instances.<locals>._not_hashable.<locals>.go   ss     #Cyy(0-&- - %6::5	- - -      Fc                X    s	 t          |           S #  Y nxY wdt          |           S )NT)rN   id)rO   _use_ids    r@   rQ   z,instances.<locals>._not_hashable.<locals>.go   s>      	##Cyy(
 #G#wwrR   )rT   )rP   rJ   rK   rQ   rU   s   ` ` @r@   _not_hashablez instances.<locals>._not_hashable   sd     (	       I 	IG      IrB   c                    g | ]W}j         rnK|j        s5|j        s|j        r' |j        j        j        j        |j                   n|j        rt          ndXS )rI   N)		yield_peruse_id_for_hash_non_hashable_value_null_column_typecolumntypeload_options_legacy_uniquingrT   )r>   entrH   rV   r7   s     r@   rA   zinstances.<locals>.<listcomp>   s       "   JJ +	9 0	9 584I	9JO"/@!3    .8RRD  rB   )_unique_filtersc              3  t  K   	 | }i 	_         |r
                    |          }|sd S n
                                }rd         fd|D             }nfd|D             }r|r&t          	j                                                  }	j        rdt          	j                                                  }	j                                         |D ]\  }}|                    	|           	j        d|r3	j                                         	j                            |           |V  |sd S 4)NTr   c                &    g | ]} |          S r<   r<   )r>   rowprocs     r@   rA   z-instances.<locals>.chunks.<locals>.<listcomp>   s!    333cS		333rB   c                H    g | ]t          fd D                       S )c                &    g | ]} |          S r<   r<   )r>   re   rd   s     r@   rA   z8instances.<locals>.chunks.<locals>.<listcomp>.<listcomp>   s!    9994499999rB   )tuple)r>   rd   processs    @r@   rA   z-instances.<locals>.chunks.<locals>.<listcomp>   sD       ?BE9999999::  rB   )	partials	fetchmany_raw_all_rowslistpost_load_pathsitemsclearinvokeupdate)sizerX   fetchrowstop_level_post_loads
post_loadspath	post_loadre   r7   r5   is_top_levelri   single_entitys           @r@   chunkszinstances.<locals>.chunks   s     /	I!G /((33 E ,,.. qz3333U333   FK    I  ,0/5577, ,( - 8!%g&=&C&C&E&E!F!FJ+11333+5 8 8i!(($7777	 - 8  I+11333+223GHHHJJJ _/	rB   prebuffer_rowsc                "    t                    S N)iter)rs   _prebuffereds    r@   r|   zinstances.<locals>.chunks  s    %%%rB   )source_supports_scalarsrawdynamic_yield_per)filteredis_single_entityc                *    t          j        d          )Nz~The unique() method must be invoked on this Result, as it contains results that include joined eager loads against collectionsrD   )rO   s    r@   require_uniquez!instances.<locals>.require_unique  s    ,&  rB   )!
_new_runidrunidtop_level_contextrn   compile_state_has_mapper_entitiesr^   _only_return_tupleslen	_entitiessupports_single_entityrm   ziprX   loaders_require_bufferingloaders_require_uniquingrE   rF   	Exceptionr   safe_reraisecloser!   execution_optionsgetr   r7   _is_server_side_attributesuniondictmulti_row_eager_loaders_unique_filter_state)r5   r7   r   r   labelsextraunique_filtersrow_metadatar|   resultr   rH   rV   r   rz   ri   r{   s   ``         @@@@@@r@   	instancesr   N   sd    LLGM  %")";"K"$)M1H 44 	>'((A-	>#A&= #'    (/(=(G  $
 $
 &%  		-		/		 ,=         	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 
 

 +05 ) ) ) ) )V     " (2#  N( (~  L0 0 0 0 0 0 0 0 0d  $$%5u== & FF4LL))	& 	& 	& 	& 	& # - .8  F  +11h??? F
 4 	=	 	 	 (,^&<# ,*+++Ms7   AC! !D->DD-D#	#D-&D#	'D-,D-zsqlalchemy.orm.contextTc           	        t           j        j        |r|                                  j                            |d          }| j        }	 d| _        fdt          |j                  D             }d |j        D             }t          |d |j        D                       }g }	|
                                D ]z}
|D ]W}|
|         M|                     t          j        |
|                   t          j        |
|                   |i i           |
|<   X|	                     ||
                     {|                    |	          || _        S # || _        w xY w)az  Merge a :class:`_engine.FrozenResult` back into a :class:`_orm.Session`,
    returning a new :class:`_engine.Result` object with :term:`persistent`
    objects.

    See the section :ref:`do_orm_execute_re_executing` for an example.

    .. seealso::

        :ref:`do_orm_execute_re_executing`

        :meth:`_engine.Result.freeze`

        :class:`_engine.FrozenResult`

    FrJ   c                D    g | ]\  }}t          |j                  |S r<   
isinstance_MapperEntityr>   iequerycontexts      r@   rA   z'merge_frozen_result.<locals>.<listcomp>I  s@     
 
 
1!\788

 
 
rB   c                    g | ]	}|j         
S r<   _label_namer>   r`   s     r@   rA   z'merge_frozen_result.<locals>.<listcomp>N  s    999C999rB   c                    g | ]	}|j         
S r<   _extra_entitiesr   s     r@   rA   z'merge_frozen_result.<locals>.<listcomp>Q  s    @@@33&@@@rB   Nload
_recursive_resolve_conflict_map)r   	preloadedorm_context
_autoflushORMSelectCompileState_create_entities_collection	autoflush	enumerater   r   rewrite_rows_merger   instance_stateinstance_dictappendwith_new_rows)session	statementfrozen_resultr   ctxr   mapped_entitieskeyskeyed_tupler   newrowr   r   s               @r@   merge_frozen_resultr   +  s   " >-L 

,
H
H% I  C !I&!
 
 
 
!#-00
 
 

 :93=999"@@#-@@@
 
 #0022 	/ 	/F$  !9( '"1&)<<"0;;!#%.0 !/ ! !F1I MM++f--....**622%I%%%%s   C<E 	Ez:func:`_orm.merge_result`zyThe function as well as the method on :class:`_orm.Query` is superseded by the :func:`_orm.merge_frozen_result` function.)alternativequery
Query[Any]iterator>Union[FrozenResult, Iterable[Sequence[Any]], Iterable[object]]r   bool"Union[FrozenResult, Iterable[Any]]c           	        t           j        j        | j        r                                 t          |t                    r|}t          |j                  }nd}j	        
                    | d          }j        }	 d_        | ot          |j                  dk    }|r@t          |j        d         j                  rfd|D             }nt          |          }nވfdt!          |j                  D             }g }d	 |j        D             }	t#          |	d
 |j        D                       }
|D ]}t          |          }|D ]W}||         M                    t'          j        ||                   t'          j        ||                   i i           ||<   X|                     |
|                     |r|                    |          |_        S t          |          |_        S # |_        w xY w)zMerge a result into the given :class:`.Query` object's Session.

    See :meth:`_orm.Query.merge_result` for top-level documentation on this
    function.

    NTr   Fr   r   c           	         g | ]@}                     t          j        |          t          j        |          i i            AS )r   )r   r   r   r   )r>   instancer   r   s     r@   rA   z merge_result.<locals>.<listcomp>  sc     	 	 	 ! NN"1(;;"0::!#%.0 #  	 	 	rB   c                D    g | ]\  }}t          |j                  |S r<   r   r   s      r@   rA   z merge_result.<locals>.<listcomp>  s@       Aqa!;<<  rB   c                    g | ]	}|j         
S r<   r   r   s     r@   rA   z merge_result.<locals>.<listcomp>  s    ===CO===rB   c                    g | ]	}|j         
S r<   r   r   s     r@   rA   z merge_result.<locals>.<listcomp>  s    DDDss*DDDrB   r   )r   r   r   r   r   r   r    r   datar   r   r   r   r   r   rm   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r{   r   r   r   r   rd   r   r   r   r   s     `           @@r@   merge_resultr   g  s   $ >-LmG  (L))  *++

,
H
Hd I  C !I1&!))Ec#-.@.@A.E &	3#-*L,FGG (	 	 	 	 	 %-	 	 	 h   %cm44  O
 F==s}===D&DDcmDDD K   3 3c(  Aay,$+NN&5fQi@@&4VAY??!%')24 %3 % %q	 kk&112222 	  ..v66 & <<%I%%%%s   EG: $G: :	Hr   r,   mapper
Mapper[_O]key_IdentityKeyType[_O]passiver   )Union[LoaderCallableStatus, Optional[_O]]c                   | j                             |          }|t          j        |          }|j        r&|j                            |          st          j        S |j        rp|t          j	        z  st          j
        S |t          j        z  s|S 	 |                    ||           n,# t          j        $ r |                     |g           Y dS w xY w|S dS )zqLook up the given key in the given session's identity map,
    check the object for expired state if found.

    N)identity_mapr   r   r   inheritsr   isaPASSIVE_CLASS_MISMATCHexpiredSQL_OKPASSIVE_NO_RESULTRELATED_OBJECT_OK_load_expiredorm_excObjectDeletedError_remove_newly_deleted)r   r   r   r   r   states         r@   get_from_identityr     s     #'',,H)(33? 	55<#3#3F#;#; 	544 = 	Z..  !33z;;  
  ##E73333-   --ug666tt ts   B) )%CCNF)	r^   refresh_statewith_for_updateonly_load_propsno_autoflushbind_argumentsr   require_pk_colsis_user_refreshr   Union[Select, FromStatement]Optional[_IdentityKeyType]r^   Optional[Sequence[ORMOption]]r   Optional[InstanceState[Any]]r   Optional[ForUpdateArg]r   Optional[Iterable[str]]r   r   Mapping[str, Any]r   r/   r   r   c       	        h    ||d         }|d         }ndx}}t          | ||||||||||	|
|          S )z.Load the given identity key from the database.Nr   r   
r^   r   r   r   identity_tokenr   r   r   r   r   )load_on_pk_identity)r   r   r   r^   r   r   r   r   r   r   r   r   identr  s                 r@   load_on_identr    se      AQ!%%!#''%!%+''   rB   r  primary_key_identityOptional[Tuple[Any, ...]]r  Optional[Any]c       
   	        |}|                                 }|j        rJ |t          j        }|j        t
          j        u rt          j        }n|j        }||j	        d         }|j
        \  }d|v rjfdt          |j        |          D             }t          j        ||          }t          |          t          |          k    rt!          j        d           t          j        |ddi          f|_        fdt          ||j                  D             }nd}|
d}||_        n|j        d}|j        |_        nd}|r|rst+          j        d	          j        j        }fd
|                    |          D             }|r t+          j        d| dj         d          j        j        }|D ]&}||         j        r|                    |          } n'r'j        r |dj        j         iz  } |j!        j         }tE          ||||||          \  }}||_        d|_#        |r|ddiz  }t           j$        %                    |
d|i          }
| &                    |||
|	          '                                (                                }	 |)                                S # tT          j+        $ r Y dS w xY w)z6Load the given primary key identity from the database.Nplugin_subjectc                4    h | ]\  }}||         j         S r   r   )r>   colvalue_get_paramss      r@   	<setcomp>z&load_on_pk_identity.<locals>.<setcomp>8  s2       C= C $ ==rB   zofully NULL primary key identity cannot load any object.  This condition may raise an error in a future release.
_orm_adaptTc                2    i | ]\  }}|         j         |S r<   r  )r>   id_valprimary_keyr  s      r@   
<dictcomp>z'load_on_pk_identity.<locals>.<dictcomp>K  s7     
 
 
# $(&
 
 
rB   Fz9refresh_state is required when require_pk_cols is presentc                \    h | ](}j         |         j                                        &|)S r<   )attrshistoryhas_changes)r>   r   r   s     r@   r  z&load_on_pk_identity.<locals>.<setcomp>d  sF     
 
 
"3'/;;==

 
 
rB   z7Please flush pending primary key changes on attributes z for mapper z! before proceeding with a refresh_current_path)version_checkr   r   r  r   r   _sa_orm_load_options)paramsr   r   ),_clone_is_lambda_elementr   default_load_options_compile_optionsr%   default_select_compile_optionsr   default_compile_options_propagate_attrs_get_clauser   r  sql_utiladapt_criterion_to_nullr   r   warn_deep_annotate_where_criteria_for_update_argrE   ArgumentErrorr   _primary_key_propkeys
differencerF   _props_is_relationshipr   r^   	load_pathparentoptions_set_get_options	_order_byr&   
merge_withexecuteuniquescalarsoner   NoResultFound)r   r   r	  r^   r   r   r   r  r   r   r   r   r   r   qcompile_optionsr   r(  nonesr   r  refresh_state_prokeysr  mppnew_compile_optionsr   r  s       `                      @r@   r  r    s   $ EA#####8 	"5	6 	6 *A#4''(89%+%7"k '''   "%f&8:N"O"O  E #:;NNK5zzS!56666	   #K,1EFF

 
 
 
'*$f&8( (
 
 
 "+			*!1 ?? ? 	&K   !. 4 J
 
 
 
,77HH
 
 

  	 ,,, ,,9,@, , ,  D !(  	 	A!u% "7"="=o"N"N  33 3O]-D-KLLAI}12(8#'#%') ) )% -AAK .u--222LA  	/)	 	 	
 	
 
	 zz||    tts   J. .K Kc                    i }i }	|r||	d<   |r||	d<   |r
||	d<   d|d<   |rt          |          |d<   |r||	d<   |r||	d<   |	r||	z  }|r| |z  } | |fS )	N_version_check_populate_existing_refresh_stateT_for_refresh_state_only_load_props_identity_token_is_user_refresh)	frozenset)
compile_optload_optpopulate_existingr  r   r   r  r   r@  r^   s
             r@   r7  r7    s     OL 7)6%& ?->)* 5)6%&04,- I.7.H.H*+ 9*8&' ;+:'( !L  '&  rB   c	           	     ~   |r|                     |          }
n|j        }
i }|                    | j        d|           |ot	          |          dk    o|d         j        }|
D ]$}|r
|j        |vr |j        | |||f||||d|	 %|2||j        ur+|r|j	        |         }n|}|
                    |           d S d S d S )Nmemoized_setupsr   )r   column_collectionmemoized_populatorscheck_for_adapt)_iterate_polymorphic_properties_polymorphic_propertiessetr   r   is_aliased_classr   setuppolymorphic_oncolumnsr   )r   r   r?   rx   adapterrU  with_polymorphicr   polymorphic_discriminatorkwpoly_propertiesquick_populatorsrW  r  pds                  r@   _setup_entity_queryrf    s<     9 @@
 
 !8HH]%'8:JKKK N#d))q.NT"X5NO  
 
 	uy??	
	

 ,/ 0+
	
 
	
 
	
 
	
 
	
 
	
 	"-%V-BBB 	+!:;BB*B  $$$$$ 	.-BBrB   c                P    t          j        dt          |           d           d S )NzLoading context for aW   has changed within a load/refresh handler, suggesting a row refresh operation took place. If this event handler is expected to be emitting row refresh operations within an existing load or refresh operation, set restore_load_context=True when establishing the listener to ensure the context remains unchanged when the event handler completes.)r   r+  r   )r   s    r@   _warn_for_runid_changedrh    s:    II !*% 0 0 0 0	3    rB   c
                |
   !"#$%&'()*+,-./01234 j          j        }
df}|                    |
j        |d          }|j        }!|                    fdD                       }|                    j        dt                    }g }g g g g g g d}-j        }rfd|D             }|                    |          ,nd,||,d}|D ]7}||v r||         }|t          u r(|d         
                    |j        |j        f           A|t          u r#|d	         
                    |j        d
f           m|t          u r(|d         
                    |j        |j        f           d}r%j        |         }||                    |d
          }|s|                    |d
          }|r$|d         
                    |j        |f           |                    | |||           "|
                    |           9|                    |
j        ||           |d         }d |                                D             *|d         D ]}|                    | ||*           j        -j        j        j        rj        j        |z   n|&j        j        2j        pj        )t9          j        j        j                  %t9          j        j        j                   .t9          j        j        j!                  ((rj        j        j!        't          j"        #t          j#        "j        j$        1j%        0j&        !j'        33r0j(        }|%rj        |         }|                    |          4nd4s|	d|j        f}|j        v r/j        |         j)        dk    rj        |         j*        d         }nd}+                    ||	          }|r||	urJ |j,        r-g }|}|r&||	ur"|
                    |           |j-        }|r||	u"n|g}|D ]V}t\          /                    &|          rta          |||	|          }t\          1                    &|j2        |||           Wt\          3                    &          +rj        //4                              /n
d/|d         ,j5        rtl          j7        $ntl          j        $ !"#$%&'()*+,-./01234fd}j8        r#|	s!s !$,fd}ts          || ||||	  	        }|S )z]Produce a mapper level row processor callable
    which processes rows into mapped instances.gettersNc              3  2   K   | ]}j         |         V  d S r   )r2  )r>   kr   s     r@   	<genexpr>z&_instance_processor.<locals>.<genexpr>U  s;       ' '%&a ' ' ' ' ' 'rB   rS  )newquickdeferredexpireexistingeagerc                *    g | ]}j         |         S r<   )r^  )r>   cr_  s     r@   rA   z'_instance_processor.<locals>.<listcomp>l  s     ???!7?1-???rB   )cached_populatorstodoprimary_key_getterrn  rq  Fro  rv  c                4    i | ]\  }}|t          |          S r<   )rm   )r>   r   r  s      r@   r  z'_instance_processor.<locals>.<dictcomp>  s$    OOOzsE#tE{{OOOrB   rw  loader))selectinload_polymorphicTentitiesrx  c                   r1}|                                 } |          }|j         k    }d}d}n؉ |           f}"                    |          }|@ |          } |          }|j         k    }| }d}#r$r|st          ||| $           ns |d                   rd S d}d}d}j                                        } |          } |          }||_        |_        !|_        "	                    ||           }|u rd}|s|r0|rs|s|_
        |_        t          | |||||	  	         |r|j        }	|rjr:|j        j                            |           |j        |	k    rt!          |           r+ j        |           |j        |	k    rt!          |           n=r;|j        j                            |           |j         k    rt!          |           |s|j        r1rr|                    |           n|                    |"           r                    |d           n|j        }
|j        v}|r
|
sd         rrt3          | ||||
          }|rZrB|j        }	|j        j                            ||           |j        |	k    rt!          |           |                    ||           rj        r                    |d           |S )NTFr   rs  )rO   r   r   _validate_version_idclass_managernew_instancer   r  
session_id_add_unpresentr^   r4  _populate_fullmanagerdispatchr   rh  r   refreshmodified_commit_commit_all	add_stateunloadedrj   _populate_partialinvoke_all_eagers)%rd   r   r   dict_isnewcurrentloadloaded_instanceidentitykeyeffective_populate_existingexisting_runidr  to_loadr7   identity_classr  r   r   is_not_primary_keyload_evtr4  loaded_as_persistentr   r   persistent_evtrQ  
populatorsry   rx  propagated_loader_optionsrefresh_evtrefresh_identity_keyr   r   r  session_identity_mapr  version_id_getters%               r@   	_instancez&_instance_processor.<locals>._instance+  s3    6	H!Eyy{{H!M(++EK5(EK#OO
 ""3''K ,//<<H#&x00%h//u,"'i"'  %6 { (uc3D   &%k!n55  4""&!/<<>>%h//&x00'	'5$ $. $33E;GGG&7#E!!*.'
  [	25 [	2  ,),1L, &?""++
 
 
  G "'" 7 ;.33E7CCC ;.883E:::% ;,,W_eDDD ;.883E:::  7M*22w   {e++/666. G%. G$ G Ge_====))%1EFFF 1##E4000 ~H!11E 2H 2
7(; 2
 ,	 	  2" ;)..66ugwOOO ;.883E:::MM%111 2W6 2##E5111rB   c                J     |           f} |d                   s|S d S )Nr   r<   )rd   r  r  r  r  rx  s     r@   ensure_no_pkz)_instance_processor.<locals>.ensure_no_pk  sB    ""3''K
 &%k!n55 ""trB   ):_identity_classr   r   r   	_prop_setintersectionr&   r  _tuple_getterr   r   r   _deferred_column_loaderr   r   _raise_column_loaderr^  _gettercreate_row_processorrZ  ro   r  current_pathrx   r   r   rQ  always_refreshr   r  r  r   r  r  r   r   hash_keyr   r  r  version_id_colstrategy
local_opts_should_selectin_load	is_mapperr   PostLoadpath_exists_load_subclass_via_incallable_for_pathr   for_context_identity_key_from_stateallow_partial_pksr   
issupersetpolymorphic_map_decorate_polymorphic_switch)5r?   r   r7   r   rx   r_  r   r   ra  _polymorphic_fromr   
getter_keyrj  propsrd  rw  rv  pk_colspropr  getteradapted_colr  r   option_entitiesselectin_load_via_load_supers_endmost_mapper_selectinload_entity	callable_r  r  r  r  r   r   r  r  r4  r  r  rQ  r  ry   rx  r  r  r  r   r  r  r  r  s5    ``  ```                        @@@@@@@@@@@@@@@@@@@@@r@   _instance_processorr  +  s   * +N)M V$Jhh}/TBBG  &&& ' ' ' '*9' ' '  E  88 1:
 
 
 
  (G @????w???!'!5!5g!>!>!% "3"4
 

  @	" @	"D'''&t,***%e,334#?@    111 &h/66%7HIIII,,,%e,334#<=    "F H* '.oc&:&2%+^^K%G%GF! <!'U!;!; )'29948V:LMMMM
 11#( ""#-    D!!!!):w??? 34OO5F5L5L5N5NOOOJ 
 
!!\4*	
 	
 	
 	
 !( A  -2	*T11  #?71JV5JF(1677Hv+4<==K'/2GHHN M&7L.N,M)JME+N)M %.% A!(!@ &~ > > $ 3.:#'$$$);C)@)I N
 *
 *
 &05@LOO"O"88
 

  %	!2:K!K!K #*** * 
3!"3#?'/@@@ ''888&5&>O	 $?'/@@@
 !22(4  $''Y(<   1(%# 	 **(/((    $$WiIII ;,0' $*#B#B$ $   $$%9: 4&1&3^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^@  
&7 
 
		 		 		 		 		 		 		 		 1%

 

	 rB   c                   	
 |j         
|j         }|j        d u}t          
j        j                  dk    |j        s|r
                    ||          \  	n
j        \  		
fd}|S )Nr   c                <   sfd|D             }|sd S | j         }|j        r+                    |          }
                    |          }n}
}|f|j        z   |fz   } j        | }	| j        j        |	_        |	xj        d|j        iz  c_        | j        r|		                    d          }	| j
                            |	t          fd|D                                                                                                                                  d S )Nc                R    g | ]#\  }}|j                                       ||f$S r<   )r   +_would_selectin_load_only_from_given_mapper)r>   svr   s      r@   rA   z:_load_subclass_via_in.<locals>.do_load.<locals>.<listcomp>  sG       Aq8GGOOA  rB   r  T)rQ  c                Z    g | ]'\  }}r|j         d          d         n|j         d          (S )r   r   r  )r>   r   
load_attrszero_idxs      r@   rA   z:_load_subclass_via_in.<locals>.do_load.<locals>.<listcomp>#  sF       )z (0AEIaLOOUYq\  rB   )primary_keys)r   r5  _prepend_path_with_optionsr6  r   r&  r$  rQ  r   r   r:  r   r;  r<  all)r7   rx   states	load_onlyeffective_entity
orig_queryenable_opt_lcldisable_opt_lclr6  q2disable_opt
enable_optr   r  r?  r  s             r@   do_loadz&_load_subclass_via_in.<locals>.do_load  sk    	   "  F  ]
; 	*'55d;;N)77==OO'N)O
 88O;MM 	 QY %3K
==$ 	>%%%==B   -3    	
 	
 &((7799SSUUUUUrB   )r   r   r   base_mapperr  r[  _subclass_load_via_in_subclass_load_via_in_mapper)r7   rx   entitypolymorphic_fromr  polymorphic_from_mappernot_against_basemostr  r  r  r   r?  r  s       `   @@@@@r@   r  r    s     ]F
 /52;4G6%122a7H I"6 I%+%A%A$&
 &
":{{ &,%H":{,# ,# ,# ,# ,# ,# ,# ,# ,# ,#\ NrB   c	                B   |r| j         |_         |d         D ]\  }	}
 |
|          ||	<   |rA|d         D ]7\  }	}|                    |	d            |r|j                            |	           8n*|d         D ]!\  }	}|r|j                            |	           "|d         D ]\  }	} ||||           d S ||j        k    rD||_        |d         D ]\  }	}
|	|vr |
|          ||	<   |d         D ]\  }	} ||||           d S |d         D ]\  }	} ||||           d S )Nro  rq  rn  rr  )r   popexpired_attributesaddr4  )r7   rd   r   r  r  r4  r  rQ  r  r   r  set_callable	populators                r@   r  r  -  s     ()m%g. 	% 	%KCE#JJ 	6%/%9 6 6!\		#t$$$ 6,005556
 &0%9 6 6!\ 6,00555(/ 	) 	)NCIeUC((((	) 	) 
eo	%	% $ &g. 	) 	)KC%#VC[[c
 )4 	) 	)NCIeUC((((	) 	) )4 	) 	)NCIeUC((((	) 	)rB   c                   |sO|r |d         D ]\  }}	||v r |	|          ||<   | j         |         }
|d         D ]\  }}||
v r ||||           n|}
|
| j         |<   |d         D ]\  }}	||
v r |	|          ||<   |d         D ];\  }}||
v r2|                    |d            |r|j                            |           <|d         D ]\  }}||
v r ||||           |d         D ]\  }}||vr ||||           |
S )Nro  rr  rq  rn  rs  )rj   r  r  r  )r7   rd   r   r  r  r4  r  r  r   r  r  r  r  s                r@   r  r  f  s     - 	-)'2 - -V(??!'E#J"5)(4 	- 	-NCg~~	%,,,	- ")%g. 	) 	)KCg~~#VC[[c
!+H!5 	6 	6Cg~~		#t$$$ 6,00555(/ 	- 	-NCg~~	%,,,$W- ) )YhIeUC(((NrB   c           
         |                      ||| j                   ||          k    rNt          j        dt	          |          d|                      ||| j                  d ||          d          d S )Nz
Instance 'z' has version id 'z3' which does not match database-loaded version id 'z'.)_get_state_attr_by_columnr  r   StaleDataErrorr   )r   r   r  rd   r  s        r@   r~  r~    s    ''uf+ 	  $$ %    005&"7    s

 

 
	
 rB   c	                     ||nj          S rj                 fd}	t          j        |	                                         fd}
|
S )Nc           	         	 j         |          }|u rd S |                              sdS t          |          S # t          $ r t	          d| z            w xY w)NF)r  z*No such polymorphic_identity %r is defined)r  r   r  KeyErrorAssertionError)discriminator
sub_mapperr_  r7   r   rx   r?   r   s     r@   configure_subclass_mapperz?_decorate_polymorphic_switch.<locals>.configure_subclass_mapper  s    	/>J V##t^^F++ u&"(     	 	 	 <}L  	s   A A c           
     .    |           }|^|         }|r ||           S |du r: |           }|r+t          j        d|d	dj        |         d          d S  |           S  |           }|rt          j        d|d	d          d S )NFzRow with identity key zG can't be loaded into an object; the polymorphic discriminator column 'z' refers to z-, which is not a sub-mapper of the requested z	' is NULL)rE   rF   r  )
rd   r  r  r  r  r  instance_fnr   polymorphic_instancesr]  s
       r@   polymorphic_instancez:_decorate_polymorphic_switch.<locals>.polymorphic_instance  s    s$-m<I ( y~~%e##*l3//   44 (KK*NN"2=AAA"F	    4"{3'''&,s++K 00 *kk>>>;   trB   )r]  r^  r   PopulateDictr  )r  r7   r?   r   r   rx   ra  r_  r  r  r  r  r  r]  s   `````` ``  @@@r@   r  r    s     !,2. 9 8         . !-.GHH^^N++F$ $ $ $ $ $ $ $ $ $L  rB   c                  j    e Zd ZdZdZd Zd Zd Zed             Z	ed             Z
ed             Zd	S )
r  z4Track loaders and states for "post load" operations.)loadersr  	load_keysc                R    i | _         t          j                    | _        d | _        d S r   )r  r   OrderedDictr  r  )selfs    r@   __init__zPostLoad.__init__  s$    &((rB   c                    || j         |<   d S r   )r  )r  r   	overwrites      r@   r  zPostLoad.add_state  s    
 'ErB   c                F  	 | j         sd S t          j                            |          }| j                                        D ]D\  }}	}}}	fd| j                                         D             }|r ||||| j        g|R i | E| j                                          d S )Nc                \    g | ](\  }}|j         j                                      $||f)S r<   )r  r   r   )r>   r   r  limit_to_mappers      r@   rA   z#PostLoad.invoke.<locals>.<listcomp>  sK       $E9='++O<<	"  rB   )	r  r   PathRegistrycoercer  valuesro   r  rp   )
r  r7   rx   effective_contexttokenrz  argrb  r  r  s
            @r@   rq   zPostLoad.invoke  s    { 	F)0066 \  ""	 	 
   (,(9(9(;(;  F
  %tVT^FI  MO   	rB   c                Z    |j                             |j                  }|	|r||_        |S r   )rn   r   rx   r  )clsr7   rx   r   pls        r@   r  zPostLoad.for_context  s/    $((33>o>*BL	rB   c                P    |j         |j        v o||j        |j                  j        v S r   )rx   rn   r  )r  r7   rx   r   s       r@   r  zPostLoad.path_exists$  s1     I00 Bw.ty9AA	
rB   c                    |j         |j        v r|j        |j                  }nt                      x}|j        |j         <   ||||||f|j        |<   d S r   )rx   rn   r  r  )	r  r7   rx   r  r  loader_callabler  rb  r  s	            r@   r  zPostLoad.callable_for_path+  sc     9///(3BB6>jj@B(3

5rB   N)__name__
__module____qualname____doc__	__slots__r  r  rq   classmethodr  r  r  r<   rB   r@   r  r    s        >>0I  
' ' '  .   [ 
 
 [
 
 
 [
 
 
rB   r  c                    |j         }|s$t          j        dt          |          z            t	          |t
          j        z            }|r,|                     j        	                                          } j
        rD j        s=                     ||          }|%t           |          }t          ||d|||          S t	          |j                  }|r|j        }	nf fd j        D             }
|j                            |
          r$t%          j        dt          |          z                                 |          }	t+          j        |	          r j        rt+          j        |	          r$t3          j        dt          |                     dS t          |t7                                         t:                    |	|||          }|r|t          j        |          dS dS )z4initiate a column-based attribute refresh operation.zQInstance %s is not bound to a Session; attribute refresh operation cannot proceedN)r   r   r   c                4    g | ]}j         |         j        S r<   )_columntopropertyr   )r>   r  r   s     r@   rA   z*load_scalar_attributes.<locals>.<listcomp>p  s1     
 
 
25F$S)-
 
 
rB   z_Instance %s cannot be refreshed - it's not  persistent and does not contain a full primary key.zwInstance %s to be refreshed doesn't contain a full primary key - can't be refreshed (and shouldn't be expired, either).)r   r   r   )r   r   DetachedInstanceErrorr   r   r   NO_AUTOFLUSHr  r  r   r   concrete_optimized_get_statementr   r  r   r  r  rE   rF   r  r   issubsetr  r  r   warn_limitedr"   set_label_styler$   r   )r   r   attribute_namesr   r   r   r   stmthas_keyidentity_keypk_attrsr   s   `           r@   load_scalar_attributesr-  =  s]    mG 
+9<Ee<L<LN
 
 	

 *"99::L  L)66v|7H7H7J7JKK v  33E?KK	  !33D  /#)    59ooG >y
 
 
 
9?9K
 
 
 #00:: 	,.09%0@0@A  
 66u== 	<((	171I			l	+	+	 	2 e		
 	
 	
 	v&&'EFF'!  F  06>(///0 0>>rB   )r5   r6   r7   r   r8   r9   )T)r   r   r   r   r   r   r8   r   )
r   r,   r   r   r   r   r   r   r8   r   )r   r,   r   r   r   r   r^   r   r   r   r   r   r   r  r   r   r   r  r   r/   r   r   r   r   )r   r,   r   r   r	  r
  r^   r   r   r   r   r   r   r  r  r  r   r   r   r  r   r/   r   r   r   r   )NNNNNN)NNN)NNNN)\r  
__future__r   typingr   r   r   r   r   r	   r
   r   r   r   r    r   r   r   r   baser   r   r   r   r7   r   r   r   r   r   r   rE   enginer   engine.resultr   r    r!   sqlr"   r)  sql.selectabler#   r$   r%   r&   _typingr'   r(   
interfacesr)   r   r*   r   r+   r   r,   r   r-   engine.cursorr.   engine.interfacesr/   r0   r1   r2   objectr4   counterr   str_PopulatorDictr   preload_moduler   became_legacy_20r   r   r  r  r7  rf  rh  r  r  r  r  r~  r  r  r-  r<   rB   r@   <module>r@     s/    # " " " " "                                                                                           " " " " " " " " " " " " ' ' ' ' ' '       " " " " " " $ $ $ $ $ $ ! ! ! ! ! !                         ! ! ! ! ! ! 1 1 1 1 1 1 ( ( ( ( ( ( 0 0 0 0 0 0       " " " " " " ) ) ) ) ) ) ; ; ; ; ; ; ( ( ( ( ( (       ))))))******%%%%%%      $$$$$$,,,,,,333333&&&&&&WTWT   T\^^
 c4c3h001Z Z Z Zz -..8& 8& 8& /.8&v F  
 -.. Q& Q& Q& Q& /. Q&h# # # #V 3726.2/3(,)-!!$ $ $ $ $ $X 3726.2/3$((,)-!!u u u u u uv ! ! ! !R "4% 4% 4% 4%n	 	 	& "z z z zzB B BJ3) 3) 3)r" " "J
 
 
"V  V  V rE
 E
 E
 E
 E
 E
 E
 E
PU0 U0 U0 U0 U0rB   