Hacked By AnonymousFox

Current Path : /opt/cloudlinux/venv/lib/python3.11/site-packages/sqlalchemy/orm/__pycache__/
Upload File :
Current File : //opt/cloudlinux/venv/lib/python3.11/site-packages/sqlalchemy/orm/__pycache__/strategies.cpython-311.pyc

�

�܋fU���dZddlmZddlZddlZddlmZddlmZddlm	Z	ddlm
Z
dd	lmZdd
lmZddlm
Z
ddlmZdd
lmZddlmZddl	mZddl	mZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZ ddlm!Z!						dId�Z"ej#�$dd���Gd�de����Z%ej&ej#�$d d���Gd!�d"e������Z'ej&ej#�$d �#��Gd$�d%e'������Z(ej&ej#�$d d �&��ej#�$d �'��Gd(�d)e��������Z)Gd*�d+e*��Z+Gd,�d-e��Z,ej&ej-�$d �'��Gd.�d/e������Z.ej&ej-�$d0�1��ej-�$d�1��Gd2�d3e,��������Z/ej&ej-�$d �1��ej-�$d4�1��ej-�$d5�1��ej-�$d6�1��ej-�$d7�1��Gd8�d9e,ej0��������������Z1Gd:�d;e*��Z2ej-�$d<�1��Gd=�d>e,����Z3ej&ej-�$d?�1��Gd@�dAe,������Z4ej&ej-�$dB�1��ej-�$d�1��GdC�dDe,��������Z5ej&ej-�$dE�1��GdF�dGe,ej0������Z6dH�Z7dS)JzWsqlalchemy.orm.interfaces.LoaderStrategy
   implementations, and related MapperOptions.�)�absolute_importN�)�
attributes)�exc)�
interfaces)�loading)�
properties)�query)�
unitofwork)�util)�_DEFER_FOR_STATE)�_SET_DEFERRED_EXPIRED)�LoaderStrategy)�StrategizedProperty)�_state_session)�
InstanceState)�	_none_set)�aliased�)�event)�inspect)�log)�sql)�visitorsFc	�8�����ttj|jg�����}
g}|o|j�|r!|jr|�t��|j|j	j
vr3|j	j
|j\��|���fd���|r|�tj��|r)|j
��r |jr|���fd���|jD]�}||j�|j��ur�|j�|j��sct)j|j|jf|�|||
|o|jp|jt0ju|||||p|j|jd�|	��}
|D]}||
|�����dS)N)�defaultc�6��tj||j�fi���S�N)�orm_util�_validator_events�key)�desc�prop�fn�optss  ���P/opt/cloudlinux/venv/lib64/python3.11/site-packages/sqlalchemy/orm/strategies.py�<lambda>z%_register_attribute.<locals>.<lambda>Bs*���x�9��d�h�� � �&*� � ��c�0��tj|����Sr)r�backref_listeners)r"r#�backref�uselists  ��r&r'z%_register_attribute.<locals>.<lambda>Ps���:�#?��'�7�$�$�r()�parent_tokenr,�compare_function�	useobject�	extension�trackparent�typecallable�	callable_�active_history�
impl_class�send_modified_events�doc)�listr�to_listr0r,�
single_parent�append�single_parent_validatorr!�parent�
validatorsr�track_cascade_events�back_populates�_effective_sync_backref�self_and_descendants�_props�get�
class_manager�_attr_has_implr�register_attribute_impl�class_�	directionr�	ONETOMANY�viewonlyr7)r#�mapperr/r.r2r3�proxy_propertyr4r5�kw�
attribute_ext�listen_hooks�mr"�hookr+r$r%r,s               @@@@r&�_register_attributerS)s2���������d�n�b�A�A�A�B�B�M��L��(�D�L�G��5�T�'�5����3�4�4�4��x�4�;�)�)�)��;�)�$�(�3���D����
�
�
�
�
�	
�	
�	
��=����J�;�<�<�<����%���	�t�3�	���������
�
�
�"�
(�!�!���1�8�<�<��H�
�
�
�
��/�0�0���:�:�
��5������"��!1�#�'�%���&�>��~��)=�=�)�#�-�%�)2�]�%G�$�-�6G��H�%��&�'��D�,%�
!�
!����T�4� � � � ��9!�!r()�
instrument�deferredc�6��eZdZdZdZ�fd�Z	dd�Zd�Z�xZS)�UninstrumentedColumnLoaderz�Represent a non-instrumented MapperProperty.

    The polymorphic_on argument of mapper() often results in this,
    if the argument is against the with_polymorphic selectable.

    ��columnsc�|��tt|���||��|jj|_dSr)�superrW�__init__�parent_propertyrY��selfr=�strategy_key�	__class__s   �r&r\z#UninstrumentedColumnLoader.__init__�s5���
�(�$�/�/�8�8���N�N�N��+�3����r(Nc�b�|jD]&}|r
|j|}|�|���'dSr)rYr;)	r_�context�query_entity�path�loadopt�adapter�column_collection�kwargs�cs	         r&�setup_queryz&UninstrumentedColumnLoader.setup_query�sJ����	(�	(�A��
'��O�A�&���$�$�Q�'�'�'�'�	(�	(r(c��dSr�)r_rcrerfrL�resultrg�
populatorss        r&�create_row_processorz/UninstrumentedColumnLoader.create_row_processor�s	��	
�r(r)	�__name__�
__module__�__qualname__�__doc__�	__slots__r\rkrp�
__classcell__�ras@r&rWrWsq����������I�4�4�4�4�4��
(�
(�
(�
(�
�
�
�
�
�
�
r(rWTc�8��eZdZdZdZ�fd�Zd�Zd�Zd�Z�xZ	S)�ColumnLoaderz8Provide loading behavior for a :class:`.ColumnProperty`.)rY�is_compositec���tt|���||��|jj|_t|jd��|_dS)N�composite_class)r[ryr\r]rY�hasattrrzr^s   �r&r\zColumnLoader.__init__�sL���
�l�D�!�!�*�*�6�<�@�@�@��+�3���#�D�$8�:K�L�L����r(c��|jD]&}	|r
|j|	}	|�|	���'|jd}
|r
|j|
}
|
||j<dS�Nr)rYr;r])r_rcrdrerfrgrh�memoized_populatorsrirj�fetchs           r&rkzColumnLoader.setup_query�ss����	(�	(�A��
'��O�A�&���$�$�Q�'�'�'�'���Q����	+��O�E�*�E�49��D�0�1�1�1r(c���d|_|jdj}|jjp,|jdjp|jt|j��v}t|j|d|j	|���dS)NTrF)r/r.r4)
�is_class_levelrY�typer]r4�primary_key�version_id_col�setrS�compare_values)r_rL�coltyper4s    r&�init_class_attributez!ColumnLoader.init_class_attribute�s���"����,�q�/�&��
� �/�
:��|�A��*�
:��$��D�L�(9�(9�9�	�	�� ���$�3�)�	
�	
�	
�	
�	
�	
r(c��|jD]N}|r
|j|}|�|d��}	|	r%|d�|j|	f��dS�O|d�|jdf��dS)NF�quick�expireT)rY�_getterr;r!)
r_rcrerfrLrnrgro�col�getters
          r&rpz!ColumnLoader.create_row_processor�s���
�<�	:�	:�C��
+��o�c�*���^�^�C��/�/�F��
��7�#�*�*�D�H�f�+=�>�>�>����
�
�x� �'�'���4�(8�9�9�9�9�9r()
rqrrrsrtrur\rkr�rprvrws@r&ryry�sx�������C�B�)�I�M�M�M�M�M�
:�:�:�,
�
�
�$
:�
:�
:�
:�
:�
:�
:r(ry)�query_expressionc�0��eZdZ�fd�Zd�Zd�Zd�Z�xZS)�ExpressionColumnLoaderc�����tt|���||��tj���t�fd�|jjD����|_dS)Nc3�D�K�|]}|����V��dSr)�compare)�.0rj�nulls  �r&�	<genexpr>z2ExpressionColumnLoader.__init__.<locals>.<genexpr>�sA�����,
�,
�$%��	�	�$����,
�,
�,
�,
�,
�,
r()	r[r�r\rr��anyr]rY�_have_default_expression)r_r=r`r�ras   @�r&r\zExpressionColumnLoader.__init__�st����
�$�d�+�+�4�4�V�\�J�J�J��x�z�z��(+�,
�,
�,
�,
�)-�)=�)E�,
�,
�,
�)
�)
��%�%�%r(c��d}	|rd|jvr|jdg}	n|jr|jj}	|	�dS|	D]&}
|r
|j|
}
|�|
���'|	d}|r
|j|}|||j<dS)N�
expressionr)�
local_optsr�r]rYr;)r_rcrdrerfrgrhr�rirYrjr�s            r&rkz"ExpressionColumnLoader.setup_query�s������	3�|�w�'9�9�9��)�,�7�8�G�G�
�
*�	3��*�2�G��?��F��	(�	(�A��
'��O�A�&���$�$�Q�'�'�'�'���
���	+��O�E�*�E�49��D�0�1�1�1r(c�&�|r�d|jvr�|jdg}|D]N}	|r
|j|	}	|�|	d��}
|
r%|d�|j|
f��dS�O|d�|jdf��dSdSdS)Nr�Fr�r�T)r�rYr�r;r!)r_rcrerfrLrnrgrorYr�r�s           r&rpz+ExpressionColumnLoader.create_row_processors���
�	>�|�w�'9�9�9��)�,�7�8�G��
>�
>���/�!�/�#�.�C�����U�3�3�����w�'�.�.���&�/A�B�B�B��E�E���8�$�+�+�T�X�t�,<�=�=�=�=�=�	>�	>�9�9r(c�p�d|_t|j|d|jdjjd���dS)NTFr)r/r.�accepts_scalar_loader)r�rSr]rYr�r��r_rLs  r&r�z+ExpressionColumnLoader.init_class_attribute"sI��"����� ���!�\�!�_�1�@�"'�	
�	
�	
�	
�	
�	
r()rqrrrsr\rkrpr�rvrws@r&r�r��se�������
�
�
�
�
�:�:�:�<>�>�>�$	
�	
�	
�	
�	
�	
�	
r(r�)rUrT)�
do_nothingc�B��eZdZdZdZ�fd�Zd�Zd�Z	d	d�Zd�Z	�xZ
S)
�DeferredColumnLoaderzAProvide loading behavior for a deferred :class:`.ColumnProperty`.)rY�groupc����tt|���||��t|jd��rtd���|jj|_|jj|_dS)Nr|z8Deferred loading for composite types not implemented yet)r[r�r\r}r]�NotImplementedErrorrYr�r^s   �r&r\zDeferredColumnLoader.__init__6so���
�"�D�)�)�2�2�6�<�H�H�H��4�'�):�;�;�	�%�M���
��+�3����)�/��
�
�
r(c��|js0|jj}|d�|j|f��dS|d�|jdf��dS)N�newr�F)r�r]�_deferred_column_loaderr;r!)	r_rcrerfrLrnrgro�set_deferred_for_local_states	         r&rpz)DeferredColumnLoader.create_row_processor?sl���"�	;��$�<�
)�
�u��$�$�d�h�0L�%M�N�N�N�N�N��x� �'�'���5�(9�:�:�:�:�:r(c�|�d|_t|j|d|jdjj|jd���dS)NTFr)r/r.r3�expire_missing)r�rSr]rYr�r��_load_for_stater�s  r&r�z)DeferredColumnLoader.init_class_attributeOsO��"����� ���!�\�!�_�1�@��*� �
	
�	
�	
�	
�	
�	
r(Nc		��|r:d|jvr1t|j���|jj��s7|r*|jr#|j�d|jzd��s|r7|j|vr.|j	�
d��j|||||||fi|	��dS|jrt||j	<dSt||j	<dS)N�undefer_pkszundefer_group_%sF))rUF)rTT)r�r�rY�intersectionr=�_should_undefer_in_wildcardr�rDr!r]�
_get_strategyrkr�rr
)
r_rcrdrerfrgrhr��only_load_propsrNs
          r&rkz DeferredColumnLoader.setup_query[s2��� 	I�"�W�%7�7�7����%�%�2�2��K�;���8��
8��J�8��&�*�*�&���3�U���8� �8�%)�H��$?�$?�
�D� �.�.�;�
�
�������!�#�
�
��
�
�
�
�
��
 �	I�8M��� 4�5�5�5�8H��� 4�5�5�5r(c�����jstjS|tjzstjS�jj}�jr�fd�|jD��}n�jg}�fd�|D��}t���}|�2tjdtj
����d�j�d����|�|��}tj|�j|����	�tj����tjS)Nc���g|]H}t|t��r1t|jt��r|j�jk�A|j��ISrm)�
isinstancer�strategyr�r�r!)r��pr_s  �r&�
<listcomp>z8DeferredColumnLoader._load_for_state.<locals>.<listcomp>�sb��������a�!4�5�5���q�z�+?�@�@�	�
�G�t�z�)�)�	��*�)�)r(c�&��g|]
}|�jv�|��Srm)�
unmodified)r��k�states  �r&r�z8DeferredColumnLoader._load_for_state.<locals>.<listcomp>�s&���<�<�<�q�a�5�+;�&;�&;��&;�&;�&;r(�Parent instance zB is not bound to a Session; deferred load operation of attribute '�' cannot proceed)r��
refresh_state)r!r�
ATTR_EMPTY�SQL_OK�PASSIVE_NO_RESULT�managerrLr��iterate_propertiesr�orm_exc�DetachedInstanceErrorr�	state_strr
r�
load_on_ident�ObjectDeletedError�ATTR_WAS_SET)r_r��passive�localparent�toloadr��sessionr
s``      r&r�z$DeferredColumnLoader._load_for_state�s=�����y�	)��(�(���*�*�	0��/�/��m�*���:�		 �����$�7����F�F��h�Z�F�=�<�<�<�F�<�<�<�� ��'�'���?��/�/��%�e�,�,�,�,�d�h�h�h�8���
��
�
�k�*�*���!��u�y�%�u�
�
�
��
�
�,�U�3�3�3��&�&r(r)rqrrrsrtrur\rpr�rkr�rvrws@r&r�r�.s��������L�K�"�I�0�0�0�0�0�;�;�;� 

�

�

�*�-I�-I�-I�-I�^('�('�('�('�('�('�('r(r�c�,�eZdZdZd�Zejfd�ZdS)�LoadDeferredColumnsz7serializable loader object used by DeferredColumnLoaderc��||_dSr�r!)r_r!s  r&r\zLoadDeferredColumns.__init__�s
������r(c��|j}|jj}|j|}|jt
}|�||��Sr)r!r�rLrC�_strategiesr�r�)r_r�r�r!r�r#r�s       r&�__call__zLoadDeferredColumns.__call__�sD���h���m�*���!�#�&���#�$8�9���'�'��w�7�7�7r(N�rqrrrsrtr\r�PASSIVE_OFFr�rmr(r&r�r��sE������A�A����'1�&<�8�8�8�8�8�8r(r�c�&��eZdZdZdZ�fd�Z�xZS)�AbstractRelationshipLoaderz0LoaderStratgies which deal with related objects.)rL�targetr,�entityc����tt|���||��|jj|_|jj|_|jj|_|jj|_dSr)r[r�r\r]rLr�r�r,r^s   �r&r\z#AbstractRelationshipLoader.__init__�s\���
�(�$�/�/�8�8���N�N�N��*�1����*�1����*�1����+�3����r()rqrrrsrtrur\rvrws@r&r�r��sC�������:�:�7�I�4�4�4�4�4�4�4�4�4r(r�c��eZdZdZdS)�DoNothingLoaderz�Relationship loader that makes no change to the object's state.

    Compared to NoLoader, this loader does not initialize the
    collection/attribute to empty/none; the usual default LazyLoader will
    take effect.

    N)rqrrrsrtrmr(r&r�r��s���������r(r��noload)�lazyc�"�eZdZdZdZd�Zd�ZdS)�NoLoaderzYProvide loading behavior for a :class:`.RelationshipProperty`
    with "lazy=None".

    rmc�X�d|_t|j|d|jj���dS)NT)r/r2)r�rSr]�collection_classr�s  r&r�zNoLoader.init_class_attribute�s@��"����� ����-�>�		
�	
�	
�	
�	
�	
r(c�V���fd�}|d��j|f��dS)Nc����jr5|j��j���||��dSd|�j<dSr)r,r��get_implr!�
initialize�r��dict_�rowr_s   �r&�invoke_no_loadz5NoLoader.create_row_processor.<locals>.invoke_no_load�sJ����|�
'��
�&�&�t�x�0�0�;�;�E�5�I�I�I�I�I�"&��d�h���r(r��r;r!)	r_rcrerfrLrnrgror�s	`        r&rpzNoLoader.create_row_processor�sD���	'�	'�	'�	'�	'�	�5�� � �$�(�N�!;�<�<�<�<�<r(N)rqrrrsrtrur�rprmr(r&r�r��sC��������
�I�
�
�
�	=�	=�	=�	=�	=r(r��select�raise�raise_on_sql�baked_selectc���eZdZdZdZ�fd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zej
d
��d���Zej
d��d
���Zd�Z�xZS)�
LazyLoaderz|Provide loading behavior for a :class:`.RelationshipProperty`
    with "lazy=True", that is loads when first accessed.

    )�
_lazywhere�_rev_lazywhere�use_get�is_aliased_class�_bind_to_col�_equated_columns�_rev_bind_to_col�_rev_equated_columns�_simple_lazy_clause�
_raise_always�
_raise_on_sql�_bakeryc�f��tt|���||��|jddk|_|jddk|_t
|j��j|_|j	j
}|���\|_|_
|_|�d���\|_|_|_|j�d||j��|jo>|jo6|jjd�|jd|jj���|_|jrlt5|j��D]:}||jjvr*|jj|D]}|j||j|<��;|j�d	|��dSdS)
Nr�r�r�T)�reverse_directionz%s lazy loading clause %sr��use_proxies�equivalentsz2%s will use query.get() to optimize instance loads)r[r�r\�
strategy_optsrrrr�r�r]�_join_condition�create_lazy_clauser�r�r�r�r�r��logger�infor,�_get_clauser�rL�_equivalent_columnsr�r8)r_r=r`�join_conditionr�rjras      �r&r\zLazyLoader.__init__s����
�j�$���(�(���>�>�>�!�/��7�7�B���!�/��7�>�I��� '��� 4� 4� E����-�=��

�-�-�/�/�		
��O����!�
�-�-��-�E�E�		
����!��%�	
����4�d�D�O�L�L�L��%�%�
��L� �
���'��*�2�2��� � �K�;�3���	
���<�	��D�1�2�2�
N�
N���$�+�9�9�9�!�[�<�S�A�N�N��37�3H��3M��-�a�0�0���K���G��
�
�
�
�
�
	�	r(c��d|_|jjp|jjtjup|j}t|j|d|j|jj	|���dS)NT)r/r3r2r4)
r�r]r4rIr�	MANYTOONEr�rSr�r�)r_rLr4s   r&r�zLazyLoader.init_class_attributeJs~��"���
� �/�
 ��#�-�Z�5I�I�
 ��<��	�	�� ����*��-�>�)�
	
�	
�	
�	
�	
�	
r(c����|j|jc}�g�d�}tj|id|i����fd�}tj|id|i��}|�fS)Nc��d|_dS�NF)�unique)�	bindparams r&�visit_bindparamzFLazyLoader._memoized_attr__simple_lazy_clause.<locals>.visit_bindparamgs��$�I���r(rc����|j�vr*��|j�|jdf��dS|j�$��|jd|jf��dSdSr)�_identifying_keyr;r!�callable�value)r�bind_to_col�paramss ��r&rzFLazyLoader._memoized_attr__simple_lazy_clause.<locals>.visit_bindparamls����)�[�8�8��
�
�!�
�#�I�$>�?���������#�+��
�
�y�}�d�I�O�D�E�E�E�E�E�,�+r()r�r�r�traverse�cloned_traverse)r_�	criterionrrrs   @@r&�"_memoized_attr__simple_lazy_clausez-LazyLoader._memoized_attr__simple_lazy_clausebs�����"&�/�4�3D��	�;���	%�	%�	%�	��)�R�+��)G�H�H�H�
	F�
	F�
	F�
	F�
	F�
	F��,��r�K��9�
�
�	��&� � r(c��|j\}}|�tj|d�|D����S|jj}|���}t
j|��}|tjzr|tjz}i}|D]O\}	}
}|
�B|r(|tj	zr|�
|||
|��}n|�|||
|��}|||	<�P||fS)Nc��g|]\}}}|��	Srmrm)r�r!�identrs    r&r�z4LazyLoader._generate_lazy_clause.<locals>.<listcomp>�s��D�D�D�$5�C���C�D�D�Dr()r��sql_util�adapt_criterion_to_nullr]r=�objr�
instance_dict�INIT_OK�LOAD_AGAINST_COMMITTED�#_get_committed_state_attr_by_column�_get_state_attr_by_column)r_r�r�r �
param_keysrL�or�rr!r$rs            r&�_generate_lazy_clausez LazyLoader._generate_lazy_clause~s�� $� 8��	�:��=��3��D�D��D�D�D���
��%�,���I�I�K�K���(��+�+���Z�'�'�	*��z�)�)�G���!+�	 �	 ��C���� ���w��)J�J��"�F�F��u�e�W���E�E�#�<�<��u�e�W���E� �F�3�K�K��&� � r(c�8�tjd|�d|�d����)N�'z ' is not available due to lazy=')�sa_exc�InvalidRequestError)r_r�r�r�s    r&�_invoke_raise_loadzLazyLoader._invoke_raise_load�s*���(�(�8<���d�d�d�C�
�
�	
r(c���|js&|jjs|jr|jst
jS|j}d}|t
jzs|jr|t
j	zs|rt
j
S|jr<|t
jzs-|jr|t
j
zr|�||d��t|��}|sM|t
jzrt
j
St!jdt%j|���d|j�d����|jr�|�|||��}t
j
|vrt
j
St
j|vrt
jSt-j|��rdS|����|j|||���}|�|t
jurdS|S|t
jzr|t
j
zst
j
S|�||||��S)Nr�r�z> is not bound to a Session; lazy load operation of attribute 'r�)r��lazy_loaded_from)r!r]�load_on_pending�
_load_pending�
session_idrr�r�r��NON_PERSISTENT_OKr�r�NO_RAISE�RELATED_OBJECT_OKr4rr�r�rr��_get_ident_for_use_get�	NEVER_SETr�
issupersetr
�_identity_lookupr��PASSIVE_CLASS_MISMATCH�_emit_lazyload)r_r�r��pending�primary_key_identityr��instances       r&r�zLazyLoader._load_for_state�s]���y�	)��(�8�	)��+�	)�
�#�	)��(�(��i�-��#���*�+�+�	0�D�L�	0��*�6�6�	0�;B�	0��/�/�
��	=��j�1�1�		=��L�	=��Z�9�9�	=� 
�#�#�E�7�G�<�<�<� ��'�'���	���,�,�
4�!�3�3��/�/��%�e�,�,�,�,�d�h�h�h�8���
��<� 	4�#'�#>�#>����$�$� ��+�/C�C�C�!�3�3��%�)=�=�=�!�+�+��#�$8�9�9�
��t��}�}���7�7���$��!&�	8���H��#��z�@�@�@��4�#�O��j�/�/�
4���!=�=�
4�"�3�3��"�"��U�0�'�
�
�	
r(c��������jj}�tjzr|j�n|j��j������fd��jjD��S)Nc�D��g|]}����j|������S)�r��r�)r��pkr��get_attrr�r_r�s  �����r&r�z5LazyLoader._get_ident_for_use_get.<locals>.<listcomp>sD���
�
�
��
�H�U�E�4�#8��#<�g�N�N�N�
�
�
r()r�rLrr*r+r,�dictr�)r_r�r�r��instance_mapperr�rKs` `` @@r&r=z!LazyLoader._get_ident_for_use_get�s��������-�.���Z�6�6�	A�&�J�H�H�&�@�H��
��
�
�
�
�
�
�
�
��k�-�
�
�
�	
r(�sqlalchemy.ext.bakedc�.�|�d���S�N�2)�size��bakery�r_�bakeds  r&�_memoized_attr__bakeryz!LazyLoader._memoized_attr__bakery
����|�|��|�$�$�$r(zsqlalchemy.orm.strategy_optionsc�@�����
�����fd����}|�d��j���jjs|�d����jj�|��fd����j}|s|tjzr|�d����j	r-�j
�j}|��j	|���jrk�j
r���|d��||����fd����|��j��|��S�jjr|��fd	����jjD]O��jt,jur:�jr3t3�jt6��s|���fd
����P���|��\��
|r4t;jt>j �
�!����rdSn3t;jt>j"�
�!����rdS�j
r���|d��|��fd����
fd�}	||����fd
����|	���#��}
�j$r|
StK|
��}|r*|dkrt;j&d�jz��|
dSdS)Nc�8��|��j��Sr)r
r�)r�r_s �r&r'z+LazyLoader._emit_lazyload.<locals>.<lambda>)s������t�{�)C�)C�r(c�P�|����d��Sr)�_adapt_all_clauses�_with_invoke_all_eagers��qs r&r'z+LazyLoader._emit_lazyload.<locals>.<lambda>,s ��a�*�*�,�,�D�D�U�K�K�r(T)�fullc�N��|��j�jj��Sr)�select_fromrLr]�	secondary�r_r_s �r&r'z+LazyLoader._emit_lazyload.<locals>.<lambda>5s"���!�-�-��K��!5�!?���r(c�,�|�d��Sr)�	autoflushr^s r&r'z+LazyLoader._emit_lazyload.<locals>.<lambda>>s��Q�[�[��%7�%7�r(r�c�.��|����Sr��_set_lazyload_from�r_r�s �r&r'z+LazyLoader._emit_lazyload.<locals>.<lambda>Ps���a�.B�.B�5�.I�.I�r(c�P��|jtj�jj���Sr)�order_byrr9r]rds �r&r'z+LazyLoader._emit_lazyload.<locals>.<lambda>Xs#���*�!�*��\�$�"6�"?�@�@��r(c���|��j�|j�j����j����Sr)�options�Load�for_existing_path�
_current_pathr=�lazyloadr!)r_�rev�strategy_optionss ��r&r'z+LazyLoader._emit_lazyload.<locals>.<lambda>gsF���a�i�i�(�-�?�?��O�C�J�7���"�(�3�7�+�+���r(c�.��|����Sr)�filter)r_�lazy_clauses �r&r'z+LazyLoader._emit_lazyload.<locals>.<lambda>zs������+�!6�!6�r(c�J����|j���|_|Sr)�update�_params)r_rs �r&�set_default_paramsz5LazyLoader._emit_lazyload.<locals>.set_default_params~s#����M�M�!�)�$�$�$��A�I��Hr(c�.��|����Srrhrjs �r&r'z+LazyLoader._emit_lazyload.<locals>.<lambda>�s���!�*>�*>�u�*E�*E�r(rzKMultiple rows returned with uselist=False for lazily-loaded attribute '%s' r)'r�add_criteriar]�bake_queries�spoilrcr!r�NO_AUTOFLUSH�load_options�	load_path�_add_lazyload_optionsr�rr4�with_post_criteria�_load_on_pk_identityr
rLrl�_reverse_propertyrIrr�_use_getr�r�r�r/r�has_intersectionrr�values�
_never_set�allr,�len�warn)r_rtr�r�rDr�r_rC�effective_pathr{rn�lrwrrss`` `        @@@r&rBzLazyLoader._emit_lazyloads���������6
�L�L�C�C�C�C�T�J�J��	���K�K�� �	
�	
�	
�
�#�0�	�
�G�G��G������)�5�
�N�N�����
�
�
��i�-���	9�g�
� 7�7�	9�
�N�N�7�7�8�8�8���	H�#�_�T�-A�B�N�
�#�#�E�$6��G�G�G��<�
	��!�
H��'�'��w��G�G�G���'�
�
�#�#�$I�$I�$I�$I�J�J�%�%��M�M�$�+�.�.�0D���
���(�	�
�N�N�����
�
�
��'�9�	�	�C��
��!5�5�5��L�6�"�3�<��<�<�6�
������������#�8�8���H�H���V��	��$�X�%7������I�I�
��t�
��
"�8�#6��
�
���
H�
H�	��4���	D��#�#�E�7�N�C�C�C�	���6�6�6�6�7�7�7�	�	�	�	�	�
�A�g�J�J�
�
� E� E� E� E�
F�
F�
�
� 2�
3�
3�
�S�U�U�		��<�	��M��F���A��

��q�5�5��I�J��.�/�����a�y� ��tr(c�,�
�|j�
|jsMtj|jt�
|���
��}|d�|j|f��dS|js|jr)�
fd�}	|d�|j|	f��dSdS)Nr�c�4��|�|���dSr)�_reset)r�r�r�r!s   �r&�reset_for_lazy_callablez@LazyLoader.create_row_processor.<locals>.reset_for_lazy_callable�s������U�C�(�(�(�(�(r()	r!r�r�"_instance_level_callable_processorrE�LoadLazyAttributer;�populate_existing�always_refresh)r_rcrerfrLrnrgro�set_lazy_callabler�r!s          @r&rpzLazyLoader.create_row_processor�s�����h���"�	J��@��"�$5�c�4�$@�$@�#�!G�!G��
�u��$�$�d�h�0A�%B�C�C�C�C�C�
�
&�
	J�&�*?�
	J�	
)�	
)�	
)�	
)�	
)�
�u��$�$�d�h�0G�%H�I�I�I�I�I�
	J�
	Jr()rqrrrsrtrur\r�r!r/r4r�r=r�dependenciesrWrBrprvrws@r&r�r��s���������

�I�/�/�/�/�/�b
�
�
�0!�!�!�8!�!�!�@
�
�
�
V
�V
�V
�p

�

�

��T��-�.�.�%�%�/�.�%��T��8�9�9�H�H�:�9�H�T J� J� J� J� J� J� Jr(r�c�,�eZdZdZd�Zejfd�ZdS)r�z-serializable loader object used by LazyLoaderc�,�||_|j|_dSr)r!r`)r_r!�initiating_strategys   r&r\zLoadLazyAttribute.__init__�s�����/�<����r(c��|j}|jj}|j|}|j|j}|�||��Sr)r!r�rLrCr�r`r�)r_r�r�r!rMr#r�s       r&r�zLoadLazyAttribute.__call__�sF���h���-�.���%�c�*���#�D�$5�6���'�'��w�7�7�7r(Nr�rmr(r&r�r��sE������7�7�=�=�=�'1�&<�8�8�8�8�8�8r(r��	immediatec�*�eZdZdZd�Z		dd�Zd�ZdS)�ImmediateLoaderrmc�`�|j�d���|��dS�N�)r�r��r]r�r�r�s  r&r�z$ImmediateLoader.init_class_attribute��2����*�*�!�	
�	
�
�
�v�
&�
&�
&�
&�
&r(Nc��dSrrm)	r_rcr�rerfrgrh�parentmapperris	         r&rkzImmediateLoader.setup_query�s	��	
�r(c�V���fd�}|d��j|f��dS)Nc�d��|��j���||��dSr)r�r!rDr�s   �r&�load_immediatez<ImmediateLoader.create_row_processor.<locals>.load_immediate�s-����N�N�4�8�$�$�(�(���6�6�6�6�6r(�delayedr�)	r_rcrerfrLrnrgror�s	`        r&rpz$ImmediateLoader.create_row_processor�sD���	7�	7�	7�	7�	7�	�9��$�$�d�h��%?�@�@�@�@�@r(�NN)rqrrrsrur�rkrprmr(r&r�r��sX�������I�'�'�'���
�
�
�
�A�A�A�A�Ar(r��subqueryc���eZdZdZ�fd�Zd�Z		dd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�ZGd�d
e
��Zd�Zd�Zd�Z�xZS)�SubqueryLoader)�
join_depthc�|��tt|���||��|jj|_dSr)r[r�r\r]r�r^s   �r&r\zSubqueryLoader.__init__�s4���
�n�d�#�#�,�,�V�\�B�B�B��.�9����r(c�`�|j�d���|��dSr�r�r�s  r&r�z#SubqueryLoader.init_class_attribute�r�r(Nc�h�|jjsdS|jjr|j�d��||j}|�|jdd��}	|	�|	}
n|j}
|j�dtj	j
��}||z}|�|jd��sY|jr6|jj
r|jj
jnd|jzdz|jkrdSn|�|j��rdS|�|��\}}
}|j�dt$f|j��}|�|||
||j��}|j�|
��}dt$f|d|i|_|�d��}|�||��\}}}|j|�}|�|||||
��}|�||||
��}|�|��}|�|jd|��dS)	Nr��path_with_polymorphic)�
subquery_pathN�loaderrr�
orig_queryF)r
�_enable_eagerloads�
_yield_per�
_no_yield_perr]rDrr�r�PathRegistry�root�containsr�rq�length�contains_mapperrL�
_get_leftmostr��_generate_from_original_query�entity_zeror��_attributes�_set_enable_single_crit�_prep_for_joins�add_columns�_apply_joins�_setup_options�_setup_outermost_orderbyr�)r_rcr�rerfrgrhr�ri�with_poly_entity�effective_entity�	subq_path�leftmost_mapper�
leftmost_attr�leftmost_relationshipr��
left_aliasr_�to_join�
local_attr�parent_aliass                     r&rkzSubqueryLoader.setup_query�s����}�/�	4��F�
�]�
%�	4��M�'�'�
�3�3�3��D�(�)�� �8�8��� 7��
�
���'�/���#�{���&�*�*�#�X�%:�%?�
�
�	���$�	��}�}�W�/��:�:�	���
�#�=�6���
�3�:�:���k�"�����(�(��F�(��*�*�4�;�7�7�
���
���y�)�)�		
���!��'�+�+�
�>�*�G�M�
�
�
��7�7����!���
�
�
�
��$�$�%5�6�6��
�>�*�J�#�Y�
��
�

�%�%�e�,�,��,0�,@�,@��	�-
�-
�)���\�
�A�M�:�&�����
�w�
�L�2B�
�
��
����9�j�:J�K�K���)�)�!�,�,��	
����#�Z��3�3�3�3�3r(c�����j�tj�d��}|j�|��r|j�dur|j|jc�}n|�dc�}|j}��fd�|D��}�||fS)Nrrc�f��g|]-}t�dj�j|j����.S�r)�getattrr��_columntopropertyr!)r�rjr�r�s  ��r&r�z0SubqueryLoader._get_leftmost.<locals>.<listcomp>ksL���
�
�
��
��!��#�_�%F�q�%I�%M�
�
�
�
�
r()rer�_class_to_mapperr=�isar]�
local_columns)r_r��subq_mapper�
leftmost_prop�
leftmost_colsr�r�s `    @r&r�zSubqueryLoader._get_leftmost\s������N�	��/�	�!��=�=��
�K�O�O�K�(�(�	G��$�	�!��4�4�-1�[�$�:N�*�O�]�]�-8�)�A�,�*�O�]�%�3�
�
�
�
�
�
�#�	
�
�
�
��
�}�<�<r(c���|����d��}|js?|�t	td�|jD������d��|�|��}|�|��|j	}|durd|_
nN|�Ltd�|D����D]2}	t|���|	j��s	d|_
n�3|j
dur|j|_
|j�|j�d|_
|������}
t'j||
d���}|S)Nc�.�g|]}|d�
|d��S)r�rm)r��ents  r&r�z@SubqueryLoader._generate_from_original_query.<locals>.<listcomp>�s0����� #�"�8�}�8� ��M�8�8�8r(FTc3�$K�|]}|jV��dSr)�table)r�rjs  r&r�z?SubqueryLoader._generate_from_original_query.<locals>.<genexpr>�s$����6�6�Q���6�6�6�6�6�6r(��use_mapper_path)�_clone�	correlate�	_from_obj�_set_select_fromr8r��column_descriptions�_adapt_col_list�
_set_entities�distinct_target_key�	_distinctr?r��	_order_byrl�_limit�_offset�with_labelsr�r�AliasedClass)r_r�r�r�r��orig_entityr_�target_colsr��t�embed_qr�s            r&r�z,SubqueryLoader._generate_from_original_queryts���
�����)�)�$�/�/���{�	�
�������'1�'E���������
�
�
�"�'�'�
�6�6��	����$�$�$�3�G���$�&�&��A�K�K�
 �
(��6�6�+�6�6�6�6�6�
�
���;�'�'�2�2�1�=�A�A��"&�A�K��E��
�;�%���)�2�A�K�
�8���	� 1��A�K�
�-�-�/�/�*�*�,�,���*��W�d�
�
�
�
��r(c���
�g}t|�����}t|��D]\\}\}}|dkr0||dz
dj}|�|��r|n|}	n|}	|�|	|jf���]t|��dkr|�
nEt|dd��}
|
j	r|
j
�
ntj|
j
d����
�j
j}�
�fd�|D��}||�
fS)Nrrr���Tr�c�Z��g|]'}t��jj|j����(Srm)r�r=r�r!)r�rjr�r_s  ��r&r�z2SubqueryLoader._prep_for_joins.<locals>.<listcomp>�s@���
�
�
��
�L�$�+�"?��"B�"F�G�G�
�
�
r()r8�pairs�	enumeraterLr�r;r!r�rr�r�rr�r]r�)r_r�r�r�r��irLr#�prev_mapper�	to_appendr�
local_colsr�r�s`            @r&r�zSubqueryLoader._prep_for_joins�sJ�������Y�_�_�&�&�'�'��!*�5�!1�!1�	2�	2��A�~����1�u�u�$�A��E�l�1�o�4��+6�?�?�6�+B�+B�N�K�K��	�	�"�	��N�N�I�t�x�0�1�1�1�1�
�w�<�<�!���&�L�L��7�2�;�q�>�*�*�D��$�
�#�{��� (�4��K�� � � ���)�7�
�
�
�
�
�
��
�
�
�
��
�L�0�0r(c��t|��}|dkr2t||dd���|��g}�nu|dkr`t||dd���|��t||dd���|��g}�n|dk�rd�|dd�D��}g}|r�|�d��}	t|	d|	d��}
|r"|
�|dd��}
n|
�|��}
|�|
��|��t||dd���|dj��g|zt||dd���|��gz}|D]}
|�|
d���}�|S)Nrrrr�c��g|]K}t|d��jstj|d��n|dj|df��LS)rr)rr�rr�r�)r��items  r&r�z/SubqueryLoader._apply_joins.<locals>.<listcomp>�sg������	#�4��7�+�+�<�(�H�)�$�q�'�2�2�2��a�����G�	���r(T)�from_joinpoint)r�r��of_type�popr;r=�join)r_r_r�r�r�r��ltj�middle�innerr�attrs           r&r�zSubqueryLoader._apply_joins�s����'�l�l���!�8�8��
�G�A�J�q�M�2�2�:�:�;K�L�L��G�G��A�X�X��
�G�A�J�q�M�2�2�:�:�<�H�H���g�b�k�!�n�5�5�=�=�$����G�G��1�W�W���$�A�b�D�M����F��E��
#��z�z�!�}�}���t�A�w��Q��0�0���6��<�<��q�	�!��5�5�D�D��<�<��5�5�D����T�"�"�"��
#���W�Q�Z��]�3�3�;�;�E�!�H�O�L�L�M����L�'�"�+�a�.�9�9�A�A�(�����
��	2�	2�D����t�D��1�1�A�A��r(c�t�|�|��}|j|j�}|jr|j|_|Sr)�_with_current_path�_conditional_options�
_with_options�_populate_existing)r_r_r�r�r�s     r&r�zSubqueryLoader._setup_optionssE��
� � ��+�+��"�A�"�J�$<�=���(�	A�#-�#@�A� ��r(c��|jjrM|jd}|j�tj|jj����}|j|�}|Sr)r]rlr��_target_adapter�copy_and_processrr9)r_r_�	eagerjoin�eager_order_bys    r&r�z'SubqueryLoader._setup_outermost_orderby"s]����(�
	,���A��I�&�6�G�G���T�1�:�;�;���N���
�N�+�A��r(c�.�eZdZdZdZd�Zd�Zd�Zd�ZdS)�SubqueryLoader._SubqCollectionsz�Given a :class:`_query.Query` used to emit the "subquery load",
        provide a load interface that executes the query at the
        first moment a value is needed.

        Nc��||_dSr)�subq)r_rs  r&r\z(SubqueryLoader._SubqCollections.__init__9s
���D�I�I�Ir(c�n�|j�|���|j�||��Sr)�_data�_loadrD)r_r!rs   r&rDz#SubqueryLoader._SubqCollections.get<s-���z�!��
�
�����:�>�>�#�w�/�/�/r(c���tjt��|_t	j|jd���D]/\}}|j|�d�|D�����0dS)Nc��|dd�S)Nrrm��xs r&r'z7SubqueryLoader._SubqCollections._load.<locals>.<lambda>Cs��q����u�r(c3�&K�|]}|dV��
dS)rNrm�r��vvs  r&r�z8SubqueryLoader._SubqCollections._load.<locals>.<genexpr>Ds&����$7�$7�r�R��U�$7�$7�$7�$7�$7�$7r()�collections�defaultdictr8r�	itertools�groupbyr�extend)r_r��vs   r&rz%SubqueryLoader._SubqCollections._loadAsn��$�0��6�6�D�J�!�)�$�)�_�_�E�E�
8�
8���1��
�1�
�$�$�$7�$7�Q�$7�$7�$7�7�7�7�7�
8�
8r(c�@�|j�|���dSdSr)rr)r_r�r�r�s    r&r�z&SubqueryLoader._SubqCollections.loaderFs#���z�!��
�
������"�!r()	rqrrrsrtrr\rDrr�rmr(r&�_SubqCollectionsr0sa������	�	���	�	�	�	0�	0�	0�
	8�	8�	8�
	�	�	�	�	r(r+c�F��|jj|jjjstjd|z���||j}|�|j	d��}|�dS|j
|j
us
Jd���|jj}	|�|j	d��}
|
�1|�|��}
|�
|j	d|
���r�fd�|	D��}	|jr|�||
|	|��dS|�||
|	|��dS)N�J'%s' does not support object population - eager loading cannot be applied.r�zlSubquery session doesn't refer to that of our context.  Are there broken context caching schemes being used?r$c�*��g|]}�j|��SrmrX)r�rjrgs  �r&r�z7SubqueryLoader.create_row_processor.<locals>.<listcomp>ks ���A�A�A��'�/�!�,�A�A�Ar()r=rEr!�impl�supports_populationr2r3r]rDrr�r�r+r�r,�_create_collection_loader�_create_scalar_loader)r_rcrerfrLrnrgrorrr$s      `    r&rpz#SubqueryLoader.create_row_processorJso����{�(���2�7�K�	��,�@�BF�G���
�
�D�(�)���x�x��*�J�7�7���<��F��|�w��.�.�.�
"�/�.�.��)�7�
�
�h�h�w�1�=�A�A�����/�/��5�5�K��H�H�W�'���D�D�D��	B�A�A�A�A�j�A�A�A�J��<�	��*�*���j�*�
�
�
�
�
�
�&�&���j�*�
�
�
�
�
r(c���������fd����fd�}|d��j�f��|d��j|f��|jr)|d��j�jf��dSdS)Nc�����jt�fd��D����d��}|��j���|||��dS)Nc� ��g|]
}�|��Srmrm�r�r�r�s  �r&r�z_SubqueryLoader._create_collection_loader.<locals>.load_collection_from_subq.<locals>.<listcomp>{����6�6�6�C�s�3�x�6�6�6r(rm)rD�tupler�r!�set_committed_value)r�r�r��
collectionr$rr_s  ` ���r&�load_collection_from_subqzKSubqueryLoader._create_collection_loader.<locals>.load_collection_from_subqysr����(����6�6�6�6�:�6�6�6�7�7����J�
�N�N�4�8�$�$�8�8��u�j�
�
�
�
�
r(c�8���j|vr�|||��dSdSrr�)r�r�r�r;r_s   ��r&�&load_collection_from_subq_existing_rowzXSubqueryLoader._create_collection_loader.<locals>.load_collection_from_subq_existing_row�s3����x�u�$�$�)�)�%���<�<�<�<�<�%�$r(r��existing�eager�r;r!�invoke_all_eagersr�)r_rcr$rror=r;s` ``  @r&r1z(SubqueryLoader._create_collection_loadervs�������	�	�	�	�	�	�	�	=�	=�	=�	=�	=�	=�	�5�� � �$�(�,E�!F�G�G�G��:��%�%�
�X�=�>�	
�	
�	
��$�	G��w��&�&���+�2D�'E�F�F�F�F�F�	G�	Gr(c���������fd����fd�}|d��j�f��|d��j|f��|jr)|d��j�jf��dSdS)Nc� ����jt�fd��D����d��}t|��dkrtjd�z��|d}|��j���|||��dS)Nc� ��g|]
}�|��Srmrmr6s  �r&r�zWSubqueryLoader._create_scalar_loader.<locals>.load_scalar_from_subq.<locals>.<listcomp>�r7r(rr�LMultiple rows returned with uselist=False for eagerly-loaded attribute '%s' r)rDr8r�rr�r�r!r9)r�r�r�r:�scalarr$rr_s  `  ���r&�load_scalar_from_subqzCSubqueryLoader._create_scalar_loader.<locals>.load_scalar_from_subq�s�����(����6�6�6�6�:�6�6�6�7�7����J��:����"�"��	�G�IM�N����
 ��]�F��N�N�4�8�$�$�8�8���v�N�N�N�N�Nr(c�8���j|vr�|||��dSdSrr�)r�r�r�rGr_s   ��r&�"load_scalar_from_subq_existing_rowzPSubqueryLoader._create_scalar_loader.<locals>.load_scalar_from_subq_existing_row�s3����x�u�$�$�%�%�e�U�C�8�8�8�8�8�%�$r(r�r>r?r@)r_rcr$rrorIrGs` ``  @r&r2z$SubqueryLoader._create_scalar_loader�s�������	O�	O�	O�	O�	O�	O�	O�	9�	9�	9�	9�	9�	9�	�5�� � �$�(�,A�!B�C�C�C��:��%�%�
�X�9�:�	
�	
�	
��$�	G��w��&�&���+�2D�'E�F�F�F�F�F�	G�	Gr(r�)rqrrrsrur\r�rkr�r�r�r�r�r��objectr+rpr1r2rvrws@r&r�r��s.������� �I�:�:�:�:�:�'�'�'���a4�a4�a4�a4�F=�=�=�0?�?�?�B-1�-1�-1�^2�2�2�h�����������6����4*�*�*�XG�G�G�.G�G�G�G�G�G�Gr(r��joinedc�z��eZdZdZdZ�fd�Zd�Z			dd�Zd�Zd	�Z	d
�Z
d�Zd�Z	dd
�Z
d�Zd�Zd�Zd�Z�xZS)�JoinedLoaderzcProvide loading behavior for a :class:`.RelationshipProperty`
    using joined eager loading.

    )r��_aliased_class_poolc���tt|���||��|jj|_g|_dSr)r[rMr\r]r�rNr^s   �r&r\zJoinedLoader.__init__�s>���
�l�D�!�!�*�*�6�<�@�@�@��.�9���#%�� � � r(c�`�|j�d���|��dSr�r�r�s  r&r�z!JoinedLoader.init_class_attribute�r�r(NFc	�*�|jjsdS|jjr!|jr|j�d��||j}d}
|r|�||��nd}|dur|�|||||��\}}}
nu|�|j	d��s9|j
r|jdz|j
krdSn|�|j
��rdS|�||||||||��\}}}
}|�|j	dd��}|�t!|��j}
nd}
||j}t'j||j
||||
|
|j
|��	�	|�*dt+|j��vrt/jd���dSdS)	z@Add a left outer join to the statement that's being constructed.Nzjoined collectionFr�rr�)�with_polymorphicr��chained_from_outerjoinz�Detected unaliased columns when generating joined load.  Make sure to use aliased=True or flat=True when using joined loading with with_polymorphic().)r
r�r�r,r�r]�_init_user_defined_eager_proc�$_setup_query_on_user_defined_adapterr�rr�r�r�rL�_generate_row_adapterrDr�with_polymorphic_mappersr�r�_setup_entity_queryr��secondary_columnsr2r3)r_rcrdrerfrgrhr�rSrirR�user_defined_adapter�clauses�add_to_collectionr�s               r&rkzJoinedLoader.setup_query�s?���}�/�	=��F�
�]�
%�	=�$�,�	=��M�'�'�(;�<�<�<��D�(�)�����
�D�.�.�w��@�@�@��	� �u�,�,�
�9�9���t�W�6J���	
���!�!��=�=��!3�X�>�>�
��?���{�Q����8�8���9��)�)�$�+�6�6���F��*�*������!��&�	�	�
���!�&� �8�8��� 7��
�
���'�&� � � �&�
�� $���D�K� ���#���K�����-���#9�
	
�
	
�
	
�
	
��'�D�C��%�5
�5
�-
�-
��,�E���
�(�'�-
�-
r(c��d|jvrdS|jj}|�|jdd��}|dur|S|jd}|dd�\}}|�Pt|t��r|j�|��}tj
||jj���}n||�
|jd��r<|�|jd��}tj||jj���}n%|jj�|jd��}|�|jd|��|S)N�eager_from_aliasF� user_defined_eager_row_processor���)rr�)r�rer=rDrr��strr��aliasr%�
ColumnAdapterrLrr�r�
ORMAdapterr
�_polymorphic_adaptersr�)	r_rfrcrergrb�root_mapperr#r�s	         r&rTz*JoinedLoader._init_user_defined_eager_procsq���W�%7�7�7��5��|�"���(�(��� B�E�
�
���%����N��"�#5�6�� ����I���T����%��%�%�
1���)�)�%�0�0���,��4�;�#B����G�G��}�}�W�/�1H�I�I�
�#'�8�8��&�(?�$�$� �#�-�$� $�� ?������
"�-�=�A�A��K�����	
����� B�G�	
�	
�	
��r(c��|�|j|��}|r4|r2|�|��}|�|jd|��n |r|}|�|jd|��|j}|||fS)Nr_)�_get_entity_clausesr
�wrapr�r�primary_columns)r_rcr�rergrZr\s       r&rUz1JoinedLoader._setup_query_on_user_defined_adapterMs����,�,�W�]�G�D�D���
	�+�
	�#7�#<�#<�W�#E�#E� ��H�H��"�2�$�
�
�
�
�
�	�#*� ��H�H��"�2�$�
�
�
�$�3��#�W�.?�?�?r(c���t|j��jrt|j��j}nd}d|f}||jvr
dx|j|<}n|j|dzx|j|<}|t|j��krhtj|j	|�|�
d���nddd���}t|��jj|j�|��|j|S)N�joinedloader_acrrT)�flat)rbrmr�)
rr�r��
selectablerr�rNrr�rLrbrjr;)r_rc�alt_selectabler!�idx�to_adapts      r&�_gen_pooled_aliased_classz&JoinedLoader._gen_pooled_aliased_classgs��
�4�;���0�	"�$�T�[�1�1�<�N�N�!�N� �$�'���g�(�(�(�,-�-�G��s�#�c�c�,3�,>�s�,C�a�,G�G�G��s�#�c��#�d�.�/�/�/�/��,���!�-�%�*�*��*�5�5�5��� $�
���H�
�H���(�*�*��$�+�+�H�5�5�5��'��,�,r(c	
�2�|�|jdd��}	|	r|	}
n|�|��}
t|
���d|ft
j|
|jjddd���}|j	�J�|j
jrd|_|�%|j
�d|j
j��n|j
j}|sd}|j�|j|||||||f��|j}
|�|jd|��|||
|fS)Nr��joinedloader_ormadapterTF)r�adapt_required�allow_label_resolve�anonymize_labels�	innerjoin�eager_row_processor)rDrrrr�_memorrdrLr�
aliased_classr]r,�multi_row_eager_loadersr�rx�create_eager_joinsr;�_create_eager_joinrYr�)r_rcr�rerfrgrhr�rSr�rqr[rxr\s              r&rVz"JoinedLoader._generate_row_adapter�sl�� �8�8��� 7��
�
���	?�'�H�H��5�5�g�>�>�H��(�#�#�)�)�
&��-������7�� %�!�*�
�
���$�0�0�0���'�	3�.2�G�+��"�
��"�"�;��0D�0N�O�O�O��%�/�	��	*�&*�"��"�)�)��'�������&�	
�	
�	
�	
�$�5������#�%:�G�D�D�D���!2�4J�J�Jr(c		��|�|j}	n|}	|jo|jj}
d}||jvrn|
sl|jret
j|j|j��}t|��dkrtjd���|r|j|d}
|d|
}}|�	||j}}|j�||��}|r�t|dd��rit|j���|	�|j��r|	n|j��}t|j|j|j��}nBtt-j|j|jd���|j|j��}n|j}|j�J�|p|p|dkp|jj}|rSt-j||j||p'|jjp|ot7|t8j��|j|j���}n|�||||��}||j|<|j|_|sit
j |jj!��D]J}|	j"j#�$|��r)|r
|j%|}|j&�'|���K|jj(rF|xj)|j*�+tYj-|jj(����z
c_)dSdS)	Nrz�Can't identify which query entity in which to joined eager load from.   Please use an exact match when specifying the join path.rr{Tr��unnested��isouter�
_left_memo�_right_memo).rLr|r
�_should_nest_selectable�eager_joins�from_clauser%�#find_left_clause_that_matches_givenrnr�r2r3�
setdefaultr�rr{�_entity_for_mapperr�r=r�r!r]rr�r��represents_outer_join�_ORMJoinr�r�Join�_splice_nested_inner_join�stop_on�
_find_columns�primaryjoin�persist_selectablerj�contains_columnrYrjr;rlrrrrr9)r_rcrdrergr�r[rxrSr��should_nest_selectable�query_entity_key�indexes�clause�default_towrap�towrap�efm�onclause�attach_on_outsiderr�s                     r&r~zJoinedLoader._create_eager_join�s�����&�-�K�K�&�K�
�+�
6��
�5�	�
 ��
�� 3�3�3�*�
4��#�
4��B��#�\�%<���G��7�|�|�a����0�0�����
F� �,�W�Q�Z�8��
4;�1�:�v�.� ��#���'�-��
�$�/�/��n�
�
���	,��w���6�6�
�
�g�3�4�4�G�G�"���t�{�3�3�%�K�K������#�3�:�t�x��9M�N�N���"��)���W�%7������H��(������+�H��$�0�0�0�'�&�
>��}�
>��J�&�
>��'�=�		��	� �)���%��%�
�M��+�A�M�*�K�z�&�#�(�/K�/K��;� �K�	�	�	�I�I��6�6��f�g�x���I�1:���,�-�)�3�	���	8� �-��$�0���
8�
8���1�3�C�C�C�H�H�8��3�%�o�c�2���+�2�2�3�7�7�7����(�	;��"�"��)�:�:��l�4�/�8�9�9�+;�+;�
;�"�"�"�"�	;�	;r(c	�:�|durt|tj��sJ�n�t|tjj��r|�||j|||��St|tj��s6|d|ur*tj||j|d||dj	���SdS|�||j
|||j��}|�8d}|�||j|||j
��}|�|dus
Jd���dSnd}|rR|js|js|�|��}n[tj|j||j|j|j
���}n-tj||j
|j|j|j���}|j|_|S)	NFr`r�r�z9assertion failed attempting to produce joined eager loadsT)r�r�)r�r�)r�rr�rrn�FromGroupingr��elementr{rL�rightr��leftr�r��_splice_into_centerr�r)	r_re�join_objr[r��splicing�target_join�right_splicers	         r&r�z&JoinedLoader._splice_nested_inner_joinXs���u����h��(9�:�:�:�:�:�:�
��#�.�"=�
>�
>�	��1�1��h�&���8���
��H�h�&7�8�8�	��B�x�8�#�#��(���)��!�'� $�R���
�����t��4�4��(�.�'�8�X�5I�
�
���� �L��8�8��h�m�W�h��8K���K��"��E�)�)�)�N�*�)�)��t�
#� �L��	��#�	
�K�,?�	
�$�8�8��E�E�	�	�$�-��M���%�$�,�'�2����	�	�!�)�����!� �(�$�0����I�%0�$?�	�!��r(c�$�|r|�||��nd}|dur5|}|jr|r|�|j��}n.|jr|j}n|�|jd��}|�dS|j�||��r|SdS)NFry)rTrgrirDrrL�_result_has_identity_key)r_rcrnrgrerfrZ�	decorators        r&�_create_eager_adapterz"JoinedLoader._create_eager_adapter�s����
�D�.�.�w��@�@�@��	� �u�,�,�,�I���
,�9�
,�%�N�N�7�?�;�;�	�	���
,�#�O�	������!3�5J�K�K�I�� ��u��;�/�/��	�B�B�	����5r(c	��|jj|jjjstjd|z���||j}|�|||||��}	|	durj|j}
tj
|j||||j|	��}|j
s|�||
||��dS|�||
||��dS|j�d���|||||||��dS)Nr-Fr�)r=rEr!r/r0r2r3r]r�r�_instance_processorrLr�r,r2r1r�rp)r_rcrerfrLrnrgro�our_path�
eager_adapterr!�	_instances            r&rpz!JoinedLoader.create_row_processor�sO���{�(���2�7�K�	��,�@�BF�G���
�
��,�-���2�2��V�W�h��
�
�
���%�%��(�C��3��������%����I��<�
��*�*�7�C��J�O�O�O�O�O��.�.��S�)�Z������
� �.�.�%�
�
�"�"���w���������r(c��������fd�}���fd�}�fd�}|d�|j|f��|d�|j|f���jr$|d�|j|f��dSdS)Nc���tj||���}tj|d��}|�j|�f<�|��}|�|�|��dSdS�N�append_without_event�r�init_state_collectionr�UniqueAppenderr;)	r�r�r�r:�result_list�instr�rcr!s	      ���r&�#load_collection_from_joined_new_rowzSJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_new_row�sw���#�9�%���L�L�J��-��2���K�0;�G���s�|�,��9�S�>�>�D����"�"�4�(�(�(�(�(� �r(c����|�f�jvr�j|�f}n7tj||���}tj|d��}|�j|�f<�|��}|�|�|��dSdSr�r�)	r�r�r�r�r:r�r�rcr!s	      ���r&�(load_collection_from_joined_existing_rowzXJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_existing_row�s�����s�|�w�1�1�1�%�0�%���>���(�=��5�#���
�#�1�� 6����4?��"�E�3�<�0��9�S�>�>�D����"�"�4�(�(�(�(�(� �r(c����|��dSrrm�r�r�r�r�s   �r&� load_collection_from_joined_execzPJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_exec������I�c�N�N�N�N�Nr(r�r>r?�r;r!rA)r_rcr!r�ror�r�r�s ```    r&r1z&JoinedLoader._create_collection_loader�s�����	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�&	�	�	�	�	�	�5�� � �
�X�:�;�	
�	
�	
�	�:��%�%�
�X�?�@�	
�	
�	
��$�	��w��&�&���;�<�
�
�
�
�
�	�	r(c�������fd�}���fd�}�fd�}|d��j|f��|d��j|f��|jr$|d��j|f��dSdS)Nc�$���|��|�<dSrrm)r�r�r�r�r!s   ��r&�load_scalar_from_joined_new_rowzKJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_new_rows���#��3���E�#�J�J�Jr(c�z���|��}�|vr%||�urtjd�z��dSdS||�<dS)NrE)rr�)r�r�r�r>r�r!r_s    ���r&�$load_scalar_from_joined_existing_rowzPJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_existing_rowso���!�y��~�~�H��e�|�|��5��:�-�-��I�K��������.�-�&��c�
�
�
r(c����|��dSrrmr�s   �r&�load_scalar_from_joined_execzHJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_exec&r�r(r�r>r?r�)r_rcr!r�ror�r�r�s` ``    r&r2z"JoinedLoader._create_scalar_loader
s������	(�	(�	(�	(�	(�	(�
	&�	&�	&�	&�	&�	&�	&�&	�	�	�	�	�	�5�� � �$�(�,K�!L�M�M�M��:��%�%�
�X�;�<�	
�	
�	
��$�	��w��&�&���7�8�
�
�
�
�
�	�	r()NNF)F)rqrrrsrtrur\r�rkrTrUrrrVr~r�r�rpr1r2rvrws@r&rMrM�s1���������
4�I�&�&�&�&�&�
'�'�'���$�^�^�^�^�@-�-�-�^@�@�@�4!-�!-�!-�F=K�=K�=K�~M;�M;�M;�`;@�D�D�D�D�L���8%�%�%�N*�*�*�X#�#�#�#�#�#�#r(rM�selectinc����eZdZdZejdgd���ZdZ�fd�Zd�Z	d�Z
d�Zd	�Ze
jd
��d���Zd�Ze
jd
��d
���Zd�Zd�Z�xZS)�SelectInLoader)r��	omit_join�
_parent_alias�_query_info�_fallback_query_infor�	queryinfo)�load_only_child�load_with_join�in_expr�pk_cols�zero_idx�child_lookup_colsi�c���tt|���||��|jj|_|jjtju}|jj�|jj|_ne|j�	d��}|r
|j
|_n<|jjd�
|jd|jj���|_|jrQ|r4|���|_|���|_dS|���|_dS|���|_dS)Nr�rTr)r[r�r\r]r�rIrrr�r�r�r=r
r�r�r�_init_for_omit_join_m2or��_init_for_joinr��_init_for_omit_join)r_r=r`�is_m2o�
lazyloaderras     �r&r\zSelectInLoader.__init__Ms=���
�n�d�#�#�,�,�V�\�B�B�B��.�9����%�/�:�3G�G����)�5�!�1�;�D�N�N��-�;�;�%���J��
�!+�!3����!%��!8��!;�!C�!C��-� $� $�� ?�"D�"�"����>�	5��
>�#'�#?�#?�#A�#A�� �,0�,?�,?�,A�,A��)�)�)�#'�#;�#;�#=�#=�� � � �#�2�2�4�4�D���r(c�d���t�jjj�������fd�t���D�����fd��jjD��x}}t|��dkrtj
|�}d}n
|d}d}��dd|||d��S)Nc3�r�K�|]1}�jj�|d��D]}|�|fV���2dS)rmN)r=rrD)r�r��equiv�pk_to_fkr_s   ��r&r�z5SelectInLoader._init_for_omit_join.<locals>.<genexpr>nsl�����
�
����8�<�<�Q��C�C�
�
���H�Q�K� �
�
�
�
�
�
�
r(c�(��g|]}|�v��|��Srmrm)r�r�r�s  �r&r�z6SelectInLoader._init_for_omit_join.<locals>.<listcomp>ts)���
�
�
�!��x���H�S�M���r(rFrT)rLr]r	�local_remote_pairsryr8r=r�r�r�tuple_�
query_info)r_r��fk_colsr�r�r�s`    @r&r�z"SelectInLoader._init_for_omit_joinjs������� �0�C�
�
��	���
�
�
�
�
��(�^�^�
�
�
�	
�	
�	
�
�
�
�
�%)�[�%<�
�
�
�	
��'��w�<�<�!����j�'�*�G��H�H��a�j�G��H����u�e�W�g�x��N�N�Nr(c���|jj}t|��dkrtj|�}d}n
|d}d}|j�d����fd�|D��}|�dd||||��S)NrFrTr�c�*��g|]}�j|��SrmrI)r�rJr�s  �r&r�z:SelectInLoader._init_for_omit_join_m2o.<locals>.<listcomp>�s!���I�I�I�2�z�2�2�6�I�I�Ir()rLr�r�rr�r]r�r�)r_r�r�r��lookup_colsr�s     @r&r�z&SelectInLoader._init_for_omit_join_m2o�s�����+�)���w�<�<�!����j�'�*�G��H�H��a�j�G��H��)�7�7�8M�N�N�
�I�I�I�I��I�I�I������%��'�8�[�
�
�	
r(c�(��t|jj��|_t	|j����fd�|jjD��}t
|��dkrtj|�}d}n
|d}d}|�	dd|||d��S)Nc�:��g|]}��|����Srm��_adapt_element)r�r��pa_insps  �r&r�z1SelectInLoader._init_for_join.<locals>.<listcomp>�s4���
�
�
�,/�G�"�"�3�'�'�
�
�
r(rFrT)
rr=rHr�rr�r�rr�r�)r_r�r�r�r�s    @r&r�zSelectInLoader._init_for_join�s����$�T�[�%7�8�8����$�,�-�-��
�
�
�
�37�;�3J�
�
�
���w�<�<�!����j�'�*�G��H�H��a�j�G��H����u�d�G�W�h��M�M�Mr(c�`�|j�d���|��dSr�r�r�s  r&r�z#SelectInLoader.init_class_attribute�r�r(rNc�.�|�d���SrPrSrUs  r&rWz%SelectInLoader._memoized_attr__bakery�rXr(c���|jj|jjjstjd|z���|jjptj
j|z}tj|d|j��sdStj�|||j��rdS||j}	||j}
|	�|jdd��}|�|}n|j}|	�|jd��s9|jr|
jdz|jkrdSn|
�|j��rdStj�|||j|j|j|��dS)Nr-r�r�r�r)r=rEr!r/r0r2r3r
rqrr�r��_entity_isar�PostLoad�path_existsr]rDrr�r�r�r�r�rL�callable_for_path�_load_for_path)
r_rcrerfrLrnrgro�
selectin_path�path_w_prop�selectin_path_w_propr�r�s
             r&rpz#SelectInLoader.create_row_processor�s����{�(���2�7�K�	��,�@�BF�G���
�
�M�'�E�8�+@�+E���
��#�D��H�d�k�:�:�	��F���'�'��]�D�$8�
�
�	�
�F��4�/�0��,�T�-A�B��'�?�?��� 7��
�
���'�/���#�{���#�#�G�$6��A�A�	���
�'�.��2�T�_�D�D��F�E�%�5�5�d�k�B�B�
�����*�*����K�� ����
	
�	
�	
�	
�	
r(c�t�����������|r�j|vrdS�j}|jr�tjt
��}g}	�j�|D]�\�}
�j�t���fd�|j	D����}tj|vr	�j}n<d|vr||�
��|
f���h|	�
��|
f����|jsd�|D��}|j�|j�|jsGt#�����jr1�fd��D����������fd��D�������fd����}|js|��fd���n!�j�|����fd���|jr|��fd���n|��fd	���|j}
|�|
j|�j��|
jr|�d
����jjr[|js:�jj��jr�fd��D���|��fd���n�fd
�}|�|��|jr��||	|||��dS��||||��dS)Nc3�^�K�|]'}����|tj���V��(dS)rHN)r,r�PASSIVE_NO_FETCH)r��lkrLr��
state_dicts  ���r&r�z0SelectInLoader._load_for_path.<locals>.<genexpr>�s]�����&�&��
�4�4��"�� *� ;�	5���&�&�&�&�&�&r(c�@�g|]\}}|jd||j|f��S)r)r!rL)r�r��	overwrites   r&r�z1SelectInLoader._load_for_path.<locals>.<listcomp>		s=�����$�E�9���1��u�e�j�)�<���r(c�:��g|]}��|����Srmr��r�r��insps  �r&r�z1SelectInLoader._load_for_path.<locals>.<listcomp>	�'���G�G�G��4�.�.�s�3�3�G�G�Gr(c�:��g|]}��|����Srmr�rs  �r&r�z1SelectInLoader._load_for_path.<locals>.<listcomp>	rr(c�P��|�tjdg��R����S)NrJ)r
�Bundle)r�r�r�s ��r&r'z/SelectInLoader._load_for_path.<locals>.<lambda>	s-���G�M�M���T�,�G�,�,�,�.>���r(c�.��|����Sr)rb)r_r�s �r&r'z/SelectInLoader._load_for_path.<locals>.<lambda>+	s���Q�]�]�3C�%D�%D�r(c���|�����t��jj��������Sr)rbrr�r]r!r)r_r��par_s ���r&r'z/SelectInLoader._load_for_path.<locals>.<lambda>2	sI���!�-�-��+�+�0�0��B�� 4� 8�9�9�A�A�(�����r(c�|��|���tjdd�������S�N�primary_keysT)�	expanding�rv�in_rr�r_r�s �r&r'z/SelectInLoader._load_for_path.<locals>.<lambda>;	�3���!�(�(��K�K��
�n�� M� M� M�N�N���r(c�|��|���tjdd�������Sr
r
rs �r&r'z/SelectInLoader._load_for_path.<locals>.<lambda>A	rr(c�*�|���Sr)r�r^s r&r'z/SelectInLoader._load_for_path.<locals>.<lambda>M	s��Q�%8�%8�%:�%:�r(c�:��g|]}��|����Srmr�)r��elemrs  �r&r�z1SelectInLoader._load_for_path.<locals>.<listcomp>S	s4���&�&�&�6:��+�+�D�1�1�&�&�&r(c���|j��Sr)rl)r_rs �r&r'z/SelectInLoader._load_for_path.<locals>.<lambda>V	s������^�)D�r(c���|jd}|j|j�t	j�jj�����Sr)r�rlrrrr9r])r_rr_s  �r&r�z?SelectInLoader._load_for_path.<locals>._setup_outermost_orderbyY	sJ���!"��A��I�%�1�:�"�2�C�C� �L��)=�)F�G�G����r()r!r�r�r$r%r8r=rLr8r�rr�r�r;r�r�r�rr�r�rr}r�r
r�rr]rrl�_load_via_child�_load_via_parent)r_rVrcre�states�	load_onlyr�r��
our_states�none_statesr��
related_identr_r�r�rr�rrLrr�r�r�s`     `        @@@@@@@@r&r�zSelectInLoader._load_for_path�s2������������
�	����2�2��F��%�
��%�!	G�$�0��6�6�J��K��[�F�$*�
G�
G� ��y�"�Z�
� %�&�&�&�&�&�&�)�:�&�&�&�!�!�
��/�=�@�@�!%�!:�J��E��}�,�,��}�-�4�4��
�I�6����� �&�&��z�9�'E�F�F�F�F��)�	���(.����J�
�$���$���(�	H��+�,�,�D��$�
H�G�G�G�G�w�G�G�G���-�-�g�6�6��G�G�G�G�w�G�G�G���L�L�
�
�
�
�
�
�	
�
���(�	�
�N�N�D�D�D�D�E�E�E�E�
�#�B�
�N�N�������
�
�
��%�	�
�N�N�����
�
�
�
�
�N�N�����
�
�
��]�
�	����$�d�4�+?�&@�	
�	
�	
��(�	<�
�N�N�:�:�;�;�;���(�	9��,�
9�!%�!5�!>���(��&�&�&�&�>L�&�&�&�N����D�D�D�D�E�E�E�E�	�	�	�	�	����7�8�8�8��%�	F�� � ��K��Q��
�
�
�
�
�
�!�!�*�j�!�W�E�E�E�E�Er(c�H��|j}t|��}|r�|d|j�}||jd�}d�||j����fd�|D�����D��}	|D]g}
|	�|
d��}||
D]F\}}
}|s
|j|
vr�|�|j���||
|s|n|g���G�h|��|D]A\}}
}|s
|j|
vr�|�|j���||
d���BdS)Nrc��i|]\}}||��	Srmrm)r�r�r)s   r&�
<dictcomp>z2SelectInLoader._load_via_child.<locals>.<dictcomp>u	s.������A�q��1���r(c�2��g|]}�jr|dn|��Sr��r�)r�r!r�s  �r&r�z2SelectInLoader._load_via_child.<locals>.<listcomp>x	s6���"�"�"�CF�*�"5�>��A���3�"�"�"r(�r)	r,�sorted�
_chunksizer�rrDr!r�r9)r_rrr�r_rcr,�our_keys�chunk�datar!�related_objr�r�r�s   `           r&rzSelectInLoader._load_via_childm	s�����,���*�%�%���	��Q���0�1�E���� 1� 1�2�H����A�g�o�.�.�5�5�"�"�"�"�JO�"�"�"�6������D��
�
��#�h�h�s�D�1�1��/9�#����+�E�5�)�$�!���U�):�):� ��N�N�4�8�,�,�@�@���+2�E����
�����	�'�	�:(3�	M�	M�#�E�5�)��
���U�!2�!2��
�N�N�4�8�$�$�8�8���t�L�L�L�L�
	M�	Mr(c���|j}|rdnd}|�rl|d|j�}||jd�}�fd�|D��}tjt��}	tj||j���|���d���D]*\}
}|	|
�	d�|D�����+|D]�\}}
}}|s
|j
|vr�|	�||��}|sb|r`t|��dkrtjd|z��|
�|j
���|
||d����|
�|j
���|
||����|��jdSdS)	Nrmrc�<��g|]\}}}}�jr|dn|��Sr�r")r�r!r�r�r�r�s     �r&r�z3SelectInLoader._load_via_parent.<locals>.<listcomp>�	sA������5�C��
�I�%�-�6��A���3���r(r#c��|dSrrmrs r&r'z1SelectInLoader._load_via_parent.<locals>.<lambda>�	s
��!�A�$�r(c3�&K�|]}|dV��
dS)rNrmr"s  r&r�z2SelectInLoader._load_via_parent.<locals>.<genexpr>�	s&����1�1��r�!�u�1�1�1�1�1�1r(rrE)r,r%r$r%r8r&r'r�rr(r!rDr�rr�r�r9)r_rr�r_rcr,�
_empty_resultr'rr(r�r)r!r�r�r�r:s  `              r&rzSelectInLoader._load_via_parent�	s�����,��%�/���4�
��&	��q�4�?�2�3�E�#�D�O�$5�$5�6�J�����9>����L�
�*�4�0�0�D�!�)���'�/�"�"�)�)�|�)�D�D�����
2�
2���1��Q����1�1�q�1�1�1�1�1�1�1�5:�
�
�1��U�J�	� ��T�X��%;�%;��!�X�X�c�=�9�9�
���:���:����*�*��	�.�04�5����
�N�N�4�8�,�,�@�@��z�:�a�=������N�N�4�8�,�,�@�@��z�:�����I�&	�&	�&	�&	�&	r()rqrrrsrur$�
namedtupler�r%r\r�r�r�r�rr�rWrpr�rrrvrws@r&r�r�3s=��������I�(��'��	
�	
�	
�
�
�J��J�5�5�5�5�5�:O�O�O�,
�
�
� N�N�N�'�'�'�
�T��-�.�.�%�%�/�.�%�1
�1
�1
�f�T��-�.�.�PF�PF�/�.�PF�d(M�(M�(M�T*�*�*�*�*�*�*r(r�c�����fd���fd�}�fd�}tj|d|ddd���tj|d|ddd���dS)Nc	����|�t|j�jkrd|�tj|����}|r;||ur7t	jdt
j|���d|j�d��d�d����|S)Nz	Instance z+ is already associated with an instance of z	 via its z0 attribute, and is only allowed a single parent.�bbf1)�code)	r!�	hasparentr�instance_stater2r3r�instance_strrH)r�r�oldvalue�	initiatorr4r#s     �r&�	_do_checkz*single_parent_validator.<locals>._do_check�	s��������$�(�!:�!:�!�+�+�J�,E�e�,L�,L�M�M�I��
�X�U�2�2��0�0� �,�U�3�3�3�3�U�\�\�\�4�4�4�I� ������r(c� ���||d|��Srrm)r�rr8r9s   �r&r;z'single_parent_validator.<locals>.append�	s����y���t�Y�7�7�7r(c� ���||||��Srrm)r�rr7r8r9s    �r&�set_z%single_parent_validator.<locals>.set_�	s����y���x��;�;�;r(r;T)�raw�retvalr4r�)r�listen)r"r#r;r<r9s `  @r&r<r<�	s����������8�8�8�8�8�<�<�<�<�<�
�L��h��D��d�����
�L��u�d��T�$�O�O�O�O�O�Or()NNNNFN)8rt�
__future__rr$r&�rrr�rrr	r
rrr�baser
rrrr�rr�rrrrr2rrrr%rrS�ColumnProperty�strategy_forrW�class_loggerryr�r�rJr�r��RelationshipPropertyr�r��
MemoizedSlotsr�r�r�r�rMr�r<rmr(r&�<module>rHs���2�2�&�&�&�&�&�&���������������������������������������������������������"�"�"�"�"�"�'�'�'�'�'�'�&�&�&�&�&�&�+�+�+�+�+�+�#�#�#�#�#�#� � � � � � �������������������������������������������������"�"�"�"�"�"�������������S!�S!�S!�S!�l��'�'�5�5�'�I�I� 
� 
� 
� 
� 
�� 
� 
�J�I� 
�F����'�'�4�%�'�H�H�?:�?:�?:�?:�?:�>�?:�?:�I�H���?:�D����'�'��'�>�>�B
�B
�B
�B
�B
�\�B
�B
�?�>���B
�J����'�'��$�'�G�G���'�'�4�'�8�8�A'�A'�A'�A'�A'�>�A'�A'�9�8�H�G���A'�H8�8�8�8�8�&�8�8�8�
4�
4�
4�
4�
4��
4�
4�
4���� �-�-��-�>�>������n���?�>������� �-�-�8�-�<�<�� �-�-�4�-�8�8�=�=�=�=�=�)�=�=�9�8�=�<���=�<��� �-�-�4�-�8�8�� �-�-�8�-�<�<�� �-�-�7�-�;�;�� �-�-�>�-�B�B�� �-�-�>�-�B�B�uJ�uJ�uJ�uJ�uJ�+�T�-?�uJ�uJ�C�B�C�B�<�;�=�<�9�8���uJ�p

8�
8�
8�
8�
8��
8�
8�
8� � �-�-�;�-�?�?�A�A�A�A�A�0�A�A�@�?�A�<��� �-�-�:�-�>�>�yG�yG�yG�yG�yG�/�yG�yG�?�>���yG�x
��� �-�-�8�-�<�<�� �-�-�5�-�9�9�D
�D
�D
�D
�D
�-�D
�D
�:�9�=�<���D
�N��� �-�-�:�-�>�>�L�L�L�L�L�/��1C�L�L�?�>���L�^P�P�P�P�Pr(

Hacked By AnonymousFox1.0, Coded By AnonymousFox