
    hY                       d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 dd	lm
Z
 dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! dd lm"Z" dd!l#m$Z$ dd"l#m%Z% dd#l#m&Z& dd$l#m'Z' dd%l(m)Z) dd&l(m*Z* dd'l(m+Z+ dd(l,m-Z- erNdd)lm.Z. dd*l/m0Z0 dd+lm1Z1 dd,lm2Z2 dd-l3m4Z4 dd.l3m5Z5 dd/l6m7Z7 dd0lm8Z8 dd1l9m:Z: dd2l"m;Z; dd3l<m=Z= dd4l>m?Z? dd5l>m@Z@  ed6e7      ZA G d8 d9eeA         ZB G d: d;ej                  ej                        ZEe!j                  ej                  j                  d<=       G d> d?ej                  e!j                                      ZK G d@ dA      ZL G dB dCeeA         ZM G dD dEeMeA         ZNyF)GzWrite-only collection API.

This is an alternate mapped attribute style that only supports single-item
collection mutation operations.   To read the collection, a select()
object must be executed each time.

.. versionadded:: 2.0


    )annotations)Any)
Collection)Dict)Generic)Iterable)Iterator)List)NoReturn)Optional)overload)Tuple)Type)TYPE_CHECKING)TypeVar)Union)	bindparam   )
attributes)
interfaces)relationships)
strategies)	NEVER_SET)object_mapper)PassiveFlag)RelationshipDirection   )exc)inspect)log)util)delete)insert)select)update)Delete)Insert)Update)Literal)QueryableAttribute)_InstanceDict)AttributeEventToken)LoaderCallableStatus)_AdaptedCollectionProtocol)CollectionAdapter)Mapper)_RelationshipOrderByArg)InstanceState)AliasedClass)	_Dispatch)
FromClause)Select_T)boundc                      e Zd ZU dZded<   ded<   ded<   ded<   	 d	 	 	 	 	 	 	 	 	 dd	Zedd
       Zedd       ZddZ	ddZ
ddZddZy)WriteOnlyHistoryzDOverrides AttributeHistory to receive append/remove events directly.zutil.OrderedIdentitySetunchanged_itemsadded_itemsdeleted_itemsbool_reconcile_collectionNc                   |rt|t         j                  z  rt        j                  d| d| d      |j                  | _        |j
                  | _        |j                  | _        |j                  | _        y t        j                         | _        t        j                         | _        t        j                         | _        d| _        y )Nz
Attribute z can't load the existing state from the database for this operation; full iteration is not permitted.  If this is a delete operation, configure passive_deletes=True on the z- relationship in order to resolve this error.F)
r   SQL_OKr   InvalidRequestErrorr;   r<   r=   r?   r!   OrderedIdentitySet)selfattrstatepassiveapply_tos        AD:\EasyAligner\venv\Lib\site-packages\sqlalchemy/orm/writeonly.py__init__zWriteOnlyHistory.__init__U   s     +++--  '3 48& 933  $,#;#;D '33D!)!7!7D)1)G)GD&!%!8!8!:D#668D#'#:#:#<D ).D&    c                ^    t        | j                  j                  | j                              S N)listr<   unionr;   rD   s    rI   added_plus_unchangedz%WriteOnlyHistory.added_plus_unchangedp   s$    D$$**4+?+?@AArK   c                    t        | j                  j                  | j                        j                  | j                              S rM   )rN   r<   rO   r;   r=   rP   s    rI   	all_itemszWriteOnlyHistory.all_itemst   s=    ""4#7#78>>""
 	
rK   c                   | j                   rf| j                  j                  | j                        }| j                  j                  | j                        }| j                  j                  |      }n$| j                  | j                  | j                  }}}t        j                  t        |      t        |      t        |            S rM   )	r?   r<   
differencer;   r=   intersectionr   HistoryrN   )rD   addeddeleted	unchangeds       rI   
as_historyzWriteOnlyHistory.as_history|   s    %%$$//0D0DEE((55d6J6JKG,,77@I   $$"" &9E
 !!$u+tIWNNrK   c                2    t        | j                        |   S rM   )rN   r<   )rD   indexs     rI   indexedzWriteOnlyHistory.indexed   s    D$$%e,,rK   c                :    | j                   j                  |       y rM   )r<   addrD   values     rI   	add_addedzWriteOnlyHistory.add_added   s    U#rK   c                    || j                   v r| j                   j                  |       y | j                  j                  |       y rM   )r<   remover=   r`   ra   s     rI   add_removedzWriteOnlyHistory.add_removed   s8    D$$$##E*""5)rK   rM   )
rE   WriteOnlyAttributeImplrF   InstanceState[_T]rG   r   rH   zOptional[WriteOnlyHistory[_T]]returnNone)ri   zList[_T])ri   attributes.History)r]   zUnion[int, slice]ri   zUnion[List[_T], _T])rb   r7   ri   rj   )__name__
__module____qualname____doc____annotations__rJ   propertyrQ   rS   r[   r^   rc   rf    rK   rI   r:   r:   M   s    N,,((** 48/$/ !/ 	/
 1/ 
/6 B B 
 
O-$*rK   r:   c                      e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded<   dZ	ded	<   d
Z
ded<   eZded<   ded<   	 	 	 	 	 	 	 	 	 	 	 	 d& fdZej                  f	 	 	 	 	 	 	 d'dZe	 	 d(	 	 	 	 	 	 	 	 	 d)d       Ze	 	 d(	 	 	 	 	 	 	 	 	 d*d       Ze	 	 d(	 	 	 	 	 	 	 	 	 d+d       Zdej                  f	 	 	 	 	 	 	 	 	 d+dZej(                  	 	 d,d       Zej(                  	 	 d,d       Z	 d-	 	 	 	 	 	 	 	 	 	 	 d.dZ	 d-	 	 	 	 	 	 	 	 	 	 	 d.dZ	 	 	 	 	 	 d/dZdej                  dddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d0dZd1dZ	 	 	 	 	 	 	 	 d2dZej:                  f	 	 	 	 	 	 	 d3d Zej>                  f	 	 	 	 	 	 	 d4d!Z 	 	 	 	 	 	 d5d"Z!ej:                  f	 	 	 	 	 	 	 	 	 	 	 d6d#Z"ej:                  f	 	 	 	 	 	 	 	 	 	 	 d6d$Z#ej:                  f	 	 	 	 	 	 	 	 	 	 	 d6d%Z$ xZ%S )7rg   Tr>   uses_objectsFdefault_accepts_scalar_loadersupports_population_supports_dynamic_iteration
collectiondynamicrr   r1   order_byzType[WriteOnlyHistory[Any]]collection_history_clszType[WriteOnlyCollection[Any]]query_classc                v    t        |   ||d |fi | || _        t        | _        |rt        |      | _        y y rM   )superrJ   target_mapperWriteOnlyCollectionr|   tuplerz   )rD   class_keydispatchr   rz   kw	__class__s          rI   rJ   zWriteOnlyAttributeImpl.__init__   s@     	dH;;*.!(ODM rK   c                    |t         j                  z  s*| j                  |t         j                        j                  S | j                  | |      S rM   )r   rA   _get_collection_historyPASSIVE_NO_INITIALIZEr<   r|   )rD   rF   dict_rG   s       rI   getzWriteOnlyAttributeImpl.get   sJ     +++//{88k ##D%00rK   c                     y rM   rr   rD   rF   r   	user_datarG   s        rI   get_collectionz%WriteOnlyAttributeImpl.get_collection         rK   c                     y rM   rr   r   s        rI   r   z%WriteOnlyAttributeImpl.get_collection   r   rK   c                     y rM   rr   r   s        rI   r   z%WriteOnlyAttributeImpl.get_collection   s     rK   Nc                    |t         j                  z  s'| j                  ||      j                  }t        |      S | j                  ||      }|j                  }t        |      S rM   )r   rA   r   r<   rQ   DynamicCollectionAdapter)rD   rF   r   r   rG   datahistorys          rI   r   z%WriteOnlyAttributeImpl.get_collection   sa     +++//w?KKD (-- 225'BG//D'--rK   c                J    t        j                  | t         j                        S rM   )r   r,   	OP_APPENDrP   s    rI   _append_tokenz$WriteOnlyAttributeImpl._append_token        --dJ4H4HIIrK   c                J    t        j                  | t         j                        S rM   )r   r,   	OP_REMOVErP   s    rI   _remove_tokenz$WriteOnlyAttributeImpl._remove_token   r   rK   c                    || j                  ||      }|j                  |       | j                  j                  D ]  } ||||xs | j                        } | j
                  r*|'| j                  t        j                  |      |d       y y y NT)	_modified_eventrc   r   appendr   trackparentsethasparentr   instance_staterD   rF   r   rb   	initiatorcollection_historyfns          rI   fire_append_eventz(WriteOnlyAttributeImpl.fire_append_event   s     %!%!5!5eU!C$$U+--&&BueY%D$2D2DEE '  1j77>tL !2rK   c                   || j                  ||      }|j                  |       | j                  r(|&| j                  t	        j
                  |      |d       | j                  j                  D ]  } ||||xs | j                          y )NF)	r   rf   r   r   r   r   r   re   r   r   s          rI   fire_remove_eventz(WriteOnlyAttributeImpl.fire_remove_event  s     %!%!5!5eU!C&&u- 1j77>uM--&&BueY<$*<*<= 'rK   c                    | j                   |j                  vr8| j                  | |t        j                        |j                  | j                   <   |j                  || t               d|| j                   <   |j                  | j                      S r   )r   committed_stater{   r   PASSIVE_NO_FETCHr   r   )rD   rF   r   s      rI   r   z&WriteOnlyAttributeImpl._modified_event   sz     885000.2.I.Ie[99/E!!$((+ 	eT95 dhh$$TXX..rK   c	                   |r|j                   | j                   u ry |r|y |}	t        |	      }
|j                  rL| j                  st	        j
                  d|  d      t        j                  | j                  |||            }| j                  ||      }|j                  s|j                  }nj                  |j                        }|j                  |
      }t        j                  |
      j                  |      }|j                  |      }|
D ]  }||v s| j                  |||d |        |D ]  }| j                  |||d |        y )NzCollection "zV" does not support implicit iteration; collection replacement operations can't be usedrG   )r   )parent_tokenrN   has_identityrw   r   rB   r!   IdentitySetr   r   r<   rO   rV   rU   r   r   )rD   rF   r   rb   r   rG   	check_oldpop_adaptiterable
new_valuesold_collectionr   	constants	additionsremovalsmembers                    rI   setzWriteOnlyAttributeImpl.set/  sp    //43D3DD5=(^
33--"4& )$ $ 
 "--w7N "11%?!!/;;N+11"..N #//
;	$$Z0;;IF	!,,Y7 F"&&'9 '  ! F""#5 #  rK   c                    t               rM   NotImplementedError)rD   argskwargss      rI   r"   zWriteOnlyAttributeImpl.deletel  s    !##rK   c                    t        d      )Nz7Dynamic attributes don't support collection population.r   )rD   rF   r   rb   s       rI   set_committed_valuez*WriteOnlyAttributeImpl.set_committed_valueo  s     "E
 	
rK   c                F    | j                  ||      }|j                         S rM   )r   r[   )rD   rF   r   rG   cs        rI   get_historyz"WriteOnlyAttributeImpl.get_historyv  s"     ((8||~rK   c                    | j                  ||      }|j                  D cg c]  }t        j                  |      |f c}S c c}w rM   )r   rS   r   r   )rD   rF   r   rG   r   xs         rI   get_all_pendingz&WriteOnlyAttributeImpl.get_all_pending  sB     ((8;<;;G;a**1-q1;GGGs   Ac                   | j                   |j                  v r|j                  | j                      }n!| j                  | |t        j                        }|j
                  r(|t        j                  z  r| j                  | |||      S |S )N)rH   )r   r   r{   r   r   r   INIT_OK)rD   rF   rG   r   s       rI   r   z.WriteOnlyAttributeImpl._get_collection_history  s     88u,,,%%dhh/A++e[99A 7[-@-@#@..eWq /   HrK   c                6    || ur| j                  ||||       y y rM   )r   rD   rF   r   rb   r   rG   s         rI   r   zWriteOnlyAttributeImpl.append  %     D ""5%	B !rK   c                6    || ur| j                  ||||       y y rM   )r   r   s         rI   re   zWriteOnlyAttributeImpl.remove  r   rK   c                0    | j                  |||||       y )Nr   )re   r   s         rI   r   zWriteOnlyAttributeImpl.pop  s     	E5%GDrK   )r   z#Union[Type[Any], AliasedClass[Any]]r   strr   z"_Dispatch[QueryableAttribute[Any]]r   z
Mapper[_T]rz   r1   r   r   )rF   InstanceState[Any]r   r+   rG   r   ri   z8Union[util.OrderedIdentitySet, WriteOnlyCollection[Any]])..)
rF   r   r   r+   r   zLiteral[None]rG   z Literal[PassiveFlag.PASSIVE_OFF]ri   r/   )
rF   r   r   r+   r   r.   rG   r   ri   r/   )
rF   r   r   r+   r   z$Optional[_AdaptedCollectionProtocol]rG   r   ri   zIUnion[Literal[LoaderCallableStatus.PASSIVE_NO_RESULT], CollectionAdapter])ri   zattributes.AttributeEventTokenrM   )rF   r   r   r+   rb   r   r   Optional[AttributeEventToken]r   zOptional[WriteOnlyHistory[Any]]ri   rj   )rF   r   r   r+   ri   WriteOnlyHistory[Any])rF   r   r   r+   rb   r   r   r   rG   r   r   r   r   r>   r   r>   ri   rj   )r   r   r   r   ri   r   )rF   r   r   r+   rb   r   ri   r   )rF   r   r   r+   rG   r   ri   rk   )rF   r   r   r+   rG   r   ri   z$List[Tuple[InstanceState[Any], Any]])rF   r   rG   r   ri   r   )rF   r   r   r+   rb   r   r   r   rG   r   ri   rj   )&rl   rm   rn   rt   rp   ru   rv   rw   rx   ry   rz   r:   r{   rJ   r   PASSIVE_OFFr   r   r   r!   memoized_propertyr   r   r   r   r   r   r"   r   r   r   r   r   r   r   re   r   __classcell__)r   s   @rI   rg   rg      s    L$*/!4/ %%(--JGT(*H%*:J7J//,3, , 5	,
 ", *, ,&  +66	1!1 1 	1
 
B1 
 $'47 !    !	 
 2  
    
 14" !    .	 
   
    
 ;>"!  8	
 
  ;?*66.!. . 8	.
 .
." 
J	'J J
 
J	'J J ?CM!M M 	M
 1M <M 
M2 ?C>!> > 	>
 1> <> 
>&/'/0=/	/( 48*66;!; ; 	;
 1; ; ; ; ; 
;z$
'
0=
FI
	
  +;;	!  	
 
  +@@	H!H H 	H
 
.H'2=	0  +;;	C!	C 	C 		C
 1	C 	C 
	C"  +;;	C!	C 	C 		C
 1	C 	C 
	C"  +;;E!E E 	E
 1E E 
ErK   rg   
write_only)lazyc                      e Zd ZeZddZy)WriteOnlyLoaderc           	        d| _         | j                  r6| j                  j                  t        j
                  t        j                  fvr"t        j                  d| j                  z        t        j                  | j                  |d| j                  | j                  j                  | j                  j                  | j                  j                         y )NTztOn relationship %s, 'dynamic' loaders cannot be used with many-to-one/one-to-one relationships and/or uselist=False.)	useobject
impl_classr   rz   r|   )is_class_leveluselistparent_property	directionr   	ONETOMANY
MANYTOMANYr   rB   r   _register_attributer   mapperrz   r|   )rD   r   s     rI   init_class_attributez$WriteOnlyLoader.init_class_attribute  s    "||t33==  !!F
  
 ))!#'#7#78  	&&  ..55))22,,88	
rK   N)r   zMapper[Any]ri   rj   )rl   rm   rn   rg   r   r   rr   rK   rI   r   r     s     (J
rK   r   c                  D    e Zd ZU dZded<   d
dZddZddZddZddZ	y	)r   z9simplified CollectionAdapter for internal API consistencyCollection[Any]r   c                    || _         y rM   )r   )rD   r   s     rI   rJ   z!DynamicCollectionAdapter.__init__  s	    	rK   c                ,    t        | j                        S rM   )iterr   rP   s    rI   __iter__z!DynamicCollectionAdapter.__iter__  s    DIIrK   c                     y rM   rr   rP   s    rI   _reset_emptyz%DynamicCollectionAdapter._reset_empty  s    rK   c                ,    t        | j                        S rM   )lenr   rP   s    rI   __len__z DynamicCollectionAdapter.__len__  s    499~rK   c                     yr   rr   rP   s    rI   __bool__z!DynamicCollectionAdapter.__bool__  s    rK   N)r   r   )ri   zIterator[Any])ri   rj   )ri   int)ri   r>   )
rl   rm   rn   ro   rp   rJ   r   r   r   r   rr   rK   rI   r   r     s$    C
rK   r   c                  F    e Zd ZU dZesdZded<   ded<   ddZddZdd	Z	y
)AbstractCollectionWriterzsVirtual collection which includes append/remove methods that synchronize
    into the attribute event system.

    rr   r7   instancezTuple[FromClause, ...]	_from_objc                   |j                         }t        r|sJ || _        || _        t	        |      }|j
                  | j                  j                     }|j                  ,|j                  j                         |j                  f| _
        nd| _
        |j                  |d      f| _        | j                  j                  r| j                  j                  | _        y d| _        y )Nrr   F)alias_secondary)objr   r   rE   r   _propsr   	secondaryr   __clause_element__r   _with_parent_where_criteriarz   _order_by_clauses)rD   rE   rF   r   r   props         rI   rJ   z!AbstractCollectionWriter.__init__  s    99;O8 	x(}}TYY]]+>>% #kk<<>ODNDN h> 
 99%)YY%7%7D"%'D"rK   c                    |D ]Z  }| j                   j                  t        j                  | j                        t        j
                  | j                        |d        \ y rM   )rE   r   r   r   r   instance_dict)rD   iteratoritems      rI   _add_all_implz&AbstractCollectionWriter._add_all_impl  sH    DII))$--8((7	 rK   c                    | j                   j                  t        j                  | j                        t        j
                  | j                        |d        y rM   )rE   re   r   r   r   r  rD   r	  s     rI   _remove_implz%AbstractCollectionWriter._remove_impl"  s>    		%%dmm4$$T]]3		
rK   N)rE   rg   rF   rh   r  zIterable[_T]ri   rj   r	  r7   ri   rj   )
rl   rm   rn   ro   r   	__slots__rp   rJ   r
  r  rr   rK   rI   r   r     s,    
 	L%%(B
rK   r   c                  T    e Zd ZdZdZddZddZddZddZddZ	ddZ
dd	Zdd
Zy)r   a  Write-only collection which can synchronize changes into the
    attribute event system.

    The :class:`.WriteOnlyCollection` is used in a mapping by
    using the ``"write_only"`` lazy loading strategy with
    :func:`_orm.relationship`.     For background on this configuration,
    see :ref:`write_only_relationship`.

    .. versionadded:: 2.0

    .. seealso::

        :ref:`write_only_relationship`

    )r   rE   r  r   r  c                    t        d      )NzWriteOnly collections don't support iteration in-place; to query for collection items, use the select() method to produce a SQL statement and execute it with session.scalars().)	TypeErrorrP   s    rI   r   zWriteOnlyCollection.__iter__D  s    M
 	
rK   c                    t        | j                  j                        j                  | j                   }| j
                  r |j                  | j
                   }| j                  r |j                  | j                   }|S )zProduce a :class:`_sql.Select` construct that represents the
        rows within this instance-local :class:`_orm.WriteOnlyCollection`.

        )	r$   rE   r   wherer  r   select_fromr  rz   )rD   stmts     rI   r$   zWriteOnlyCollection.selectK  sl    
 5vdii--.44d6J6JK>>#4##T^^4D!! 4==$"8"89DrK   c                   t        | j                        }|j                  }|j                  | j                  j
                     }|j                  t        j                  urt        j                  d      i }|j                  D ]=  \  }}|j                  |||j                  |      }t        d|      ||j
                  <   ?  t        | j                  j                         j"                  di |S )aN  For one-to-many collections, produce a :class:`_dml.Insert` which
        will insert new rows in terms of this this instance-local
        :class:`_orm.WriteOnlyCollection`.

        This construct is only supported for a :class:`_orm.Relationship`
        that does **not** include the :paramref:`_orm.relationship.secondary`
        parameter.  For relationships that refer to a many-to-many table,
        use ordinary bulk insert techniques to produce new objects, then
        use :meth:`_orm.AbstractCollectionWriter.add_all` to associate them
        with the collection.


        zWrite only bulk INSERT only supported for one-to-many collections; for many-to-many, use a separate bulk INSERT along with add_all().N)	callable_rr   )r   r   r   r   rE   r   r   r   r   r   rB   synchronize_pairs_get_attr_w_warn_on_nonedictr   r#   r   values)rD   rF   r   r  r   lrr   s           rI   r#   zWriteOnlyCollection.insertW  s     &}}TYY]]+>>!6!@!@@))/  !#**DAq..

	B %TR8E!%%L + 6vdii--.55>>>rK   c                n     t        | j                  j                        j                  | j                   S )zProduce a :class:`_dml.Update` which will refer to rows in terms
        of this instance-local :class:`_orm.WriteOnlyCollection`.

        )r%   rE   r   r  r  rP   s    rI   r%   zWriteOnlyCollection.update  ,    
 5vdii--.44d6J6JKKrK   c                n     t        | j                  j                        j                  | j                   S )zProduce a :class:`_dml.Delete` which will refer to rows in terms
        of this instance-local :class:`_orm.WriteOnlyCollection`.

        )r"   rE   r   r  r  rP   s    rI   r"   zWriteOnlyCollection.delete  r!  rK   c                &    | j                  |       y)zAdd an iterable of items to this :class:`_orm.WriteOnlyCollection`.

        The given items will be persisted to the database in terms of
        the parent instance's collection on the next flush.

        Nr
  )rD   r  s     rI   add_allzWriteOnlyCollection.add_all  s     	8$rK   c                (    | j                  |g       y)zAdd an item to this :class:`_orm.WriteOnlyCollection`.

        The given item will be persisted to the database in terms of
        the parent instance's collection on the next flush.

        Nr$  r  s     rI   r`   zWriteOnlyCollection.add  s     	D6"rK   c                &    | j                  |       y)zRemove an item from this :class:`_orm.WriteOnlyCollection`.

        The given item will be removed from the parent instance's collection on
        the next flush.

        N)r  r  s     rI   re   zWriteOnlyCollection.remove  s     	$rK   N)ri   r   )ri   zSelect[Tuple[_T]])ri   r'   )ri   r(   )ri   r&   r  r  )rl   rm   rn   ro   r  r   r$   r#   r%   r"   r%  r`   re   rr   rK   rI   r   r   +  s9     I

&?PLL%# rK   r   N)Oro   
__future__r   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   sqlalchemy.sqlr    r   r   r   r   baser   r   r   r   r   r   r    r!   sqlr"   r#   r$   r%   sql.dmlr&   r'   r(   util.typingr)   r*   _typingr+   r,   r-   collectionsr.   r/   r   r0   r1   rF   r2   r3   eventr4   sql.selectabler5   r6   r7   r:   HasCollectionAdapterAttributeImplrg   class_loggerRelationshipPropertystrategy_forAbstractRelationshipLoader
Identifiedr   r   r   r   rr   rK   rI   <module>r;     s]  	 #                 $        '            !$&/*7.6$"!+'TF*wr{ F*RbE##Z%=%=bEJ	 ##00l0C
j;;S^^ 
 D 
4 *<
wr{ <
~{ 226 { rK   