
    |hi                       d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	l	m
Z
 dd
l	mZ ddl	mZ ddl	mZ ddl	mZ ddlmZ er$ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ d Z G d d      Z G d d      Z G d de      Z G d d      Z  G d dee       Z! G d  d!e       Z" G d" d#e       Z# G d$ d%e       Z$ G d& d'e       Z% G d( d)e       Z& G d* d+e       Z'y,)-zThe internals for the unit of work system.

The session's flush() process passes objects to a contextual object
here, which assembles flush tasks based on mappers and their properties,
organizes them in order of dependency, and executes.

    )annotations)Any)Dict)Optional)Set)TYPE_CHECKING   
attributes)exc)util   )event)topological)DependencyProcessor)MapperProperty)Mapper)Session)SessionTransaction)InstanceStatec                   |j                   fd}fd}fd}t        j                  | d|dd       t        j                  | d|ddd       t        j                  | d	|ddd       t        j                  | d
|ddd       y)z\Establish event listeners on object attributes which handle
    cascade-on-set/append.

    c                b   |y | j                   }|r|j                  r|j                  d       | j                  j                  j
                     }t        j                  |      }|j                  j                  r1|j                  k(  r"|j                  |      s|j                  |       |S )Nzcollection append)session_warn_on_events_flush_warningmanagermapper_propsr   instance_state_cascadesave_updatekey_contains_state_save_or_update_statestateitem	initiatorkwsessprop
item_stater"   s          Z/var/www/html/fluten_python/venv/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.pyappendz$track_cascade_events.<locals>.append2   s     <}}####$78==''..s3D#2248J ))IMM),,Z8**:6    c                   |y | j                   }| j                  j                  j                     }|r+|j                  r|j                  |j                  rdnd       ||t        j                  ur|t        j                  urr|j                  j                  r[t        j                  |      }|j                  j                  |      r*|r ||j                  v r|j                  |       y d|_        y y y y y y )Nzcollection removezrelated attribute deleteT)r   r   r   r   r   r   uselistr   	NEVER_SETPASSIVE_NO_RESULTr    delete_orphanr   
_is_orphan_newexpunge_orphaned_outside_of_sessionr%   s          r-   removez$track_cascade_events.<locals>.removeI   s    <}}}}##**3/D((<< $/ J000J888++ $2248J{{%%j1J$))3LL& ?CJ; 2 , 9 1 r/   c                   ||u r|S | j                   }|r)|j                  r|j                  d       | j                  j                  j
                  	   }|\t        j                  |      }|j                  j                  r1	|j                  k(  r"|j                  |      s|j                  |       ||t        j                  urw|t        j                  ure|j                  j                  rOt        j                  |      }||j                   v r,|j                  j#                  |      r|j%                  |       |S )Nzrelated attribute set)r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r2   r3   r4   r6   r5   r7   )
r&   newvalueoldvaluer(   r)   r*   r+   newvalue_stateoldvalue_stater"   s
            r-   set_z"track_cascade_events.<locals>.set_k   s    xO}}####$;<==''..s3D#!+!:!:8!DMM--	- 00@..~> $J$8$88J$@$@@MM// ",!:!:8!D!TYY.4;;3I3I"4 LL*r/   append_wo_mutationT)rawinclude_keyr.   )rA   retvalrB   r9   setN)r"   r   listen)
descriptorr+   r.   r9   r?   r"   s        @r-   track_cascade_eventsrG   +   s    
 ((C. CD"H 
LL(&d 
LLHf$t 
LLHf$t 
LLE4T$Dr/   c                     e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ddZed        Zd Zd Zd Z	d Z
ej                  fdZd Zd Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 d dZd Zd Zej(                  d        Zd Zd Zd Zd!dZd!dZy)"UOWTransactionr   r   r   transactionzDict[str, Any]r   z7util.defaultdict[Mapper[Any], Set[DependencyProcessor]]depsz6util.defaultdict[Mapper[Any], Set[InstanceState[Any]]]mappersc                   || _         i | _        t        j                  t              | _        t        j                  t              | _        i | _        i | _        t	               | _	        i | _
        t        j                  d       | _        y )Nc                 *    t               t               fS N)rD    r/   r-   <lambda>z)UOWTransaction.__init__.<locals>.<lambda>   s    CE35> r/   )r   r   r   defaultdictrD   rK   rL   presort_actionspostsort_actionsdependenciesstatespost_update_states)selfr   s     r-   __init__zUOWTransaction.__init__   sy      $$S)	
 '',
  "
 !#  E
  #'"2"23I"Jr/   c                ,    t        | j                        S rO   )boolrV   rX   s    r-   has_workzUOWTransaction.has_work   s    DKK  r/   c                    |j                   r"	 |j                  |t        j                         yy# t        j
                  $ r | j                  j                  |g       Y yw xY w)zZReturn ``True`` if the given state is expired and was deleted
        previously.
        TF)expired_load_expiredr   PASSIVE_OFForm_excObjectDeletedErrorr   _remove_newly_deletedrX   r&   s     r-   was_already_deletedz"UOWTransaction.was_already_deleted   sY     ==##E:+A+AB  -- 22E7;s    0 /A"!A"c                F    || j                   v xr | j                   |   d   S )z[Return ``True`` if the given state is marked as deleted
        within this uowtransaction.r   rV   re   s     r-   
is_deletedzUOWTransaction.is_deleted   s&     #=E(:1(==r/   c                l    || j                   v r| j                   |   S  |       x| j                   |<   }|S rO   r
   )rX   r"   	callable_rets       r-   memozUOWTransaction.memo   s7    $//!??3'')24DOOC 3Jr/   c                J    | j                   |   d   }|df| j                   |<   y)z;Remove pending actions for a state from the uowtransaction.r   TNrh   )rX   r&   isdeletes      r-   remove_state_actionsz#UOWTransaction.remove_state_actions   s*     ;;u%a(&-Er/   c                   d||f}|| j                   v r| j                   |   \  }}}|t         j                  z  s|t         j                  z  r|j                  |   j                  }|j	                  ||j
                  t         j                  t         j                  z  t         j                  z        }|r|j                  r|j                         }n|}|||f| j                   |<   |S |j                  |   j                  }|j	                  ||j
                  |t         j                  z  t         j                  z        }|r|j                  r|j                         }n|}|||f| j                   |<   |S )zOFacade to attributes.get_state_history(), including
        caching of results.history)r   SQL_OKr   implget_historydictra   LOAD_AGAINST_COMMITTEDNO_RAISEuses_objectsas_state)	rX   r&   r"   passivehashkeyrr   state_historycached_passivert   s	            r-   get_attribute_historyz$UOWTransaction.get_attribute_history   sm    eS) doo%59__W5M2G]N
 #Z%6%66j///}}S)..**JJ** 778 ))* t00$+$4$4$6M$+M,3]G+L($ ! ==%**D &&

334%%&G 4,, ' 0 0 2 '(/'HDOOG$r/   c                "    |df| j                   v S )NT)rS   )rX   	processors     r-   has_depzUOWTransaction.has_dep*  s    4 D$8$888r/   c                \    ||f}|| j                   vrt        ||      | j                   |<   y y rO   )rS   
Preprocess)rX   r   
fromparentr"   s       r-   register_preprocessorz$UOWTransaction.register_preprocessor-  s6    *%d***(29j(ID  % +r/   Nc           	        | j                   j                  |      sA|j                  s4|2t        j                  dt        j                  |      d|d|d       y|| j                  vre|j                  j                  }|| j                  vr| j                  |       | j                  |   j                  |       ||f| j                  |<   y|s|s|r|df| j                  |<   y)NzObject of type z not in session, z operation along 'z' will not proceedFT)r   r#   deletedr   warnorm_utilstate_class_strrV   r   r   rL   _per_mapper_flush_actionsadd)rX   r&   ro   listonlycancel_delete	operationr+   r   s           r-   register_objectzUOWTransaction.register_object2  s     ||++E2 ==Y%:		  //6	4I
 #]]))FT\\)..v6LL $$U+"*H!5DKK  ]&.%6E"r/   c                    |j                   j                  j                  }| j                  |   \  }}|j	                  |       |j                  |       y rO   )r   r   base_mapperrW   r   update)rX   r&   post_update_colsr   rV   colss         r-   register_post_updatez#UOWTransaction.register_post_updateT  sD    %%11..v6

5$%r/   c                P   t        | |j                        }t        | |j                        }| j                  j	                  ||f       |j
                  D ]  }|j                  |         |j                  D ],  }|j                  r|j                  }|j                  |        . y rO   )
SaveUpdateAllr   	DeleteAllrU   r   _dependency_processorsper_property_preprocessorsrelationshipsviewonly_dependency_processor)rX   r   savesdeletesdepr+   s         r-   r   z(UOWTransaction._per_mapper_flush_actionsZ  s    dF$6$67D&"4"45ug./00 	1C**40	1 (( 	1D}},,C**40		1r/   c                .    t        j                  d       S )a  return a dynamic mapping of (Mapper, DependencyProcessor) to
        True or False, indicating if the DependencyProcessor operates
        on objects of that Mapper.

        The result is stored in the dictionary persistently once
        calculated.

        c                v    | d   j                   j                  | d   j                        | d   j                  u S )Nr   r	   )r   getr"   r+   )tups    r-   rQ   z0UOWTransaction._mapper_for_dep.<locals>.<lambda>s  s.    A))#a&**5QD r/   )r   PopulateDictr\   s    r-   _mapper_for_depzUOWTransaction._mapper_for_deph  s       D
 	
r/   c                |    | j                   }|D cg c]   }||j                  j                  |f   s|" c}S c c}w )zmFilter the given list of InstanceStates to those relevant to the
        given DependencyProcessor.

        )r   r   r   )rX   r   rV   mapper_for_depss        r-   filter_states_for_depz$UOWTransaction.filter_states_for_depv  s9    
 --!Ma^QYY5E5Es4K%LMMMs    99c              #     K   ||f}|j                   j                  D ]-  }| j                  |   D ]  }| j                  |   |k(  s|  / y wrO   )r   self_and_descendantsrL   rV   )rX   r   ro   r   checktupr&   s         r-   states_for_mapper_hierarchyz*UOWTransaction.states_for_mapper_hierarchy~  sY     h'((== 	 Ff-  ;;u%1K 	 s   AA	Ac           	        	 d}t        | j                  j                               D ]  }|j                  |       sd} |snBt	        j
                  | j                  t        | j                  j                                     x| _        }|r1|D ci c]  }|t        |j                  |              }}t        | j                        D ]  }d|v s/|d   j                  s |d   j                  s|j                  |      r| j                  j                  |       R|d   |v rI| j                  j                  |       ||d      D ]"  }| j                  j                  ||d   f       $ |d   |v s| j                  j                  |       ||d      D ]"  }| j                  j                  |d   |f       $  | j                  j                         D ch c]  }|j                  r| c}j                  |      S c c}w c c}w )z}Generate the full, unsorted collection of PostSortRecs as
        well as dependency pairs for this UOWTransaction.

        TFNr   r	   )listrS   valuesexecuter   find_cyclesrU   rT   cyclesrD   per_state_flush_actionsdisabled
issupersetr9   r   
difference)	rX   rl   actionr   recconvertedger   as	            r-   _generate_actionsz UOWTransaction._generate_actions  s	    Ct33::<= >>$'C    +66tD$9$9$@$@$BC 
 	
f  HN@CS44T:;;G  T../ >DLAw''Aw''((.%%,,T2!W&%%,,T2&tAw/ >))--sDGn=>!W&%%,,T2&tAw/ >))--tAwn=>>$ ,,335
QZZA

*V
	10
s   "HH	.H	c                v   | j                         }t        |d       }| j                  rYt        j                  | j
                  |      D ]5  }t        |      }|s|j                         }|j                  | |       |r%7 y t        j                  | j
                  |      D ]  }|j                  |         y )Nc                    | j                   S rO   )sort_key)r'   s    r-   rQ   z(UOWTransaction.execute.<locals>.<lambda>  s
    T]] r/   )r"   )r   sortedr   r   sort_as_subsetsrU   rD   popexecute_aggregatesortr   )rX   rT   subsetr?   nr   s         r-   r   zUOWTransaction.execute  s    113!*
 ;;%55!!#3 4 6{
A''d3 	4 #''(9(9;KL "D!"r/   c                V   | j                   syt        | j                         }| j                   j                         D ch c]  \  }\  }}|s| }}}}|j                  |      }|r| j                  j                  |       |r| j                  j                  |       yyc c}}}w )zMark processed objects as clean / deleted after a successful
        flush().

        This method is called within the flush() method after the
        execute() method has succeeded and the transaction has been committed.

        N)rV   rD   itemsr   r   rd   _register_persistent)rX   rV   r   ro   r   isdelothers          r-   finalize_flush_changesz%UOWTransaction.finalize_flush_changes  s     {{T[[!/3{{/@/@/B
 
+1*xhA
 
 !!%(LL..u5LL--e4 
s   B$B$)r   r   )FFFNN)r&   zInstanceState[Any]ro   r[   r   r[   r   r[   r   zOptional[str]r+   zOptional[MapperProperty]returnr[   )r   None)__name__
__module____qualname____annotations__rY   propertyr]   rf   ri   rm   rp   r   PASSIVE_NO_INITIALIZEr   r   r   r   r   r   r   memoized_propertyr   r   r   r   r   r   rP   r/   r-   rI   rI      s   ##
AACC+KZ ! !
>. #-"B"B3j9J ##')- !    	 
   !  '  
 D&1 

 
N 2h"65r/   rI   c                      e Zd ZdZd Zy)IterateMappersMixinrP   c                      j                   r3t         fd j                  j                  j                  D              S  j                  j
                  j                  S )Nc              3  X   K   | ]!  }j                   |j                  f   r| # y wrO   )r   dependency_processor).0mrX   uows     r-   	<genexpr>z/IterateMappersMixin._mappers.<locals>.<genexpr>  s2      &&4+D+D'EF s   '*)r   iterr   parentr   r   rX   r   s   ``r-   _mapperszIterateMappersMixin._mappers  sP    ?? 2299NN   ,,33HHHr/   N)r   r   r   	__slots__r   rP   r/   r-   r   r     s    IIr/   r   c                      e Zd ZdZd Zd Zy)r   )r   r   	processedsetup_flush_actionsc                L    || _         || _        t               | _        d| _        y NF)r   r   rD   r   r   )rX   r   r   s      r-   rY   zPreprocess.__init__   s"    $8!$#( r/   c                   t               }t               }| j                  |      D ]i  }|j                  |   j                  | j                        D ]<  }|j
                  |   \  }}|r|r|j                  |       ,|j                  |       > k |r7| j                  j                  ||       | j                  j                  |       |r7| j                  j                  ||       | j                  j                  |       |s|ri| j                  s\| j                  j                  ||d      s| j                  j                  ||d      r"| j                  j                  |       d| _        yyNTF)rD   r   rL   r   r   rV   r   r   presort_deletesr   presort_savesr   prop_has_changesper_property_flush_actions)rX   r   delete_statessave_statesr   r&   ro   r   s           r-   r   zPreprocess.execute  sD   emmC( 	/FV,77G /'*zz%'8$8%))%0#./	/ %%55c=INN!!-0%%33CENN!!+.K++)):: ,,==e ))DDSI+/(r/   N)r   r   r   r   rY   r   rP   r/   r-   r   r     s    I)!r/   r   c                      e Zd ZdZd Zd Zy)PostSortRec)r   c                    | f|z   }||j                   v r|j                   |   S t        j                  |       x|j                   |<   }d|_        |S r   )rT   object__new__r   )clsr   argsr"   rl   s        r-   r   zPostSortRec.__new__-  sV    ftm#&&&'',,.4nnS.AAC  % CLJr/   c                &    | j                  |       y rO   )r   )rX   r   recss      r-   r   zPostSortRec.execute_aggregate6  s    Sr/   N)r   r   r   r   r   r   rP   r/   r-   r   r   *  s    Ir/   r   c                  .    e Zd ZdZd Zd Zd Zd Zd Zy)
ProcessAll)r   ro   r   r   c                    || _         d| j                   j                  |f| _        || _        || _        |j                  |j
                  j                     j                  |       y )Nr   )r   r   ro   r   rK   r   r   r   )rX   r   r   ro   r   s        r-   rY   zProcessAll.__init__=  s_    $8!%%..

 !$%,,889== 	
r/   c                    | j                  |      }| j                  r| j                  j                  ||       y | j                  j	                  ||       y rO   )	_elementsro   r   process_deletesprocess_saves)rX   r   rV   s      r-   r   zProcessAll.executeJ  sC    $==%%55c6B%%33C@r/   c                    t        g       S rO   )r   r   s     r-   r   z"ProcessAll.per_state_flush_actionsQ  s    
 Bxr/   c                h    | j                   j                  d| j                  d| j                  dS )N(z, isdelete=))	__class__r   r   ro   r\   s    r-   __repr__zProcessAll.__repr__X  s)    NN##%%MM
 	
r/   c              #     K   | j                  |      D ]?  }|j                  |   D ]+  }|j                  |   \  }}|| j                  k(  s%|r(| - A y wrO   )r   rL   rV   ro   )rX   r   r   r&   ro   r   s         r-   r  zProcessAll._elements_  s\     mmC( 	 FV,  '*zz%'8$8t}},XK 	 s   AAA	AN)	r   r   r   r   rY   r   r   r
  r  rP   r/   r-   r   r   :  s!    LI
A
 r/   r   c                  F    e Zd ZdZd Z ej                  d      d        Zy)PostUpdateAll)r   ro   r   c                H    || _         || _        d|j                  |f| _        y )Nr  )r   ro   	_sort_keyr   )rX   r   r   ro   s       r-   rY   zPostUpdateAll.__init__j  s$     (&*:*:HEr/   sqlalchemy.orm.persistencec                   t         j                  j                  }|j                  | j                     \  }}|D cg c]$  }|j
                  |   d   | j                  k(  s#|& }}|j                  | j                  |||       y c c}w Nr   )r   	preloadedorm_persistencerW   r   rV   ro   post_update)rX   r   persistencerV   r   r   s         r-   r   zPostUpdateAll.executeo  sr    nn44--dkk:#Iszz!}Q'74=='H!IIVS$? Js   $B BN)r   r   r   r   rY   r   preload_moduler   rP   r/   r-   r  r  g  s1    0IF
 T56@ 7@r/   r  c                  R    e Zd ZdZd Z ej                  d      d        Zd Zd Z	y)r   r   r   c                X    || _         d|j                  f| _        ||j                  u sJ y )Nr   r   r  r   r   rX   r   r   s      r-   rY   zSaveUpdateAll.__init__{  s/    (&*:*:;+++++r/   r  c                    t         j                  j                  j                  | j                  |j                  | j                  dd      |       y r   )r   r  r  save_objr   r   r   s     r-   r   zSaveUpdateAll.execute  s:    &&//KK++DKKF	
r/   c              #    K   t        |j                  | j                  dd            }| j                  j                  }t	        ||      }|D ]/  }t        ||      }|j                  j                  ||f       | 1 |j                  | j                     D ]'  }|j                  ||      }|j                  ||d       ) y wr   )r   r   r   r   r   SaveUpdateStaterU   r   rK   r   r   )	rX   r   rV   r   
delete_allr&   r   r   states_for_props	            r-   r   z%SaveUpdateAll.per_state_flush_actions  s     ++DKKF
 kk--sK0
 	E %S%0F  &*!56L	 88DKK( 	EC!77VDO''_eD	E   CCc                N    | j                   j                  d| j                  dS Nr  r  r	  r   r   r\   s    r-   r
  zSaveUpdateAll.__repr__      >>22DKK@@r/   N
r   r   r   r   rY   r   r  r   r   r
  rP   r/   r-   r   r   x  s:    &I,
 T56
 7
E"Ar/   r   c                  R    e Zd ZdZd Z ej                  d      d        Zd Zd Z	y)r   r  c                X    || _         d|j                  f| _        ||j                  u sJ y )Nr   r  r  s      r-   rY   zDeleteAll.__init__  s/    $f&6&67+++++r/   r  c                    t         j                  j                  j                  | j                  |j                  | j                  dd      |       y r   )r   r  r  
delete_objr   r   r   s     r-   r   zDeleteAll.execute  s:    &&11KK++DKKuE	
r/   c              #    K   t        |j                  | j                  dd            }| j                  j                  }t	        ||      }|D ]/  }t        ||      }|j                  j                  ||f       | 1 |j                  | j                     D ]'  }|j                  ||      }|j                  ||d       ) y wr   )r   r   r   r   r   DeleteStaterU   r   rK   r   r   )	rX   r   rV   r   save_allr&   r   r   r"  s	            r-   r   z!DeleteAll.per_state_flush_actions  s     ++DKKuE
 kk-- k2 	E !e,F  (F!34L	 88DKK( 	DC!77VDO''_dC	Dr#  c                N    | j                   j                  d| j                  dS r%  r&  r\   s    r-   r
  zDeleteAll.__repr__  r'  r/   Nr(  rP   r/   r-   r   r     s:    &I,
 T56
 7
D"Ar/   r   c                  "    e Zd ZdZd Zd Zd Zy)ProcessState)r   ro   r&   r   c                T    || _         d|j                  f| _        || _        || _        y Nr2  )r   r   ro   r&   )rX   r   r   ro   r&   s        r-   rY   zProcessState.__init__  s+    $8!')=)F)FG 
r/   c                   | j                   }| j                  }| j                  }|D cg c].  }|j                   |u r|j                  |u r|j                  |u r|0 }}|j                  |       | j                  g|D cg c]  }|j                   c}z   }|r|j                  ||       y |j                  ||       y c c}w c c}w rO   )r	  r   ro   difference_updater&   r  r  )	rX   r   r   cls_r   ro   rour_recsrV   s	            r-   r   zProcessState.execute_aggregate  s    ~~#88== 
{{d"&&*>>

h&	 
 
 	x(**( ;Q ;; 00f= ..sF;
 !<s   3B??Cc                    | j                   j                  d| j                  dt        j                  | j
                        d| j                  dS )Nr  z, z	, delete=r  )r	  r   r   r   	state_strr&   ro   r\   s    r-   r
  zProcessState.__repr__  s;    NN##%%tzz*MM	
 	
r/   N)r   r   r   r   rY   r   r
  rP   r/   r-   r2  r2    s    GI<$
r/   r2  c                  L    e Zd ZdZd Z ej                  d      d        Zd Zy)r   r&   r   r   c                    || _         |j                  j                  | _        d| j                  j                  f| _        y r4  r&   r   r   r  r   rX   r   r&   s      r-   rY   zSaveUpdateState.__init__  s0    
ll..')>)>?r/   r  c                j   t         j                  j                  }| j                  }| j                  }|D cg c]"  }|j                  |u s|j                  |u s!|$ }}|j                  |       |j                  || j                  g|D cg c]  }|j                   c}z   |       y c c}w c c}w rO   )r   r  r  r	  r   r6  r  r&   )rX   r   r   r  r7  r   r8  r9  s           r-   r   z!SaveUpdateState.execute_aggregate  s    nn44~~
q{{d2qxx67IA
 
 	x(TZZLX#>AGG#>>	
	

 $?s   B+B+B+B0c                t    | j                   j                  dt        j                  | j                        dS r%  r	  r   r   r;  r&   r\   s    r-   r
  zSaveUpdateState.__repr__  +    NN##tzz*
 	
r/   N	r   r   r   r   rY   r   r  r   r
  rP   r/   r-   r   r     s4    -I@
 T56

 7


r/   r   c                  L    e Zd ZdZd Z ej                  d      d        Zd Zy)r.  r=  c                    || _         |j                  j                  | _        d| j                  j                  f| _        y )Nr.  r?  r@  s      r-   rY   zDeleteState.__init__  s0    
ll..&(=(=>r/   r  c                   t         j                  j                  }| j                  }| j                  }|D cg c]"  }|j                  |u s|j                  |u s!|$ }}|j                  |       | j                  g|D cg c]  }|j                   c}z   }|j                  ||D 	cg c]  }	|j                  |	   d   s|	 c}	|       y c c}w c c}w c c}	w r  )	r   r  r  r	  r   r6  r&   r,  rV   )
rX   r   r   r  r7  r   r8  r9  rV   r   s
             r-   r   zDeleteState.execute_aggregate
  s    nn44~~
q{{d2qxx67IA
 
 	x(**( ;Q ;;;1#**Q-*:Q;S	

 !<;s#   CCCC)C
C
c                t    | j                   j                  dt        j                  | j                        dS r%  rC  r\   s    r-   r
  zDeleteState.__repr__  rD  r/   NrE  rP   r/   r-   r.  r.    s3    -I?
 T56
 7

r/   r.  N)(__doc__
__future__r   typingr   r   r   r   r    r   r   rb   r   r   r   r   
dependencyr   
interfacesr   r   r   r   r   r   r&   r   rG   rI   r   r   r   r   r  r   r   r2  r   r.  rP   r/   r-   <module>rP     s    #             /* +$odJ5 J5Z
I I/$ /d  * $k * Z@K @""AK "AJ"A "AJ!
; !
H
k 
8
+ 
r/   