HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/.local/lib/python3.10/site-packages/sqlalchemy/orm/__pycache__/loading.cpython-310.pyc
o

���g���@s�dZddlmZddlmZddlmZddlmZddlmZddlmZddlm	Z	dd	lm
Z
dd
lmZddlmZddlm
Z
dd
lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZ ddlmZddl!m"Z"ddl#m$Z$ddl#m%Z%dd l#m&Z&dd!l'm(Z(ddl'mZ)dd"l*m+Z+dd#l*m,Z,dd$l*m-Z-dd%lm.Z.e�rdd&l/m0Z0dd'lm1Z1dd(l2m3Z3dd)l4m5Z5dd*l6m7Z7dd+l8m9Z9dd,l:m;Z;dd-l<m=Z=dd.l>m?Z?dd/l#m@Z@dd0l'mAZAe
d1ed2�ZBe
d3eCd2�ZDe�E�ZFeeGeeeGeffZHd�d:d;�ZIe�Jd<�d�d>d?��ZKejLd@dAdB�e�Jd<�	=d�d�dJdK���ZMd�dUdV�ZNdWdWdWdWdXej.ej.dXdXdY�	d�dldm�ZOdWdWdWdWdWdXej.ej.dXdXdn�
d�dsdt�ZP	W	W	W	W	W	Wd�dudv�ZQ	W	W	Wd�dwdx�ZRdydz�ZS	W	W	W	Wd�d{d|�ZTd}d~�ZUdd��ZVd�d��ZWd�d��ZXd�d��ZYGd�d��d��ZZd�d��Z[dWS)�z�private 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]cs�t��_�jrd��jj�_nd�i�_�j}|j}�jjo+t|j	�dko+|j	dj
�z#tt��fdd��jj	D���\�}}�j
rN�jsI�jrNt�d��Wn!typt������Wd�n1siwYYnwd	d
��ddd�dd
�����fdd��jj	D�}t|||d�}�����fdd�}�j�dd�r�t|d����fdd�}t||���jjd�}	|	j�t|�d��|	_�jjr�dd�}
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.

    FTrrcsg|]}|�����qS�)�
row_processor)�.0�query_entity)r6r4r9�I/home/arjun/.local/lib/python3.10/site-packages/sqlalchemy/orm/loading.py�
<listcomp>qs
��zinstances.<locals>.<listcomp>z�Can'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.NcS�
t�d��)Nz@Can't use the ORM yield_per feature in conjunction with unique()��sa_exc�InvalidRequestError)�entryr9r9r=�
_no_unique���zinstances.<locals>._no_unique��legacy�	uncertaincs2|s��fdd�}|S�stSd��fdd�}|S)Ncs8�rzt|�WSYt�d��d�rdnd�d���)Nz=Can't apply uniqueness to row tuple containing value of type z; z the values returned appear to bezthis datatype producesz non-hashable values)�hashrArB��obj)�datatyperHr9r=�go�s
����z,instances.<locals>._not_hashable.<locals>.goFcs$�szt|�WSYd�t|�S)NT)rI�idrJ)�_use_idr9r=rM�s
)rN)rLrGrHrMr9)rOrLrHr=�
_not_hashable�sz instances.<locals>._not_hashablecsNg|]#}�jr	�n|js|js|jr�|jj�jj|jd�n|jr#tnd�qS)rFN)	�	yield_per�use_id_for_hash�_non_hashable_value�_null_column_type�column�type�load_options�_legacy_uniquingrN�r;�ent)rDrPr6r9r=r>�s ��	����	�)�_unique_filtersc3s��	|}i�_|r��|�}|sdSn���}�r'�d��fdd�|D�}n	�fdd�|D�}�rg|r;t�j���}�jrZt�j���}�j��|D]
\}}|��|�qL�js>|rg�j���j�|�|V|sndSq)NTrcsg|]}�|��qSr9r9)r;�row��procr9r=r>��z-instances.<locals>.chunks.<locals>.<listcomp>cs"g|]
�t�fdd��D���qS)csg|]}|���qSr9r9)r;r^�r\r9r=r>�r_z8instances.<locals>.chunks.<locals>.<listcomp>.<listcomp>)�tuple)r;)�processr`r=r>�s�)	�partials�	fetchmany�
_raw_all_rows�list�post_load_paths�items�clear�invoke�update)�sizerQ�fetch�rows�top_level_post_loads�
post_loads�path�	post_load)r6r4�is_top_levelrb�
single_entityr]r=�chunks�sD�
�
�	�
�
�zinstances.<locals>.chunks�prebuffer_rowscst��S�N)�iter)rl)�_prebufferedr9r=rus)�source_supports_scalars�raw�dynamic_yield_per)�filtered�is_single_entitycSr?)Nz~The unique() method must be invoked on this Result, as it contains results that include joined eager loads against collectionsr@rJr9r9r=�require_uniquerEz!instances.<locals>.require_unique)!�
_new_runid�runid�top_level_contextrg�
compile_state�_has_mapper_entitiesrW�_only_return_tuples�len�	_entities�supports_single_entityrf�ziprQ�loaders_require_buffering�loaders_require_uniquingrArB�	Exceptionr�safe_reraise�closer �execution_options�getrr6�_is_server_side�_attributes�union�dict�multi_row_eager_loaders�_unique_filter_state)r4r6r�r}�labels�extra�unique_filters�row_metadataru�resultrr9)rDrPryr6r4rsrbrtr=�	instancesNs�
�
���
�	����

���+��2�
�
r�zsqlalchemy.orm.contextTc	s�tjj�|r
|���jj|dd�}|j}z\d|_�fdd�t|j�D�}dd�|jD�}t	|dd�|jD��}g}	|�
�D]*}
|D]}|
|dur`|jt�
|
|�t�|
|�|iid�|
|<qB|	�||
��q>|�|	�W||_S||_w)	azMerge 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�rGc� g|]\}}t|�j�r|�qSr9��
isinstance�
_MapperEntity�r;�i�e��querycontextr9r=r>I�
��z'merge_frozen_result.<locals>.<listcomp>cS�g|]}|j�qSr9��_label_namerYr9r9r=r>N�cSr�r9��_extra_entitiesrYr9r9r=r>Qr�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�r9r�r=�merge_frozen_result+s>�
��
��
r�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	srtjj�|j��r
���t|t�r|}t|j�}nd}�j	j
|dd�}�j}z�d�_|o4t|j
�dk}|rPt|j
d�j�rK��fdd�|D�}nWt|�}nR�fd	d�t|j
�D�}g}d
d�|j
D�}	t|	dd�|j
D��}
|D].}t|�}|D]}
||
dur��jt�||
�t�||
��iid�||
<q{|�|
|��qs|r�|�|�W|�_St|�W|�_S|�_w)
z�Merge a result into the given :class:`.Query` object's Session.

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

    NTr�Frrc	s,g|]}�jt�|�t�|��iid��qS)r�)r�rr�r�)r;�instance)r�r�r9r=r>�s���z merge_result.<locals>.<listcomp>cr�r9r�r�r�r9r=r>�r�cSr�r9r�rYr9r9r=r>�r�cSr�r9r�rYr9r9r=r>�r�r�)rr�r�r�r�r�rrx�datar�r�r�r�r�r�rfr�rr�rr�r�r�r�)r�r�r�r�r�r�rtr�r�r�r�r\r�r�r9)r�r�r�r=�merge_resultgs^
��

��
��
�r�r�r+�mapper�
Mapper[_O]�key�_IdentityKeyType[_O]�passiver�)Union[LoaderCallableStatus, Optional[_O]]cCs�|j�|�}|durJt�|�}|jr|j�|�stjS|jrH|tj	@s&tj
S|tj@s-|Sz	|�||�W|St
jyG|�|g�YdSw|SdS)zqLook up the given key in the given session's identity map,
    check the object for expired state if found.

    N)�identity_mapr�rr��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��stater9r9r=�get_from_identity�s&



��r�NF)	rW�
refresh_state�with_for_update�only_load_props�no_autoflush�bind_argumentsr��require_pk_cols�is_user_refreshr��Union[Select, FromStatement]�Optional[_IdentityKeyType]rW�Optional[Sequence[ORMOption]]r��Optional[InstanceState[Any]]r��Optional[ForUpdateArg]r��Optional[Iterable[str]]r�r��Mapping[str, Any]r�r.r�r�c	CsD|dur
|d}|d}
nd}}
t||||||||
|||	|
|d�
S)z.Load the given identity key from the database.Nrr�
rWr�r�r��identity_tokenr�r�r�r�r�)�load_on_pk_identity)r�r�r�rWr�r�r�r�r�r�r�r��identr�r9r9r=�
load_on_ident�s&
�r�r��primary_key_identity�Optional[Tuple[Any, ...]]r��
Optional[Any]c
	s0|}
|
��}|jrJ�|durtj}|jtjurtj}n|j}|duri|
j	d}|j
\}�d|vrQ�fdd�t|j|�D�}t
�||�}t|�t|�krQt�d�t
�|ddi�f|_�fdd	�t||j�D�}nd}|durud}||_n|
jdur�d}|
j|_nd
}|r�|rˆs�t�d���jj}�fdd�|�|�D�}|r�t�d
|�d�j�d����jj}|D]}||jr�|�|�}nq��rՈjr�|d�jj i7}|j!�j�}t"||||�||d�\}}||_d|_#|r�|dd
i7}tj$�%|
d|i�}
|j&|||
|	d��'��(�}z|�)�WSt*j+�yYdSw)z6Load the given primary key identity from the database.N�plugin_subjectcs"h|]
\}}|dur�|j�qSrw�r�)r;�col�value��_get_paramsr9r=�	<setcomp>8s
�z&load_on_pk_identity.<locals>.<setcomp>zofully NULL primary key identity cannot load any object.  This condition may raise an error in a future release.�
_orm_adaptTcsi|]
\}}�|j|�qSr9r�)r;�id_val�primary_keyrr9r=�
<dictcomp>Ks
��z'load_on_pk_identity.<locals>.<dictcomp>Fz9refresh_state is required when require_pk_cols is presentcs h|]}�j|j��r|�qSr9)�attrs�history�has_changes)r;r�)r�r9r=rds��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_argrA�
ArgumentErrorr��_primary_key_propkeys�
differencerB�_props�_is_relationshipr�rW�	load_path�parent�options�_set_get_options�	_order_byr%�
merge_with�execute�unique�scalars�oner��
NoResultFound)r�r�r�rWr�r�r�r�r�r�r�r�r�r��q�compile_optionsr�r�nonesr
r�refresh_state_prokeysr	�mp�p�new_compile_optionsr�r9)rr�r=r�s�
�



���
��

�
�
���"

�

�
���
�r�c
Cs|i}i}	|r
||	d<|r||	d<|r||	d<d|d<|r"t|�|d<|r(||	d<|r.||	d<|	r4||	7}|r:||7}||fS)	N�_version_check�_populate_existing�_refresh_stateT�_for_refresh_state�_only_load_props�_identity_token�_is_user_refresh)�	frozenset)
�compile_opt�load_opt�populate_existingrr�r�r�r�r-rWr9r9r=r$�s(
r$c	Ks�|r|�|�}
n|j}
i}|�|jd|�|o!t|�dko!|dj}|
D]}
|r.|
j|vr.q$|
j||||f||||d�|	��q$|durZ||jur\|rQ|j	|}n|}|�
|�dSdSdS)N�memoized_setupsr���)r��column_collection�memoized_populators�check_for_adapt)�_iterate_polymorphic_properties�_polymorphic_properties�setrr��is_aliased_classr��setup�polymorphic_on�columnsr�)r�r�r<rq�adapterr@�with_polymorphicr��polymorphic_discriminator�kw�poly_properties�quick_populatorsrBr��pdr9r9r=�_setup_entity_query�s@���	�
�rQcCst�dt|�f�dS)NamLoading context for %s 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.)rrr)r�r9r9r=�_warn_for_runid_changeds
��rRc
 s��
j��j}
d�
f}|�|
j|d�}|durو
j}
�dur)|
��
fdd��D��}
|��jdt�}g}ggggggd�}�durT�
j}�rN�fdd�|D�}|�|��nd�||�d	�}|
D]r}||vr�||}|t	urx|d
�
|j|jf�q^|t
ur�|d�
|jdf�q^|tur�|d
�
|j|jf�q^d}�r��j|}|dur�|�|d�}|s�|�|d�}|r�|d
�
|j|f�q^|��||�
|�|�q^|�
|�q^|�|
j||�|d}dd�|��D��|dD]
}|��||�
|���q�j��jjj�r�jj|n|��jj��j�p�
j�
t�
jjj��t�
jjj ��t�jjj!����r1�jjj!�	tj"�tj#��jj$��j%��j&��j'���r_�
j(}|du�r]��rW�j|}|�|��nd���s�|	du�r�d|jf}|�jv�r��j|j)dk�r��j|j*d}nd}�
�+||	�}|�r�||	u�r�du�s�J�|j,�r�g}|}|�r�||	u�r�|�
|�|j-}|�r�||	u�s�n|g}|D] }t.�/��|��r͐q�t0�|||	|�}t.�1��|j2|||��q�t.�3�������r��j��du�r��
�4���nd�|d��
j5�rt6j7�nt6j����������	�
���
������������fdd�}�
j8�rH|	�sH��sH����fdd�}t9|�|�
|||�|�	}|S)z]Produce a mapper level row processor callable
    which processes rows into mapped instances.�gettersNc3s�|]}�j|VqdSrw)r)r;�k�r�r9r=�	<genexpr>Us�

�z&_instance_processor.<locals>.<genexpr>r>)�new�quick�deferred�expire�existing�eagercsg|]}�j|�qSr9)rI)r;�c)rJr9r=r>lsz'_instance_processor.<locals>.<listcomp>)�cached_populators�todo�primary_key_getterrWrZFrXr^cSsi|]	\}}|t|��qSr9)rf)r;r�r�r9r9r=r�sz'_instance_processor.<locals>.<dictcomp>r_�loader))�selectinload_polymorphicT�entitiesr`c
s��r�}|��}�|�}|j�k}d}d}n[��|��f}��|�}|durG�|�}�|�}|j�k}|}d}�rF�rF|sFt�	|||��n*�|d�rOdSd}d}d}�	j��}�|�}�|�}||_�|_�|_��	||��}�|uryd}|s}|r�|r��s�|s��|_
�|_t�||||�||�
�	|r�|j}	|r��r�|j
j�|��|j|	kr�t|��r���j|�|j|	kr�t|�n�r�|j
j�|��
�|j�kr�t|�|s�|jr�r�
r�|�|�
�n|�|���r��|d�|S|j}
|�jv}|�r|
�s�
d�r5t�||||�|
�
�}|�r5��r/|j}	|j
j�|�|�|j|	k�r/t|�|�||���rB�j�rB��|d�|S)NTFrr\)rKr�r��_validate_version_id�
class_manager�new_instancer�r��
session_id�_add_unpresentrWr!�_populate_full�manager�dispatchr�rRr��refresh�modified�_commit�_commit_all�	add_state�unloadedrc�_populate_partial�invoke_all_eagers)r\r�r��dict_�isnew�currentload�loaded_instance�identitykey�effective_populate_existing�existing_runidrq�to_load)r6�identity_classr�r�r��is_not_primary_key�load_evtr!�loaded_as_persistentr�r��persistent_evtr=�
populatorsrrr`�propagated_loader_options�refresh_evt�refresh_identity_keyr�r�rg�session_identity_mapr�version_id_getterr9r=�	_instance+s�
�


��	
���

��

%�
�z&_instance_processor.<locals>._instancecs"��|��f}�|d�s|SdS)Nrr9)r\rx)r|r�r}r`r9r=�ensure_no_pk�s�z)_instance_processor.<locals>.ensure_no_pk):�_identity_classr�r�r�	_prop_set�intersectionr%r�
_tuple_getterrr�r��_deferred_column_loaderrr�_raise_column_loaderrI�_getter�create_row_processorrErhr��current_pathrqr�r�r=�always_refreshr�rerkr�rlrr�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) r<r�r6r�rqrJr�r�rL�_polymorphic_fromr��
getter_keyrS�propsrOr_r^�pk_cols�propr��getter�adapted_colr�r��option_entities�selectin_load_via�_load_supers�_endmost_mapper�_selectinload_entity�	callable_r�r�r9)rJr6r|r�r�r�r}r~r!rr�r�r�r=r�rrr`r�r�r�r�r�rgr�rr�r=�_instance_processor+sP���	�
�
�
�
���



��

��
����	
��<!�r�csj|j�|j}|jdu}t�jj�dk�|js|r"��||�\���n�j\���������fdd�}|S)Nrc
s��s�fdd�|D�}|sdS|j}|jr ��|�}��|�}n�}�}|f|j|f}�j|�}	|jj|	_|	jd|ji7_|jrJ|	j	dd�}	|j
�|	t�fdd�|D�d���
�����dS)Ncs$g|]\}}|j���r||f�qSr9)r��+_would_selectin_load_only_from_given_mapper)r;�s�vrUr9r=r>s
��z:_load_subclass_via_in.<locals>.do_load.<locals>.<listcomp>r
T)r=cs,g|]\}}�r|jddn|jd�qS)rrr�)r;r��
load_attrs)�zero_idxr9r=r>#s��)�primary_keys)r�r"�
_prepend_path�
_with_optionsr#r�rrr=r�r�r'r�r(r)�all)
r6rq�states�	load_only�effective_entity�
orig_query�enable_opt_lcl�disable_opt_lclr#�q2��disable_opt�
enable_optr�r�r,r�r9r=�do_load�s8
�
�


���z&_load_subclass_via_in.<locals>.do_load)r�r�r��base_mapperrrF�_subclass_load_via_in�_subclass_load_via_in_mapper)r6rq�entity�polymorphic_fromr��polymorphic_from_mapper�not_against_basemostr�r9r�r=r��s

�.r�c	
Cs|rQ|j|_|dD]
\}	}
|
|�||	<q
|r/|dD]\}	}|�|	d�|r-|j�|	�qn|dD]\}	}|r?|j�|	�q3|dD]
\}	}||||�qDdS||jkr}||_|dD]\}	}
|	|vrk|
|�||	<q]|dD]
\}	}||||�qpdS|dD]
\}	}||||�q�dS)NrXrZrWr[)r��pop�expired_attributes�addr!)
r6r\r�rtrur!rwr=r�r�r��set_callable�	populatorr9r9r=ri-s<����
���ric
Cs|s0|r|dD]\}}	||vr|	|�||<q|j|}
|dD]\}}||
vr.||||�q nH|}
|
|j|<|dD]\}}	||
vrI|	|�||<q;|dD]\}}||
vrd|�|d�|rd|j�|�qN|dD]\}}||
vrw||||�qi|dD]\}}||vr�||||�q||
S)NrXr[rZrWr\)rcr�r�r�)
r6r\r�rtrur!rqr�r�r�r{r�r�r9r9r=rrfsB�
��
����rrc	CsD|�|||j�||�kr t�dt|�|�|||j�||�f��dS)NzWInstance '%s' has version id '%s' which does not match database-loaded version id '%s'.)�_get_state_attr_by_columnr�r��StaleDataErrorr)r�r�rtr\r�r9r9r=rd�s �������rdc	sr|dur|�n�j��dur�S�r�j�������	�
fdd�}	t�|	���
����������fdd�}
|
S)Nc	sZz�j|}Wn
tytd|��w|�urdS|���s"dSt�|�����d�S)Nz*No such polymorphic_identity %r is definedF)r�)r��KeyError�AssertionErrorr�r�)�
discriminator�
sub_mapper)rJr6r�rqr<r�r9r=�configure_subclass_mapper�s(��
�z?_decorate_polymorphic_switch.<locals>.configure_subclass_mappercs��|�}|dur0�|}|r||�S|dur,�|�}|r*t�d|��j|�f��dS�|�S�|�}|r?t�d|�f��dS)NFz�Row with identity key %s can't be loaded into an object; the polymorphic discriminator column '%s' refers to %s, which is not a sub-mapper of the requested %szjRow with identity key %s can't be loaded into an object; the polymorphic discriminator column '%s' is NULL)rArBr�)r\r�r�rx)r�r��instance_fnr��polymorphic_instancesrHr9r=�polymorphic_instance�s6���
��z:_decorate_polymorphic_switch.<locals>.polymorphic_instance)rHrIr�PopulateDictr�)r�r6r<r�r�rqrLrJr�r�r�r9)rJr6r�r�r�r�rqr�rHr<r�r=r��s


&r�c@sPeZdZdZdZdd�Zdd�Zdd�Zed	d
��Z	edd��Z
ed
d��ZdS)r�z4Track loaders and states for "post load" operations.)�loadersr��	load_keyscCsi|_t��|_d|_dSrw)r�r�OrderedDictr�r�)�selfr9r9r=�__init__�s

zPostLoad.__init__cCs||j|<dSrw)r�)r�r��	overwriter9r9r=rp�szPostLoad.add_statec	sz|jsdStj�|�}|j��D]%\}}�}}}�fdd�|j��D�}|r5|||||jg|�Ri|��q|j��dS)Ncs&g|]\}}|jj���r||f�qSr9)rjr�r�)r;r�r���limit_to_mapperr9r=r>s��z#PostLoad.invoke.<locals>.<listcomp>)	r�r�PathRegistry�coercer��valuesrhr�ri)	r�r6rq�effective_context�tokenra�argrMr�r9r�r=rjs0�
�
����zPostLoad.invokecCs$|j�|j�}|dur|r||_|Srw)rgr�rqr�)�clsr6rqr��plr9r9r=r�szPostLoad.for_contextcCs|j|jvo||j|jjvSrw)rqrgr�)r�r6rqr�r9r9r=r�$s�zPostLoad.path_existsc	OsF|j|jvr
|j|j}n	t�}|j|j<||||||f|j|<dSrw)rqrgr�r�)	r�r6rqr�r��loader_callabler�rMr�r9r9r=r�+s�zPostLoad.callable_for_pathN)�__name__�
__module__�__qualname__�__doc__�	__slots__r�rprj�classmethodr�r�r�r9r9r9r=r��s

r�cs8|j}|st�dt|���t|tj@�}|r|��j�	��}�j
r>�js>��||�}|dur>t
�|�}t||d|||d�St|j�}|rI|j}	n�fdd��jD�}
|j�|
�rbt�dt|�����|�}	t�|	�ro�jrtt�|	�r~t�dt|��dSt|t���t�|	|||d�}|r�|dur�t�|��dSdS)	z4initiate a column-based attribute refresh operation.zQInstance %s is not bound to a Session; attribute refresh operation cannot proceedN)r�r�r�csg|]}�j|j�qSr9)�_columntopropertyr�)r;r�rUr9r=r>ps�z*load_scalar_attributes.<locals>.<listcomp>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��DetachedInstanceErrorrr�r�NO_AUTOFLUSHr�rr�r��concrete�_optimized_get_statementrr�r�rr�rArBr�r�issubsetr�r�r�warn_limitedr!�set_label_styler#r�)r�r��attribute_namesr�r�r�r��stmt�has_key�identity_key�pk_attrsr�r9rUr=�load_scalar_attributes=sr��
�


���
�����
�r)r4r5r6rr7r8)T)r�r�r�r�r�r�r7r�)
r�r+r�r�r�r�r�rr7r�)r�r+r�r�r�r�rWr�r�r�r�r�r�r�r�r�r�r�r�r.r�r�r�r�)r�r+r�r�r�r�rWr�r�r�r�r�r�r�r�r�r�r�r�r�r�r.r�r�r�r�)NNNNNN)NNN)NNNN)\r��
__future__r�typingrrrrrrr	r
rrr
�rrr�r�baserrrrr6rrrrrrrA�enginer�
engine.resultrrr �sqlr!r�sql.selectabler"r#r$r%�_typingr&r'�
interfacesr(r�r)r�r*r�r+r�r,�
engine.cursorr-�engine.interfacesr.r/r0r1�objectr3�counterr��str�_PopulatorDictr��preload_moduler��became_legacy_20r�r�r�r�r$rQrRr�r�rirrrdr�r�rr9r9r9r=�<module>s�	
^;��
T+�,�<
�)
�7
�@E9%YH