
    	hx                    X   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/ dd&lm0Z0 erBdd'l1m2Z2 dd(lm3Z3 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@mAZA dd0l%mBZB dd1l)mCZC  ed2e3          ZD ed4eE3          ZF ejG                    ZHeeIeeeIef                  f         ZJd|d;ZK ejL        d<          d}d>            ZM ejN        d?d@A           ejL        d<          	 d}d~dI                        ZOddSZPdTdTdTdTdUej0        ej0        dUdUdV	ddiZQdTdTdTdTdTdUej0        ej0        dUdUdj
ddoZR	 	 	 	 	 	 ddpZS	 	 	 ddqZTdr ZU	 	 	 	 ddsZVdt ZWdu ZXdv ZYdw ZZdx Z[ G dy dz          Z\d{ Z]dTS )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)SelectInLoader)	_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_entityr8   r6   s     c/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/sqlalchemy/orm/loading.py
<listcomp>zinstances.<locals>.<listcomp>r   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    rA   
_no_uniquezinstances.<locals>._no_unique   s    (N
 
 	
rC   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)hashrF   rG   )objdatatyperL   s    rA   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)rO   id)rP   _use_ids    rA   rR   z,instances.<locals>._not_hashable.<locals>.go   s>      	##Cyy(
 #G#wwrS   )rU   )rQ   rK   rL   rR   rV   s   ` ` @rA   _not_hashablez instances.<locals>._not_hashable   sd     (	       I 	IG      IrC   c                    g | ]W}j         rnK|j        s5|j        s|j        r' |j        j        j        j        |j                   n|j        rt          ndXS )rJ   N)		yield_peruse_id_for_hash_non_hashable_value_null_column_typecolumntypeload_options_legacy_uniquingrU   )r?   entrI   rW   r8   s     rA   rB   zinstances.<locals>.<listcomp>   s       "   JJ +	9 0	9 584I	9JO"/@!3    .8RRD  rC   )_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     rA   rB   z-instances.<locals>.chunks.<locals>.<listcomp>   s!    333cS		333rC   c                H    g | ]t          fd D                       S )c                &    g | ]} |          S r=   r=   )r?   rf   re   s     rA   rB   z8instances.<locals>.chunks.<locals>.<listcomp>.<listcomp>   s!    9994499999rC   )tuple)r?   re   processs    @rA   rB   z-instances.<locals>.chunks.<locals>.<listcomp>   sD       ?BE9999999::  rC   )	partials	fetchmany_raw_all_rowslistpost_load_pathsitemsclearinvokeupdate)sizerY   fetchrowstop_level_post_loads
post_loadspath	post_loadrf   r8   r6   is_top_levelrj   single_entitys           @rA   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 _/	rC   prebuffer_rowsc                "    t                    S N)iter)rt   _prebuffereds    rA   r}   zinstances.<locals>.chunks  s    %%%rC   )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 collectionsrE   )rP   s    rA   require_uniquez!instances.<locals>.require_unique  s    ,&  rC   )!
_new_runidrunidtop_level_contextro   compile_state_has_mapper_entitiesr_   _only_return_tupleslen	_entitiessupports_single_entityrn   ziprY   loaders_require_bufferingloaders_require_uniquingrF   rG   	Exceptionr   safe_reraisecloser"   execution_optionsgetr    r8   _is_server_side_attributesuniondictmulti_row_eager_loaders_unique_filter_state)r6   r8   r   r   labelsextraunique_filtersrow_metadatar}   resultr   rI   rW   r   r{   rj   r|   s   ``         @@@@@@rA   	instancesr   O   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rK   c                D    g | ]\  }}t          |j                  |S r=   
isinstance_MapperEntityr?   iequerycontexts      rA   rB   z'merge_frozen_result.<locals>.<listcomp>J  s@     
 
 
1!\788

 
 
rC   c                    g | ]	}|j         
S r=   _label_namer?   ra   s     rA   rB   z'merge_frozen_result.<locals>.<listcomp>O  s    999C999rC   c                    g | ]	}|j         
S r=   _extra_entitiesr   s     rA   rB   z'merge_frozen_result.<locals>.<listcomp>R  s    @@@33&@@@rC   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               @rA   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     rA   rB   z merge_result.<locals>.<listcomp>  sc     	 	 	 ! NN"1(;;"0::!#%.0 #  	 	 	rC   c                D    g | ]\  }}t          |j                  |S r=   r   r   s      rA   rB   z merge_result.<locals>.<listcomp>  s@       Aqa!;<<  rC   c                    g | ]	}|j         
S r=   r   r   s     rA   rB   z merge_result.<locals>.<listcomp>  s    ===CO===rC   c                    g | ]	}|j         
S r=   r   r   s     rA   rB   z merge_result.<locals>.<listcomp>  s    DDDss*DDDrC   r   )r   r   r   r   r   r   r!   r   datar   r   r   r   r   r   rn   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r|   r   r   r   r   re   r   r   r   r   s     `           @@rA   merge_resultr   h  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         rA   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   r0   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                 rA   load_on_identr	    se      AQ!%%!#''%!%+''   rC   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      rA   	<setcomp>z&load_on_pk_identity.<locals>.<setcomp>9  s2       C= C $ ==rC   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      rA   
<dictcomp>z'load_on_pk_identity.<locals>.<dictcomp>L  s7     
 
 
# $(&
 
 
rC   Fz9refresh_state is required when require_pk_cols is presentc                \    h | ](}j         |         j                                        &|)S r=   )attrshistoryhas_changes)r?   r   r   s     rA   r  z&load_on_pk_identity.<locals>.<setcomp>e  sF     
 
 
"3'/;;==

 
 
rC   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_argrF   ArgumentErrorr   _primary_key_propkeys
differencerG   _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       `                      @rA   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   rA  r_   s
             rA   r8  r8    s     OL 7)6%& ?->)* 5)6%&04,- I.7.H.H*+ 9*8&' ;+:'( !L  '&  rC   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@   ry   adapterrV  with_polymorphicr   polymorphic_discriminatorkwpoly_propertiesquick_populatorsrX  r  pds                  rA   _setup_entity_queryrg    s<     9 @@
 
 !8HH]%'8:JKKK N#d))q.NT"X5NO  
 
 	uy??	
	

 ,/ 0+
	
 
	
 
	
 
	
 
	
 
	
 	"-%V-BBB 	+!:;BB*B  $$$$$ 	.-BBrC   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    rA   _warn_for_runid_changedri     s:    II !*% 0 0 0 0	3    rC   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   )r3  )r?   kr   s     rA   	<genexpr>z&_instance_processor.<locals>.<genexpr>V  s;       ' '%&a ' ' ' ' ' 'rC   rT  )newquickdeferredexpireexistingeagerc                *    g | ]}j         |         S r=   )r_  )r?   cr`  s     rA   rB   z'_instance_processor.<locals>.<listcomp>m  s     ???!7?1-???rC   )cached_populatorstodoprimary_key_getterro  rr  Frp  rw  c                4    i | ]\  }}|t          |          S r=   )rn   )r?   r   r  s      rA   r  z'_instance_processor.<locals>.<dictcomp>  s$    OOOzsE#tE{{OOOrC   rx  loader))selectinload_polymorphicTentitiesry  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   rt  )rP   r   r   _validate_version_idclass_managernew_instancer   r  
session_id_add_unpresentr_   r5  _populate_fullmanagerdispatchr   ri  r   refreshmodified_commit_commit_all	add_stateunloadedrk   _populate_partialinvoke_all_eagers)%re   r   r   dict_isnewcurrentloadloaded_instanceidentitykeyeffective_populate_existingexisting_runidr  to_loadr8   identity_classr  r   r   is_not_primary_keyload_evtr5  loaded_as_persistentr   r   persistent_evtrR  
populatorsrz   ry  propagated_loader_optionsrefresh_evtrefresh_identity_keyr   r   r  session_identity_mapr  version_id_getters%               rA   	_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rC   c                J     |           f} |d                   s|S d S )Nr   r=   )re   r  r  r  r  ry  s     rA   ensure_no_pkz)_instance_processor.<locals>.ensure_no_pk  sB    ""3''K
 &%k!n55 ""trC   ):_identity_classr   r   r   	_prop_setintersectionr'   r  _tuple_getterr   r   r   _deferred_column_loaderr   r   _raise_column_loaderr_  _gettercreate_row_processorr[  rp   r  current_pathry   r   r   rR  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   r8   r   ry   r`  r   r   rb  _polymorphic_fromr   
getter_keyrk  propsre  rx  rw  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  r5  r  r  rR  r  rz   ry  r  r  r  r   r  r  r  r  s5    ``  ```                        @@@@@@@@@@@@@@@@@@@@@rA   _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%

 

	 rC   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          }	|r|dt          j                 }
|t          j        d          }| j                            |	t          fd|
D                                                                                                                                  |d S d S )Nc                R    g | ]#\  }}|j                                       ||f$S r=   )r   +_would_selectin_load_only_from_given_mapper)r?   svr   s      rA   rB   z:_load_subclass_via_in.<locals>.do_load.<locals>.<listcomp>  sG       Aq8GGOOA  rC   r  T)rR  r   c                Z    g | ]'\  }}r|j         d          d         n|j         d          (S )r   r   r  )r?   r   
load_attrszero_idxs      rA   rB   z:_load_subclass_via_in.<locals>.do_load.<locals>.<listcomp>'  sF     " " "-E: ,4E	!Q1" " "rC   )primary_keys)r   r6  _prepend_path_with_optionsr7  r   r'  r%  rR  r   r   
_chunksizer   r;  r   r<  r=  all)r8   ry   states	load_onlyeffective_entity
orig_queryenable_opt_lcldisable_opt_lclr7  q2chunkdisable_opt
enable_optr   r  r@  r  s              rA   do_loadz&_load_subclass_via_in.<locals>.do_load  s    	   "  F  ]
; 	*'55d;;N)77==OO'N)O
 88O;MM 	 QY %3K
==$ 	>%%%==B 	'1~889EN5778FO##" " " "16" " "    fhhwwyy  	' 	' 	' 	' 	'rC   )r   r   r   base_mapperr  r\  _subclass_load_via_in_subclass_load_via_in_mapper)r8   ry   entitypolymorphic_fromr  polymorphic_from_mappernot_against_basemostr  r  r  r   r@  r  s       `   @@@@@rA   r  r    s     ]F
 /52;4G6%122a7H I"6 I%+%A%A$&
 &
":{{ &,%H":{/' /' /' /' /' /' /' /' /' /'b NrC   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 )Nrp  rr  ro  rs  )r   popexpired_attributesaddr5  )r8   re   r   r  r  r5  r  rR  r  r   r  set_callable	populators                rA   r  r  1  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((((	) 	)rC   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 )Nrp  rs  rr  ro  rt  )rk   r  r  r  )r8   re   r   r  r  r5  r  r  r   r  r  r  r  s                rA   r  r  j  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(((NrC   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  re   r  s        rA   r  r    s    ''uf+ 	  $$ %    005&"7    s

 

 
	
 rC   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`  r8   r   ry   r@   r   s     rA   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)rF   rG   r  )
re   r  r  r  r  r  instance_fnr   polymorphic_instancesr^  s
       rA   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>>>;   trC   )r^  r_  r   PopulateDictr  )r  r8   r@   r   r   ry   rb  r`  r  r  r  r  r   r^  s   `````` ``  @@@rA   r  r    s     !,2. 9 8         . !-.GHH^^N++F$ $ $ $ $ $ $ $ $ $L  rC   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    rA   __init__zPostLoad.__init__  s$    &((rC   c                    || j         |<   d S r   )r  )r  r   	overwrites      rA   r  zPostLoad.add_state  s    
 'ErC   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      rA   rB   z#PostLoad.invoke.<locals>.<listcomp>  sK       $E9='++O<<	"  rC   )	r  r   PathRegistrycoercer  valuesrp   r  rq   )
r  r8   ry   effective_contexttokenr{  argrc  r  r  s
            @rA   rr   zPostLoad.invoke
  s    { 	F)0066 \  ""	 	 
   (,(9(9(;(;  F
  %tVT^FI  MO   	rC   c                Z    |j                             |j                  }|	|r||_        |S r   )ro   r   ry   r  )clsr8   ry   r   pls        rA   r  zPostLoad.for_context!  s/    $((33>o>*BL	rC   c                P    |j         |j        v o||j        |j                  j        v S r   )ry   ro   r  )r  r8   ry   r   s       rA   r  zPostLoad.path_exists(  s1     I00 Bw.ty9AA	
rC   c                    |j         |j        v r|j        |j                  }nt                      x}|j        |j         <   ||||||f|j        |<   d S r   )ry   ro   r  r  )	r  r8   ry   r  r  loader_callabler  rc  r  s	            rA   r  zPostLoad.callable_for_path/  sc     9///(3BB6>jj@B(3

5rC   N)__name__
__module____qualname____doc__	__slots__r	  r  rr   classmethodr  r  r  r=   rC   rA   r  r    s        >>0I  
' ' '  .   [ 
 
 [
 
 
 [
 
 
rC   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     rA   rB   z*load_scalar_attributes.<locals>.<listcomp>t  s1     
 
 
25F$S)-
 
 
rC   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  rF   rG   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   `           rA   load_scalar_attributesr0  A  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>>rC   )r6   r7   r8   r   r9   r:   )T)r   r   r   r   r   r   r9   r   )
r   r-   r   r   r   r   r   r   r9   r   )r   r-   r   r   r   r   r_   r   r   r   r   r  r   r  r   r   r   r  r   r0   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   r0   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   r8   r   r   r   
strategiesr   r   r   r   rF   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.interfacesr0   r1   r2   r3   objectr5   counterr   str_PopulatorDictr   preload_moduler   became_legacy_20r   r   r	  r  r8  rg  ri  r  r  r  r  r  r  r  r0  r=   rC   rA   <module>rD     sA    # " " " " "                                                                                           " " " " " " " " " " " " ' ' ' ' ' '       " " " " " " $ $ $ $ $ $ ! ! ! ! ! ! & & & & & &                         ! ! ! ! ! ! 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E E EP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0rC   