OwlCyberSecurity - MANAGER
Edit File: dependency.cpython-312.pyc
� ����_��g���������������������������d�Z�ddlmZ�ddlmZ�ddlmZ�ddlmZ�ddlmZ�ddlmZ �dd l mZ�dd l mZ�ddl m Z �ddlmZ�dd lmZ�ddlmZ��G�d��d�������Z�G�d��de�������Z�G�d��de�������Z�G�d��de�������Z�G�d��de�������Ze eeeeeiZy)zRelationship dependencies. �����)�annotations����)� attributes)�exc)�sync)� unitofwork)�util)� MANYTOMANY)� MANYTOONE)� ONETOMANY����)�sqlc�������������������~�����e�Zd�Zd��Zed����������Zd��Zd��Zd��Zd��Z d��Z d��Zd ��Zd ��Z d��Zd��Zd ��Zd��Zdd�Zd��Zd��Zy)�DependencyProcessorc���������������������||�_���������|j������������������|�_��������|j������������������|�_��������|j������������������|�_��������|j������������������|�_��������|j ������������������|�_��������|j������������������|�_��������|j������������������|�_��������|j������������������|�_��������|j������������������|�_ ��������|�j������������������rt��������j������������������|�_��������nt��������j������������������|�_��������|�j������������������rt��������j������������������|�_��������nt��������j������������������|�_��������|�j������������������j�������������������d|j ��������������������|�_��������|j ������������������|�_��������|�j�������������������j$������������������s"t'��������j(������������������d|�j�������������������z����������y�)N�_z|Can't build a DependencyProcessor for relationship %s. No target attributes to populate between parent and child are present)�prop�cascade�mapper�parent� secondary� direction�post_update�passive_deletes�passive_updates�enable_typechecksr����PASSIVE_NO_INITIALIZE�_passive_delete_flag�PASSIVE_OFF�_passive_update_flag� _sort_key�key�sort_key�synchronize_pairs�sa_exc� ArgumentError)�selfr���s��� �J/opt/hc_python/lib64/python3.12/site-packages/sqlalchemy/orm/dependency.py�__init__zDependencyProcessor.__init__���s������� ��|�|����k�k����k�k��������������+�+���#�3�3���#�3�3���!%�!7�!7������(2�(H�(H�D�%�(2�(>�(>�D�%����(2�(H�(H�D�%�(2�(>�(>�D�%�#'�;�;�#8�#8�$�(�(�C�� ��8�8����y�y�*�*��&�&�$�&*�i�i�0��� ��+�����c�����������������2�����t��������|j���������������������|�������S��N)�_direction_to_processorr���)�clsr���s��� r(����from_relationshipz%DependencyProcessor.from_relationship;���s������&�t�~�~�6�t�<�<r*���c�����������������~�����|�j�������������������j������������������j������������������|�j�������������������������j ������������������|�������S�)z�return True if the given object instance has a parent, according to the ``InstrumentedAttribute`` handled by this ``DependencyProcessor``. )r���� class_manager�get_implr"���� hasparent�r'����states��� r(���r3���zDependencyProcessor.hasparent?���s.��������{�{�(�(�1�1�$�(�(�;�E�E�e�L�Lr*���c�����������������(�����|j������������������|�d��������y)z�establish actions and dependencies related to a flush. These actions will operate on all relevant states in the aggregate. TN)�register_preprocessor�r'����uows��� r(����per_property_preprocessorsz.DependencyProcessor.per_property_preprocessorsG���s������� �!�!�$��-r*���c����������� �����������t��������j������������������||�dd�������}t��������j������������������||�dd�������}t��������j������������������||�j������������������j�������������������������}t��������j������������������||�j ������������������j�������������������������}t��������j������������������||�j������������������j�������������������������}t��������j������������������||�j ������������������j�������������������������}|�j������������������|||||||��������y��NFT)r���� ProcessAll� SaveUpdateAllr����primary_base_mapperr���� DeleteAll�per_property_dependencies)r'���r9���� after_save� before_delete�parent_saves�child_saves�parent_deletes� child_deletess��� r(����per_property_flush_actionsz.DependencyProcessor.per_property_flush_actionsP���s��������*�*�3��e�T�B� �"�-�-�c�4��t�D� �!�/�/�����0�0� ���!�.�.�����0�0� ���$�-�-�����0�0� ���#�,�,�����0�0� � �� �&�&�������� r*���c���������������������|�j�������������������j������������������}t��������j������������������||�������}t��������j������������������||�������}|r t��������j ������������������||�dd�������}d|_��������nt��������j ������������������||�dd�������}d|_��������||j������������������vr||j������������������vsJ��|df|dfg} d} nd} |s?t��������j������������������||�j������������������j�������������������������}dx}}||j������������������v�rAd} n>t��������j������������������||�j������������������j�������������������������}dx}}||j������������������v�rd} |D��]Z��}|j������������������|�j���������������������j������������������j������������������||j������������������|r|�j������������������nt ��������j"�������������������������}|s�a|r1t��������j$������������������||�d|�������} rGt��������j&������������������||�������}n0t��������j$������������������||�d|�������} rt��������j(������������������||�������}| rsg�} |D�]l��\��}}||j*������������������vrd}nE|j*������������������|���\��}}|rt��������j&������������������||�������df}nt��������j(������������������||�������df}| j-������������������|���������n� D�]��\��}}|�j/������������������||||||������������]�y)z�establish actions and dependencies related to a flush. These actions will operate on all relevant states individually. This occurs only if there are cycles in the 'aggregated' version of events. TFN)NN)r���r?���r���r>���r@���r=����disabled�cyclesr����base_mapper�managerr"����impl�get_all_pending�dictr���r���r����ProcessState�DeleteState�SaveUpdateState�states�append�per_state_dependencies)r'���r9���rT����isdelete�child_base_mapperrE���rG���rC���rB���� child_actions�child_in_cyclesrD���rF����parent_in_cyclesr5����sum_�child_state�child�child_action�deleted�listonly� childisdeletes��� r(����per_state_flush_actionsz+DependencyProcessor.per_state_flush_actionsl���s�������!�K�K�;�;�� �.�.�s�4E�F��"�,�,�S�2C�D� � ��&�1�1�#�t�T�4�H�M�%)�M�"�#�.�.�s�D�%��F�J�"&�J����c�j�j�(� �!�� � �2�2�2��*�5�1�M�4�3H�I�M�#�O�"�O���%�3�3��T�[�[�,�,��L��.2�1�N�]��s�z�z�)�#'� �'�1�1�#�t�{�{�7N�7N�O�N�(,�,�L�:�����+�#'� ���E���=�=����*�/�/�?�?��� � �� ���-�-�#�9�9� �D����� *� 7� 7��T�4�� O� �#�%/�%;�%;�C��%G�N�'�4�4�S�$��u�M� �#�#-�#=�#=�c�5�#I�L�� "� �*.�&�K��"�#�*�*�4�'3��.1�j�j��.E�+��(�"� *� 6� 6�s�K� H� $�,�L��!+� :� :�3�� L� %�,�L��"�(�(��6��+/�&�0=�+��m��+�+�� �"� ��!��!� ��0=�_�r*���c�����������������������y�NF���r'���� uowcommitrT���s��� r(����presort_deletesz#DependencyProcessor.presort_deletes�����������r*���c�����������������������yre���rf���rg���s��� r(���� presort_savesz!DependencyProcessor.presort_saves����rj���r*���c�����������������������y�r,���rf���rg���s��� r(����process_deletesz#DependencyProcessor.process_deletes�����������r*���c�����������������������y�r,���rf���rg���s��� r(���� process_savesz!DependencyProcessor.process_saves����ro���r*���c����������������������|r|�j�������������������r"t��������j������������������t��������j������������������z��}nD|�j������������������t ��������u�rt��������j������������������}n!t��������j������������������t��������j������������������z��}|D�]4��}|j������������������||�j������������������|�������}|s�#|j��������������������������r�4�y�|xr1�|�j������������������j�������������������xr�|�j������������������|j������������������v�S�)NT)r���r���r����INCLUDE_PENDING_MUTATIONSr���r����PASSIVE_NO_FETCH_RELATEDr����get_attribute_historyr"����emptyr����_is_self_referentialr����mappers)r'���rh���rT���rW����passive�s�historys��� r(����prop_has_changesz$DependencyProcessor.prop_has_changes����s��������4�/�/��0�0��6�6�7�� ���^�^�y� (��!�9�9�G���&�&��)M�)M�M�� ���A�� �5�5�a����7�K�G��w�}�}��� �����5�� � �6�6�6�5��K�K�9�#4�#4�4� r*���c�����������������.����|�j�������������������j������������������r$|�"t��������j������������������d|�j�����������������������������|��|�j������������������j������������������||�j���������������������������s�|�j������������������j������������������|d��������rOt��������j������������������d|j������������������|�j�������������������|�j������������������j������������������|�j������������������d�z����������t��������j������������������d|j������������������|�j�������������������|�j������������������j������������������d�z����������y�y�)Nz+Can't flush None value found in collection )�allow_subtypesTaE��Attempting to flush an item of type %(x)s as a member of collection "%(y)s". Expected an object of type %(z)s or a polymorphic subclass of this type. If %(x)s is a subclass of %(z)s, configure mapper "%(zm)s" to load this subtype polymorphically, or set enable_typechecks=False to allow any subtype to be accepted for flush. )�x�y�z�zmz�Attempting to flush an item of type %(x)s as a member of collection "%(y)s". Expected an object of type %(z)s or a polymorphic subclass of this type.)r���r����r����)r����uselistr���� FlushErrorr����_canloadr����class_r4���s��� r(����_verify_canloadz#DependencyProcessor._verify_canload ��s�������9�9������.�.�#'�9�9�/��� ��� �t�{�{�';�';��d�&<�&<�"<��(<��( ���{�{�#�#�E�$�#�?��n�n�=��#�\�\�!�Y�Y�!�[�[�/�/�"�k�k� �����$��n�n�!��#�\�\�!�Y�Y�!�[�[�/�/�� ����-( � r*���c����������������������t�����������������r,�����NotImplementedError)r'���r5���r^����associationrow� clearkeysrh���s��� r(����_synchronizez DependencyProcessor._synchronize3���������!�#�#r*���c����������� ����������|�j�������������������j������������������sy�t��������t��������|�j������������������g|�j�������������������j������������������D��cg�c]��}|j���������������������c}z�����������������}|j������������������d|ft���������������S�c�c}w�)N�reverse_key)r����_reverse_property�tuple�sortedr"����memo�set)r'���r9����p�process_keys��� r(����_get_reversed_processed_setz/DependencyProcessor._get_reversed_processed_set6��sl�������y�y�*�*����D�H�H�:�� � �0K�0K� L�0K�1����0K� L�L�M� ����x�x���4�c�:�:���!Ms����A>c����������� �����������|D�]A��}|r|��|j������������������||�j������������������j������������������D���cg�c]��\��}}|�� �c}}���������y��y�c�c}}w�r,���)�register_post_updater���r$���)r'���r5���rh����related� is_m2o_deleter����l�rs��� r(����_post_updatez DependencyProcessor._post_update?��sP�������A� �A�M��.�.��$�)�)�*E�*E�F�*E�$�!�Q�A�*E�F��������Gs����Ac����������������������t�����������������r,���r�����r'���rh���r5���s��� r(����_pks_changedz DependencyProcessor._pks_changedG��r����r*���c�����������������N�����|�j�������������������j�������������������d|�j�������������������d�S�)N�(�))� __class__�__name__r���)r'���s��� r(����__repr__zDependencyProcessor.__repr__J��s�������>�>�2�2�D�I�I�>�>r*���N)F)r����� __module__�__qualname__r)����classmethodr/���r3���r:���rH���rc���ri���rl���rn���rq���r|���r����r����r����r����r����r����rf���r*���r(���r���r������sk�������:��=���=�M�.� �8p�d�� � ��@'�R$�;��$�?r*���r���c�������������������<�����e�Zd�Zd��Zd��Zd��Zd��Zd��Zd��Zd��Z d��Z y ) �OneToManyDPc����������� ����������|�j�������������������r�t��������j������������������||�j������������������j������������������d�������}t��������j������������������||�j������������������j������������������d�������} |j ������������������j ������������������||f||f||f|| f| |f| |fg��������y�|j ������������������j ������������������||f||f||f||f||f||f||fg��������y�r<����r���r���� PostUpdateAllr���r?����dependencies�update) r'���r9���rD���rE���rF���rG���rB���rC����child_post_updates�child_pre_updatess ��� r(���rA���z%OneToManyDP.per_property_dependenciesO��s�����������!+�!9�!9��T�[�[�4�4�e�"���!+� 8� 8��T�[�[�4�4�d�!��� ���#�#� �*�-�!�:�.��!3�4�"�$5�6�&��7�&� �6� � �� ���#�#�!�:�.���-���/� �.�1�"�N�3�"�K�0�"�M�2�� r*���c �����������������z����|�j�������������������r�t��������j������������������||�j������������������j������������������d�������} t��������j������������������||�j������������������j������������������d�������} |sI|r"|j ������������������j ������������������||f|| fg��������y�|j ������������������j ������������������||f||f|| fg��������y�|r"|j ������������������j ������������������|| f| |fg��������y�|j ������������������j ������������������|| f| |fg��������y�|s%|j ������������������j ������������������||f||f||fg��������y�|j ������������������j ������������������||f||fg��������y�r<���r����)r'���r9����save_parent� delete_parentr_���rB���rC���rW���rb���r����r����s��� r(���rV���z"OneToManyDP.per_state_dependenciesx��sr���������!+�!9�!9��T�[�[�4�4�e�"���!+� 8� 8��T�[�[�4�4�d�!���� ��$�$�+�+�)�:�6�'�);�<�����$�$�+�+�(�*�5�)�:�6�'�);�<����!��$�$�+�+�*�,=�>�.� �>�����$�$�+�+�*�,=�>�.� �>��������#�#� �*�-���.� �,�/�� �� ���#�#���.��}�0M�N� r*���c����������������������|�j�������������������j�������������������xr�|�j������������������dk(���}|D�]���}|j������������������||�j������������������|�j �������������������������}|s�-|j������������������D�]T��}|��|�j������������������|�������du�s�|�j�������������������j������������������r|j������������������|d����������D|j������������������|���������V�|s��|j������������������D�]#��}|��|j������������������|d|�j����������������������������%����y�)N�allFT�rW����delete�� operationr���)r���r����r���ru���r"���r���r`���r3���� delete_orphan�register_object� unchangedr����r'���rh���rT����should_null_fksr5���r{���r^���s��� r(���ri���zOneToManyDP.presort_deletes���s������� ����#�#�#�I�D�,@�,@�E�,I�(I�� ���E��5�5��t�x�x��!:�!:��G���$�_�_�E��(�T�^�^�E�-B�e�-K��<�<�5�5�%�5�5�e�d�5�K�%�5�5�e�<��-��#�!(�!2�!2�� �,�%�5�5� %��� � ��6����"3��r*���c����������� ������2����|j������������������d|�ft���������������}|�j������������������j�������������������xr�|�j������������������dk(���}|D��]���}|�j������������������||�������}|r|�j������������������r"t��������j������������������t��������j������������������z��}n!t��������j������������������t��������j������������������z��}|j������������������||�j������������������|�������}|�r|j������������������D�]$��} | ��|j������������������| dd|�j����������������������������&�|j!������������������|j��������������������������|j"������������������D�]���} |�j������������������j������������������s#|s�|j������������������| dd|�j����������������������������<|�j%������������������| �������du�s�P|j������������������| dd|�j���������������������������|�j&������������������j)������������������d| �������D�]��\��} }}} |j������������������|d� �������������|s���|s���|j*������������������D�]/��} | ��|j������������������| d|�j������������������d |�j����������������������������1�����y�)N�children_addedr����T�add)� cancel_deleter����r���Fr�����rW���r����r���r����z pk changer����)r����r����r���r����r���r����r���r���r���rs���r���ru���r"����addedr����r���r����r`���r3���r����cascade_iteratorr����)r'���rh���rT���r����r����r5����pks_changedry���r{���r^����c�m�st_�dct_s��� r(���rl���zOneToManyDP.presort_saves���s�����"���)9�4�(@�#�F������*�*�*�� 2��(�(�E�1�1�� � ��E��+�+�I�u�=�K��$�"6�"6��4�4� �:�:�;�����*�*� �:�:�;��� � �5�5�e�T�X�X�w�O�G��$�]�]�E��(�!�1�1�!�*.�&+�!%��� �2����+���%�%�g�m�m�4�$�_�_�E��<�<�5�5�*�%�5�5� %�).�*2�%)�Y�Y� �6��������.�%�7�!�1�1�!�%)�&.�!%��� �2����04�{�{�/K�/K�$�e�0�O�A�q�#�t��&�5�5�c�D�5�I�0�!�-�*���!(�!2�!2�� �,�%�5�5� %� %� $� 4� 4�*5�%)�Y�Y��6����"3�e�r*���c����������� ����������|�j�������������������s|�j������������������dk(���s7|j������������������d|�ft���������������}|D��]��}|j ������������������||�j ������������������|�j�������������������������}|s�.|j������������������D�]S��}|��|�j������������������|�������du�s�|�j������������������||d�d|d��������|�j�������������������s�=|s�@|�j������������������|||g���������U�|�j�������������������s|�j������������������j������������������r��t��������|j�������������������������j������������������|�������D�]?��}|��|�j������������������||d�d|d��������|�j�������������������s�)|s�,|�j������������������|||g���������A����y�y�)Nr����r����FT)r���r���r����r����ru���r"���r���r`���r3���r����r����r���r����r����� difference)r'���rh���rT���r����r5���r{���r^���s��� r(���rn���zOneToManyDP.process_deletes��sH���������4�#7�#7�5�#@�&�^�^�-=�t�,D�c�J�N���#�9�9��4�8�8�T�%>�%>�����!(����!�-� $���u� 5�� >� �-�-� %�u�d�D�)�U��� $�/�/�E� $� 1� 1�%��U�G� L��"1���'�'�t�|�|�/B�/B�%(��):�):�%;�%F�%F�*�&�E�� %�0� $� 1� 1�$)�5�$��i��!"��$(�#3�#3��$(�$5�$5�(-�y�5�'�%&�&�#� ��$Ar*���c����������� ������t����|�j�������������������j�������������������xr�|�j������������������dk(���}|D��] ��}|j������������������||�j������������������t ��������j�������������������������}|s�2|j������������������D�]<��}|�j������������������||d�d|d��������|��|�j������������������s�)|�j������������������|||g���������>�|j������������������D�]D��}|s�|�j�������������������j������������������r�|�j������������������|�������r�/|�j������������������||d�d|d���������F�|�j������������������||�������s��|j������������������D�]��}|�j������������������||d�d|d�������������y�)Nr����FT)r���r����r���ru���r"���r���r���r����r����r���r����r`���r3���r����r����r����s��� r(���rq���zOneToManyDP.process_savesD��s0��������*�*�*�� 2��(�(�E�1�1�� � ��E��5�5��t�x�x��!A�!A��G���$�]�]�E��%�%��u�d�E�9�e����(�T�-=�-=��)�)�%��U�G�D��+��%�_�_�E�'� $��� :� :� $���u� 5��)�)�!�5�$��i��� �-���$�$�Y��6�!(�!2�!2���)�)�!�5�$��y�$���"3�/�r*���c����������� ����������|}|}|�j������������������|��������|�|�j������������������s|j������������������|�������ry�|r6t��������j������������������||�j ������������������|�j������������������j��������������������������y�t��������j������������������||�j������������������||�j ������������������|�j������������������j������������������||�j������������������xr�|��������y�r,���)r����r���� is_deletedr����clearr���r���r$����populater���r���) r'���r5���r^���r����r����rh���r�����source�dests ��� r(���r����zOneToManyDP._synchronizef��s���������������U�#��<�� � �Y�%9�%9�$�%?����J�J�t�T�[�[�$�)�)�*E�*E�F��M�M���������� � �+�+���$�$�4�� r*���c�����������������n�����t��������j������������������|||�j������������������|�j������������������j�������������������������S�r,����r����source_modifiedr���r���r$���r����s��� r(���r����zOneToManyDP._pks_changed}���,�������#�#��u�d�k�k�4�9�9�+F�+F� �� r*���N)r����r����r����rA���rV���ri���rl���rn���rq���r����r����rf���r*���r(���r����r����N��s0������'�R?�B�6B�H%&�X �D�. r*���r����c�������������������@�����e�Zd�Zd��Zd��Zd��Zd��Zd��Zd��Zd��Z �d d �Z y)�ManyToOneDPc����������������������t���������j������������������|�|��������|�j������������������j������������������D�]&��}|j������������������j������������������t ��������|����������������(�y�r,���)r���r)���r����self_and_descendants�_dependency_processorsrU����DetectKeySwitch)r'���r���r���s��� r(���r)���zManyToOneDP.__init__���s?�������$�$�T�4�0��k�k�6�6�F��)�)�0�0���1F�G��7r*���c����������� ������x����|�j�������������������r�t��������j������������������||�j������������������j������������������d�������}t��������j������������������||�j������������������j������������������d�������} |j ������������������j ������������������||f||f||f|| f|| f| |f| |fg��������y�|j ������������������j ������������������||f||f||f||fg��������y�r<����r���r���r����r���r?���r����r����) r'���r9���rD���rE���rF���rG���rB���rC����parent_post_updates�parent_pre_updatess ��� r(���rA���z%ManyToOneDP.per_property_dependencies���s�����������",�":�":��T�[�[�4�4�e�#���",�!9�!9��T�[�[�4�4�d�"��� ���#�#� �*�-�!�:�.��!4�5��!3�4�"�$6�7�'��7�'��8�� �� ���#�#� �*�-���.�!�=�1�#�]�3� � r*���c �����������������t����|�j�������������������r�|stt��������j������������������||�j������������������j������������������d�������} |r"|j ������������������j ������������������|| f| |fg��������y�|j ������������������j ������������������||f||f|| fg��������y�t��������j������������������||�j������������������j������������������d�������} |j ������������������j ������������������|| f| |f| |fg��������y�|sC|s"|j ������������������j ������������������||f||fg��������y�|j ������������������j ������������������||fg��������y�|r|j ������������������j ������������������||fg��������y�y�r<���r����)r'���r9���r����r����r_���rB���rC���rW���rb���r����r����s��� r(���rV���z"ManyToOneDP.per_state_dependencies���s_����������&0�&>�&>�����8�8�%�'�#��!��$�$�+�+�'�)<�=�0�,�?�����$�$�+�+�(�*�5�)�:�6�'�)<�=����&0�%=�%=�����8�8�$�&�"��� � �'�'�&�(:�;�+�]�;�+�\�:����� �� � �'�'�"�J�/�*�k�1J�K���� � �'�'�*�k�)B�(C�D���� � �'�'�-��)F�(G�H��r*���c���������������������|�j�������������������j������������������s|�j�������������������j������������������r�|D�]���}|j������������������||�j������������������|�j �������������������������}|s�-|�j�������������������j������������������r|j ��������������������������}n|j��������������������������}|D�]_��}|��|j������������������|dd|�j���������������������������|�j������������������j������������������d|�������}|D�]��\��}} } }|j������������������| d������������a����y�y�)NTr����r����r����)r���r����r����ru���r"���r����sum�non_deletedr����r���r���r����)r'���rh���rT���r5���r{����todeleter^����tr����r����r����r����s��� r(���ri���zManyToOneDP.presort_deletes���s��������<�<���$�,�,�"<�"<���#�9�9��4�8�8�T�%>�%>������|�|�1�1�#*�;�;�=��#*�#6�#6�#8��!)�� �=�$�!�1�1�!�%)�&.�!%��� �2����!�K�K�8�8��5�I��/0�O�A�q�#�t�%�5�5�c�D�5�I��01��"*�� ��#=r*���c����������������������|D�]���}|j������������������|d|�j���������������������������|�j������������������j������������������s�8|j ������������������||�j ������������������|�j�������������������������}|s�b|j������������������D�]p��}|�j������������������|�������du�s�|j������������������|dd|�j���������������������������|�j������������������j������������������d|�������}|D�]��\��}}} } |j������������������| d������������r����y�)Nr����r����FTr����r����r����)r����r���r���r����ru���r"���r���r`���r3���r���r����)r'���rh���rT���r5���r{���r^���r����r����r����r����r����s��� r(���rl���zManyToOneDP.presort_saves���s��������E��%�%�e�u�4�9�9�%�M��|�|�)�)�#�9�9��4�8�8�T�%>�%>�����!(�����>�>�%�0�E�9�%�5�5� %�)-�*2�%)�Y�Y� �6����!%��� <� <�X�u� M�A�34���1�c�4� )� 9� 9�#�� 9� M��45��"1��r*���c�����������������^����|�j�������������������r�|�j������������������j������������������s�|�j������������������dk(��sz|D�]t��}|�j ������������������|d�d�d|��������|s�|�j�������������������s�(|j������������������||�j������������������|�j�������������������������}|s�R|�j������������������|||j��������������������������d����������v�y�y�y�y�)Nr����T)r����) r���r���r����r���r����ru���r"���r���r����r����)r'���rh���rT���r5���r{���s��� r(���rn���zManyToOneDP.process_deletes��s�����������L�L�.�.��(�(�E�1� � ���!�!�%��t�T�9�E��T�-�-�'�=�=��t�x�x��)B�)B��G����)�)�!�9�g�k�k�m�4��*���� ��2��/�� r*���c����������� ������v����|D�]���}|j������������������||�j������������������t��������j�������������������������}|s�1|j������������������r(|j������������������D�]��}|�j������������������||d�d|d����������n"|j������������������r|�j������������������|d�d�d|d��������|�j������������������s��|�j������������������|||j�������������������������������������y�)NFr����Tr����) ru���r"���r���r���r����r����r`���r���r����r����)r'���rh���rT���r5���r{���r^���s��� r(���rq���zManyToOneDP.process_saves)��s��������E��5�5��t�x�x��!A�!A��G����=�=�!(�����)�)�!�5�$��y�%���"/���_�_��%�%��t�T�4��H����#�#��%�%�e�Y���� �F��r*���Nc����������� ����������|�|�j�������������������s|j������������������|�������ry�|�Z|�X|j������������������j������������������|�������s=t ��������j ������������������dt ��������j������������������|��������d|�d|�j�������������������d���������y�|s|�6t��������j������������������||�j������������������|�j������������������j��������������������������y�|�j������������������|��������t��������j������������������||�j������������������||�j������������������|�j������������������j������������������|d��������y�)N�Object of type � not in session, � operation along '�' won't proceedF)r���r�����session�_contains_stater ����warn� mapperutil�state_class_strr���r���r����r���r$���r����r����r����r'���r5���r^���r����r����rh���r����s��� r(���r����zManyToOneDP._synchronize;��s���������=�� � �Y�%9�%9�%�%@��� �!��!��%�%�5�5�e�<��I�I���-�-�e�4�i����L� � � ��� ��J�J�u�d�k�k�4�9�9�+F�+F�G�� � ��'��M�M���������� � �+�+��� r*���r,���)r����r����r����r)���rA���rV���ri���rl���rn���rq���r����rf���r*���r(���r����r�������s6������H� %�N6I�pJ�0N�*�(G�2��&r*���r����c�������������������R�����e�Zd�ZdZd��Zd��Zd��Zd��Zd��Zd��Z d��Z d ��Zd ��Zd��Z d��Zy )r����a���For many-to-one relationships with no one-to-many backref, searches for parents through the unit of work when a primary key has changed and updates them. Theoretically, this approach could be expanded to support transparent deletion of objects referenced via many-to-one as well, although the current attribute system doesn't do enough bookkeeping for this to be efficient. c����������������������|�j�������������������j������������������r-|�j������������������ry�dd��|�j�������������������j������������������D���������v�ry�|j������������������|�d��������y�)NFc��������������3���4���K����|�]��}|j������������������������y��wr,���)r���)�.0r���s��� r(���� <genexpr>z=DetectKeySwitch.per_property_preprocessors.<locals>.<genexpr>u��s����������� ;����(�(� ;�s����)r���r����r���r7���r8���s��� r(���r:���z*DetectKeySwitch.per_property_preprocessorsp��sO�������9�9�&�&��#�#����� $� � � ;� ;�������!�!�$��.r*���c�����������������������t��������j������������������||�j������������������j�������������������������}t��������j������������������||�dd�������}|j ������������������j ������������������||fg��������y�re���)r���r>���r���rL���r=���r����r����)r'���r9���rD���rB���s��� r(���rH���z*DetectKeySwitch.per_property_flush_actions}��sP������!�/�/��T�[�[�5L�5L�M���*�*�3��e�U�C� ������,� �!;� <�=r*���c�����������������������y�r,���rf���)r'���r9���rT���rW���s��� r(���rc���z'DetectKeySwitch.per_state_flush_actions���ro���r*���c�����������������������y�r,���rf���rg���s��� r(���ri���zDetectKeySwitch.presort_deletes���ro���r*���c�����������������B�����|�j�������������������s|�j������������������||��������y�y�r,����r����_process_key_switches)r'���r9���rT���s��� r(���rl���zDetectKeySwitch.presort_saves���s"�������#�#�� �&�&�v�s�3��$r*���c�����������������Z�����|s)|�j�������������������r|�j������������������||�������}t��������|�������S�yre���)r����_key_switchers�bool)r'���r9���rT���rW����ds��� r(���r|���z DetectKeySwitch.prop_has_changes���s+�������D�0�0��#�#�C��0�A���7�N�r*���c����������������������J��r,���rf���rg���s��� r(���rn���zDetectKeySwitch.process_deletes���s�������ur*���c�����������������D�����|�j�������������������sJ��|�j������������������||��������y�r,���r��rg���s��� r(���rq���zDetectKeySwitch.process_saves���s#������ ��#�#�#�#��"�"�6�9�5r*���c�����������������������|j������������������d|�fd���������\��}}|j������������������|�������}|D�]<��}||vs�|�j������������������||�������r|j������������������|���������,|j������������������|���������>�|S�)N�pk_switchersc������������������*�����t����������������t����������������fS�r,���)r����rf���r*���r(����<lambda>z0DetectKeySwitch._key_switchers.<locals>.<lambda>���s������S�U�C�E�Nr*���)r�����unionr����r����)r'���r9���rT����switched�notswitched� allstatesrz���s��� r(���r��zDetectKeySwitch._key_switchers���sp������ #��� �T�"�$:�! ���+���N�N�;�/� ��A�� �!��$�$�S�!�,��L�L��O��O�O�A�&�����r*���c����������� �����������|�j������������������||�������}|�rU|j������������������j������������������j��������������������������D��],��}t ��������|j ������������������|�j������������������j �������������������������s�/|j������������������}|j������������������|�j�������������������������j������������������|||�j��������������������������}|t��������j������������������us��|���|�j������������������j������������������r |s��|d���}n|}t��������j ������������������|�������}||v�s��|j#������������������|d|�j$��������������������������t'��������j(������������������||�j*������������������||�j������������������|�j������������������j,������������������||�j$����������������������������/�y�y�)N)ry���r���F)r��r�����identity_map� all_states� issubclassr����r���rP���r2���r"����getr ���r����PASSIVE_NO_RESULTr���r�����instance_stater����r���r���r����r���r$���) r'����deplistrh���� switchersr5����dict_r�����related_obj� related_states ��� r(���r��z%DetectKeySwitch._process_key_switches���s6������'�'� �7�;� ���#�*�*�7�7�B�B�D��!�%�,�,����0B�0B�C��� � ���.�.����2�6�6��5�$�*C�*C��7������:�#?�#?�?��+��y�y�(�(�&�$�&-�a�j��&-��$.�$=�$=�k�$J�M�$� �1�!�1�1�!�5�$�*>�*>���� � �)� �K�K�!� �K�K� �I�I�7�7�%� �0�0��-�E��r*���c����������������������t��������|j�������������������������xr6�t��������j������������������|||�j������������������|�j ������������������j�������������������������S�r,���)r��r"���r���r����r���r���r$���r����s��� r(���r����zDetectKeySwitch._pks_changed���s;�������E�I�I��� �4�#7�#7��u�d�k�k�4�9�9�+F�+F�$ �� r*���N)r����r����r�����__doc__r:���rH���rc���ri���rl���r|���rn���rq���r��r��r����rf���r*���r(���r����r����d��s?������ �/�>� � �4���6��#�J r*���r����c�������������������B�����e�Zd�Zd��Zd��Zd��Zd��Zd��Zd��Zd��Z d��Z d ��Zy )�ManyToManyDPc����������� ������d�����|j�������������������j������������������||f||f||f||f||f||f||fg��������y�r,����r����r����)r'���r9���rD���rE���rF���rG���rB���rC���s��� r(���rA���z&ManyToManyDP.per_property_dependencies���sW������� ������z�*��j�)��]�+����-���/�� �.���,� � r*���c �����������������������|sF|r"|j�������������������j������������������||f||fg��������y�|j�������������������j������������������||f||fg��������y�|j�������������������j������������������||f||fg��������y�r,���r$��) r'���r9���r����r����r_���rB���rC���rW���rb���s ��� r(���rV���z#ManyToManyDP.per_state_dependencies���s����������� � �'�'�!�:�.��\�0J�K���� � �'�'�!�:�.��z�0J�K��� ���#�#���.�� �0N�O� r*���c�����������������z�����|�j�������������������s/|D�])��}|j������������������||�j������������������|�j���������������������������+�y�y�r,���)r���ru���r"���r���)r'���rh���rT���r5���s��� r(���ri���zManyToManyDP.presort_deletes��s=��������#�#�� ���/�/��4�8�8�T�%>�%>��� � �$r*���c�����������������8����|�j�������������������sE|D�]@��}|�j������������������||�������s�|j������������������||�j������������������t��������j �������������������������}�B�|�j������������������j������������������sy�|D�]���}|j������������������||�j������������������t��������j�������������������������}|s�1|j������������������D�]n��}|�j������������������|�������du�s�|j������������������|dd|�j���������������������������|�j������������������j������������������d|�������D�]��\��}}}} |j������������������|d������������p����y�)NFTr����r����r����)r���r����ru���r"���r���r���r���r����r���r`���r3���r����r���r���r����) r'���rh���rT���r5���r{���r^���r����r����r����r����s ��� r(���rl���zManyToManyDP.presort_saves��s������#�#�� ���$�$�Y��6�'�=�=��t�x�x��)?�)?��G�� ���|�|�)�)����E��5�5��t�x�x��!A�!A��G���$�_�_�E��~�~�e�,��5�!�1�1�!�%)�&.�!%��� �2����04�{�{�/K�/K�$�e�0�O�A�q�#�t��&�5�5�c�D�5�I�0��-��r*���c����������� ������������g�}g�}g�}|�j������������������|�������}t����������������}|D�]����|j�������������������|�j������������������|�j�������������������������}|s�-|j��������������������������D�]7��} | �|��| f|v�r�i�} |�j �������������������| | d|d�������s�'|j������������������| ���������9�|j�������������������fd�|j��������������������������D��������������������|�|j������������������|��������|�j������������������||||��������y�)NFr����c��������������3���&����K����|�]��}|�f���� �y��wr,���rf����r����r����r5���s��� �r(���r����z/ManyToManyDP.process_deletes.<locals>.<genexpr>[��s����������C�/B�!�A�u�:�/B������) r����r����ru���r"���r���� non_addedr����rU���r����� _run_crud)r'���rh���rT����secondary_delete�secondary_insert�secondary_update� processed�tmpr{���r^���r����r5���s��� @r(���rn���zManyToManyDP.process_deletes<��s �������������4�4�Y�?� ��e���E�� �5�5��t�x�x��!:�!:��G���$�.�.�0�E��}�!�-�5�%�.�I�2M� �%'�N��,�,���&��!� � ��!�$�+�+�N�;��1�"�� � �C�w�/@�/@�/B�C�C�1��4�� ����S�!�����'�)9�;K� r*���c����������� ������R��� ��g�}g�}g�}|�j������������������|�������}t����������������}|D��]���� |�j�������������������xr�|�j������������������|� �������}|r"t��������j ������������������t��������j������������������z��} n!t��������j������������������t��������j������������������z��} |j������������������� |�j������������������| �������} | s��| j������������������D�]5��}|�� |f|v�r�i�}|�j������������������� ||d|d�������s�%|j������������������|���������7�| j������������������D�]5��}|�� |f|v�r�i�}|�j������������������� ||d|d�������s�%|j������������������|���������7�|j������������������� fd�| j������������������| j������������������z���D�����������������|s��G| j������������������D�]���}i�}t!��������j������������������� |�j"������������������|d|�j$������������������j&��������������������������t!��������j������������������||�j(������������������|d|�j$������������������j*��������������������������|j������������������|���������������|�|j������������������|��������|�j-������������������||||��������y�)NFr����r����c��������������3���&����K����|�]��}|�f���� �y��wr,���rf���r*��s��� �r(���r����z-ManyToManyDP.process_saves.<locals>.<genexpr>���s����������O�/N�!�A�u�:�/N�r+���old_)r����r����r���r����r���r���rs���r���ru���r"���r����r����rU���r`���r����r����r���r���r���r$���r����secondary_synchronize_pairsr-��)r'���rh���rT���r.��r/��r0��r1��r2���need_cascade_pksry���r{���r^���r����r5���s��� @r(���rq���zManyToManyDP.process_savesd��s6�������������4�4�Y�?� ��e���E�#'�#7�#7�7�� �D�<M�<M��5�=��� ��*�*� �:�:�;�����4�4� �:�:�;���� �5�5�e�T�X�X�w�O�G��$�]�]�E� �,�%���9�1L� �%'�N��,�,��u�n�e�Y����!�$�+�+�N�;��+��%�_�_�E� �,�%���9�1L� �%'�N��,�,���&��!� � ��!�$�+�+�N�;��-��� � �O�w�}�}�w���/N�O�O�#�!(�!2�!2��)+�����!� �K�K�*�"� �I�I�7�7������!� �K�K�*�"� �I�I�A�A���)�/�/��?�#�"3�W��|�� ����S�!�����'�)9�;K� r*���c�����������������*����|j�������������������j������������������|�j�������������������������}|�r|d���}|�j������������������j ��������������������������j������������������t ��������j������������������|�j������������������j������������������D��cg�c]>��}|j������������������|v�r.|t ��������j������������������|j������������������|j��������������������������k(����@�c}���������}|j������������������||�������} | j��������������������������rZ| j������������������t��������|�������k7��rBt!��������j"������������������d|�j������������������j$������������������t��������|�������| j������������������fz����������|�r|d���}|�j������������������j'��������������������������j������������������t ��������j������������������|�j������������������j������������������D��cg�c]A��}|j������������������|v�r1|t ��������j������������������d|j������������������z���|j��������������������������k(����C�c}���������}|j������������������||�������} | j��������������������������rZ| j������������������t��������|�������k7��rBt!��������j"������������������d|�j������������������j$������������������t��������|�������| j������������������fz����������|r-|�j������������������j)��������������������������}|j������������������||��������y�y�c�c}w�c�c}w�)Nr���)�type_zRDELETE statement on table '%s' expected to delete %d row(s); Only %d were matched.r5��zRUPDATE statement on table '%s' expected to update %d row(s); Only %d were matched.)�transaction� connectionr���r���r�����wherer����and_r����r"���� bindparam�type�execute�supports_sane_multi_rowcount�rowcount�lenr����StaleDataError�descriptionr�����insert) r'���rh���r/��r0��r.��r;��r����r����� statement�results ��� r(���r-��zManyToManyDP._run_crud���sJ�������*�*�5�5�d�k�k�B� ��-�a�0�N����-�-�/�5�5�����"&���!1�!1��!1�A��5�5�N�2���S�]�]�1�5�5����?�?�!1����I�� �'�'� �3C�D�F���3�3�5��/�/�S�)9�%:�:��(�(�7�����2�2��,�-�����������-�a�0�N����-�-�/�5�5�����"&���!1�!1��!1�A��5�5�N�2���S�]�]�6�A�E�E�>����H�H�!1����I�� �'�'� �3C�D�F���3�3�5��/�/�S�)9�%:�:��(�(�7�����2�2��,�-��������������-�-�/�I����y�*:�;����a��4s����8AJ�AJc����������� �����������|�j������������������|��������|�y|�d|j������������������j������������������|�������sI|j������������������s<t ��������j ������������������dt ��������j������������������|��������d|�d|�j�������������������d���������yt��������j������������������||�j������������������||�j������������������j��������������������������t��������j������������������||�j������������������||�j������������������j��������������������������y)NFr����r����r����r����T)r����r����r����r`���r ���r����r����r����r���r���� populate_dictr���r$���r���r6��r����s��� r(���r����zManyToManyDP._synchronize���s�������� ���U�#���=����Y�%6�%6�%F�%F�u�%M��=�=�� � ��"�1�1�%�8�)�T�Y�Y�P�� ������4�;�;��� � �0K�0K� �� �����K�K���I�I�1�1� ��r*���c�����������������n�����t��������j������������������|||�j������������������|�j������������������j�������������������������S�r,���r����r����s��� r(���r����zManyToManyDP._pks_changed��r����r*���N)r����r����r����rA���rV���ri���rl���rn���rq���r-��r����r����rf���r*���r(���r"��r"�����s6������ �6�2 � J�D& �PK �Z;<�z�@ r*���r"��N)r ��� __future__r�����r���r���r���r���r ���r����� interfacesr ���r���r���r%���r���r���r����r����r����r"��r-���rf���r*���r(����<module>rO�����s��������#���������� ��"��!��!�������n?��n?�b r �%��r �j ^�%��^�Br �)��r �jx �&��x �x ��{� �{�����r*���