
    ,h!W                       S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SS	KJ
r
  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSKJ!r!  SS KJ"r"  SS!K#J$r$  SS"K#J%r%  SS#K#J&r&  SS$K#J'r'  SS%K(J)r)  SS&K(J*r*  SS'K(J+r+  SS(K,J-r-  \(       aN  SS)KJ.r.  SS*K/J0r0  SS+KJ1r1  SS,KJ2r2  SS-K3J4r4  SS.K3J5r5  SS/K6J7r7  SS0KJ8r8  SS1K9J:r:  SS2K"J;r;  SS3K<J=r=  SS4K>J?r?  SS5K>J@r@  \" S6\S79rA " S8 S9\\A   5      rB " S: S;\R                  \R                  5      rE\!R                  \R                  R                  S<S=9 " S> S?\R                  \!R                  5      5       5       rK " S@ SA5      rL " SB SC\\A   5      rM " SD SE\M\A   5      rNgF)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                      \ rS rSr% SrS\S'   S\S'   S\S'   S\S'    S         SS
 jjr\SS j5       r\SS j5       r	SS jr
SS jrSS jrSS jrSrg	)WriteOnlyHistoryM   zDOverrides AttributeHistory to receive append/remove events directly.zutil.OrderedIdentitySetunchanged_itemsadded_itemsdeleted_itemsbool_reconcile_collectionNc                   U(       az  U[         R                  -  (       a  [        R                  " SU SU S35      eUR                  U l        UR
                  U l        UR                  U l        UR                  U l        g [        R                  " 5       U l        [        R                  " 5       U l        [        R                  " 5       U l        SU l        g )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        P/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/orm/writeonly.py__init__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                ^    [        U R                  R                  U R                  5      5      $ N)listr=   unionr<   rE   s    rJ   added_plus_unchanged%WriteOnlyHistory.added_plus_unchangedp   s$    D$$**4+?+?@AArM   c                    [        U R                  R                  U R                  5      R                  U R                  5      5      $ rO   )rP   r=   rQ   r<   r>   rR   s    rJ   	all_itemsWriteOnlyHistory.all_itemst   s=    ""4#7#78>>""
 	
rM   c                   U R                   (       af  U R                  R                  U R                  5      nU R                  R                  U R                  5      nU R                  R                  U5      nO#U R                  U R                  U R                  p#n[        R                  " [        U5      [        U5      [        U5      5      $ rO   )	r@   r=   
differencer<   r>   intersectionr   HistoryrP   )rE   addeddeleted	unchangeds       rJ   
as_historyWriteOnlyHistory.as_history|   s    %%$$//0D0DEE((55d6J6JKG,,77@I   $$"" &E
 !!$u+tIWNNrM   c                2    [        U R                  5      U   $ rO   )rP   r=   )rE   indexs     rJ   indexedWriteOnlyHistory.indexed   s    D$$%e,,rM   c                :    U R                   R                  U5        g rO   )r=   addrE   values     rJ   	add_addedWriteOnlyHistory.add_added   s    U#rM   c                    XR                   ;   a  U R                   R                  U5        g U R                  R                  U5        g rO   )r=   remover>   rf   rg   s     rJ   add_removedWriteOnlyHistory.add_removed   s6    $$$##E*""5)rM   )r@   r=   r>   r<   rO   )
rF   WriteOnlyAttributeImplrG   InstanceState[_T]rH   r   rI   zOptional[WriteOnlyHistory[_T]]returnNone)rq   zList[_T])rq   attributes.History)rb   zUnion[int, slice]rq   zUnion[List[_T], _T])rh   r7   rq   rr   )__name__
__module____qualname____firstlineno____doc____annotations__rK   propertyrS   rV   r_   rc   ri   rm   __static_attributes__ rM   rJ   r:   r:   M   s    N,,((** 48/$/ !/ 	/
 1/ 
/6 B B 
 
O-$*rM   r:   c                    ^  \ rS rSr% SrS\S'   SrS\S'   SrS\S'   SrS\S'   Sr	S\S	'   Sr
S\S
'   SrS\S'   \rS\S'   S\S'               S(U 4S jjr\R                   4       S)S jjr\  S*         S+S jj5       r\  S*         S,S jj5       r\  S*         S-S jj5       rS\R                   4         S-S jjr\R*                    S.S j5       r\R*                    S.S j5       r S/           S0S jjr S/           S0S jjr      S1S jrS\R                   SSS4                 S2S jjrS3S jr        S4S  jr\R<                  4       S5S! jjr\R@                  4       S6S" jjr!      S7S# jr"\R<                  4           S8S$ jjr#\R<                  4           S8S% jjr$\R<                  4           S8S& jjr%S'r&U =r'$ )9ro      Tr?   uses_objectsFdefault_accepts_scalar_loadersupports_population_supports_dynamic_iteration
collectiondynamicr|   r1   order_byzType[WriteOnlyHistory[Any]]collection_history_clszType[WriteOnlyCollection[Any]]query_classc                ~   > [         TU ]  " XS U40 UD6  X@l        [        U l        U(       a  [        U5      U l        g g rO   )superrK   target_mapperWriteOnlyCollectionr   tupler   )rE   class_keydispatchr   r   kw	__class__s          rJ   rK   WriteOnlyAttributeImpl.__init__   s<     	dH;;*.!(ODM rM   c                    U[         R                  -  (       d*  U R                  U[         R                  5      R                  $ U R                  X5      $ rO   )r   rB   _get_collection_historyPASSIVE_NO_INITIALIZEr=   r   )rE   rG   dict_rH   s       rJ   getWriteOnlyAttributeImpl.get   sH     +++//{88k ##D00rM   c                    g rO   r|   rE   rG   r   	user_datarH   s        rJ   get_collection%WriteOnlyAttributeImpl.get_collection         rM   c                    g rO   r|   r   s        rJ   r   r      r   rM   c                    g rO   r|   r   s        rJ   r   r      s     rM   Nc                    U[         R                  -  (       d  U R                  X5      R                  nOU R                  X5      nUR                  n[        U5      $ rO   )r   rB   r   r=   rS   DynamicCollectionAdapter)rE   rG   r   r   rH   datahistorys          rJ   r   r      sN     +++//?KKD225BG//D'--rM   c                L    [         R                  " U [         R                  5      $ rO   )r   r,   	OP_APPENDrR   s    rJ   _append_token$WriteOnlyAttributeImpl._append_token        --dJ4H4HIIrM   c                L    [         R                  " U [         R                  5      $ rO   )r   r,   	OP_REMOVErR   s    rJ   _remove_token$WriteOnlyAttributeImpl._remove_token   r   rM   c                :   Uc  U R                  X5      nUR                  U5        U R                  R                   H  nU" XU=(       d    U R                  5      nM!     U R
                  (       a,  Ub(  U R                  [        R                  " U5      US5        g g g NT)	_modified_eventri   r   appendr   trackparentsethasparentr   instance_staterE   rG   r   rh   	initiatorcollection_historyfns          rJ   fire_append_event(WriteOnlyAttributeImpl.fire_append_event   s     %!%!5!5e!C$$U+--&&BuY%D$2D2DEE '  1j77>tL !2rM   c                6   Uc  U R                  X5      nUR                  U5        U R                  (       a*  Ub'  U R                  [        R
                  " U5      US5        U R                  R                   H  nU" XU=(       d    U R                  5        M!     g )NF)	r   rm   r   r   r   r   r   rl   r   r   s          rJ   fire_remove_event(WriteOnlyAttributeImpl.fire_remove_event  s}     %!%!5!5e!C&&u- 1j77>uM--&&BuY<$*<*<= 'rM   c                   U R                   UR                  ;  a7  U R                  X[        R                  5      UR                  U R                   '   UR                  X [        5        SX R                   '   UR                  U R                      $ r   )r   committed_stater   r   PASSIVE_NO_FETCHr   r   )rE   rG   r   s      rJ   r   &WriteOnlyAttributeImpl._modified_event   st     885000.2.I.I[99/E!!$((+ 	e95 hh$$TXX..rM   c	           	        U(       a  UR                   U R                   L a  g U(       a  Uc  g Un	[        U	5      n
UR                  (       aO  U R                  (       d  [        R
                  " SU  S35      e[        R                  " U R                  XUS95      nU R                  X5      nUR                  (       d  UR                  nOWR                  UR                  5      nUR                  U
5      n[        R                  " U
5      R                  U5      nUR                  U5      nU
 H  nUU;   d  M  U R                  UUUS US9  M      U H  nU R                  UUUS US9  M     g )NzCollection "zV" does not support implicit iteration; collection replacement operations can't be usedrH   )r   )parent_tokenrP   has_identityr   r   rC   r!   IdentitySetr   r   r=   rQ   rZ   rY   r   r   )rE   rG   r   rh   r   rH   	check_oldpop_adaptiterable
new_valuesold_collectionr   	constants	additionsremovalsmembers                    rJ   setWriteOnlyAttributeImpl.set/  sl    //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 #  rM   c                    [        5       erO   NotImplementedError)rE   argskwargss      rJ   r"   WriteOnlyAttributeImpl.deletel  s    !##rM   c                    [        S5      e)Nz7Dynamic attributes don't support collection population.r   )rE   rG   r   rh   s       rJ   set_committed_value*WriteOnlyAttributeImpl.set_committed_valueo  s     "E
 	
rM   c                D    U R                  X5      nUR                  5       $ rO   )r   r_   )rE   rG   r   rH   cs        rJ   get_history"WriteOnlyAttributeImpl.get_historyv  s      ((8||~rM   c                    U R                  X5      nUR                   Vs/ s H  n[        R                  " U5      U4PM     sn$ s  snf rO   )r   rV   r   r   )rE   rG   r   rH   r   xs         rJ   get_all_pending&WriteOnlyAttributeImpl.get_all_pending  s@     ((8;<;;G;a**1-q1;GGGs   "Ac                    U R                   UR                  ;   a  UR                  U R                      nO U R                  X[        R                  5      nUR
                  (       a(  U[        R                  -  (       a  U R                  XX#S9$ U$ )N)rI   )r   r   r   r   r   r   INIT_OK)rE   rG   rH   r   s       rJ   r   .WriteOnlyAttributeImpl._get_collection_history  s     88u,,,%%dhh/A++[99A 7[-@-@#@..W /   HrM   c                2    X@La  U R                  XX45        g g rO   )r   rE   rG   r   rh   r   rH   s         rJ   r   WriteOnlyAttributeImpl.append        ""5B !rM   c                2    X@La  U R                  XX45        g g rO   )r   r   s         rJ   rl   WriteOnlyAttributeImpl.remove  r   rM   c                &    U R                  XX4US9  g )Nr   )rl   r   s         rJ   r   WriteOnlyAttributeImpl.pop  s     	E%GDrM   )r   r   r   )r   z#Union[Type[Any], AliasedClass[Any]]r   strr   z"_Dispatch[QueryableAttribute[Any]]r   z
Mapper[_T]r   r1   r   r   )rG   InstanceState[Any]r   r+   rH   r   rq   z8Union[util.OrderedIdentitySet, WriteOnlyCollection[Any]])..)
rG   r   r   r+   r   zLiteral[None]rH   z Literal[PassiveFlag.PASSIVE_OFF]rq   r/   )
rG   r   r   r+   r   r.   rH   r   rq   r/   )
rG   r   r   r+   r   z$Optional[_AdaptedCollectionProtocol]rH   r   rq   zIUnion[Literal[LoaderCallableStatus.PASSIVE_NO_RESULT], CollectionAdapter])rq   zattributes.AttributeEventTokenrO   )rG   r   r   r+   rh   r   r   Optional[AttributeEventToken]r   zOptional[WriteOnlyHistory[Any]]rq   rr   )rG   r   r   r+   rq   WriteOnlyHistory[Any])rG   r   r   r+   rh   r   r   r   rH   r   r   r   r   r?   r   r?   rq   rr   )r   r   r   r   rq   r   )rG   r   r   r+   rh   r   rq   r   )rG   r   r   r+   rH   r   rq   rs   )rG   r   r   r+   rH   r   rq   z$List[Tuple[InstanceState[Any], Any]])rG   r   rH   r   rq   r   )rG   r   r   r+   rh   r   r   r   rH   r   rq   rr   )(rt   ru   rv   rw   r   ry   r   r   r   r   r   r   r:   r   rK   r   PASSIVE_OFFr   r   r   r!   memoized_propertyr   r   r   r   r   r   r"   r   r   r   r   r   r   r   rl   r   r{   __classcell__)r   s   @rJ   ro   ro      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 ErM   ro   
write_only)lazyc                  "    \ rS rSr\rSS jrSrg)WriteOnlyLoaderi  c           
        SU l         U R                  (       a8  U R                  R                  [        R
                  [        R                  4;  a#  [        R                  " SU R                  -  5      e[        R                  " U R                  USU R                  U R                  R                  U R                  R                  U R                  R                  S9  g )NTztOn relationship %s, 'dynamic' loaders cannot be used with many-to-one/one-to-one relationships and/or uselist=False.)	useobject
impl_classr   r   r   )is_class_leveluselistparent_property	directionr   	ONETOMANY
MANYTOMANYr   rC   r   _register_attributer   mapperr   r   )rE   r  s     rJ   init_class_attribute$WriteOnlyLoader.init_class_attribute  s    "||t33==  !!F
  
 ))!#'#7#78  	&&  ..55))22,,88	
rM   )r   N)r  zMapper[Any]rq   rr   )rt   ru   rv   rw   ro   r   r  r{   r|   rM   rJ   r   r     s     (J
rM   r   c                  V    \ rS rSr% SrS\S'   SS jrSS jrSS jrSS jr	SS	 jr
S
rg)r   i  z9simplified CollectionAdapter for internal API consistencyCollection[Any]r   c                    Xl         g rO   r   )rE   r   s     rJ   rK   !DynamicCollectionAdapter.__init__  s    	rM   c                ,    [        U R                  5      $ rO   )iterr   rR   s    rJ   __iter__!DynamicCollectionAdapter.__iter__  s    DIIrM   c                    g rO   r|   rR   s    rJ   _reset_empty%DynamicCollectionAdapter._reset_empty  s    rM   c                ,    [        U R                  5      $ rO   )lenr   rR   s    rJ   __len__ DynamicCollectionAdapter.__len__  s    499~rM   c                    gr   r|   rR   s    rJ   __bool__!DynamicCollectionAdapter.__bool__  s    rM   r
  N)r   r  )rq   zIterator[Any])rq   rr   )rq   int)rq   r?   )rt   ru   rv   rw   rx   ry   rK   r  r  r  r  r{   r|   rM   rJ   r   r     s$    C
rM   r   c                  ^    \ rS rSr% Sr\(       d  SrS\S'   S\S'   SS jrSS	 jr	SS
 jr
Srg)AbstractCollectionWriteri  zkVirtual collection which includes append/remove methods that synchronize
into the attribute event system.

r|   r7   instancezTuple[FromClause, ...]	_from_objc                   UR                  5       n[        (       a	  U(       d   eX0l        Xl        [	        U5      nUR
                  U R                  R                     nUR                  b,  UR                  R                  5       UR                  4U l
        OSU l
        UR                  USS94U l        U R                  R                  (       a  U R                  R                  U l        g SU l        g )Nr|   F)alias_secondary)objr   r  rF   r   _propsr   	secondaryr  __clause_element__r  _with_parent_where_criteriar   _order_by_clauses)rE   rF   rG   r  r  props         rJ   rK   !AbstractCollectionWriter.__init__  s    99;=O8 	x(}}TYY]]+>>% #kk<<>ODNDN h> 
 99%)YY%7%7D"%'D"rM   c                    U H]  nU R                   R                  [        R                  " U R                  5      [        R
                  " U R                  5      US 5        M_     g rO   )rF   r   r   r   r  instance_dict)rE   iteratoritems      rJ   _add_all_impl&AbstractCollectionWriter._add_all_impl  sH    DII))$--8((7	 rM   c                    U R                   R                  [        R                  " U R                  5      [        R
                  " U R                  5      US 5        g rO   )rF   rl   r   r   r  r+  rE   r-  s     rJ   _remove_impl%AbstractCollectionWriter._remove_impl"  s>    		%%dmm4$$T]]3		
rM   )r  r'  r&  rF   r  N)rF   ro   rG   rp   r,  zIterable[_T]rq   rr   r-  r7   rq   rr   )rt   ru   rv   rw   rx   r   	__slots__ry   rK   r.  r2  r{   r|   rM   rJ   r  r    s,    
 	L%%(B
rM   r  c                  l    \ rS rSrSrSrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSrg)r   i+  ay  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  rF   r&  r  r'  c                    [        S5      e)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().)	TypeErrorrR   s    rJ   r  WriteOnlyCollection.__iter__D  s    M
 	
rM   c                   [        U R                  R                  5      R                  " U R                  6 nU R
                  (       a  UR                  " U R
                  6 nU R                  (       a  UR                  " U R                  6 nU$ )zProduce a :class:`_sql.Select` construct that represents the
rows within this instance-local :class:`_orm.WriteOnlyCollection`.

)	r$   rF   r   wherer&  r  select_fromr'  r   )rE   stmts     rJ   r$   WriteOnlyCollection.selectK  sf    
 dii--.44d6J6JK>>##T^^4D!!==$"8"89DrM   c                   [        U R                  5      nUR                  nUR                  U R                  R
                     nUR                  [        R                  La  [        R                  " S5      e0 nUR                   H9  u  pVUR                  UUUR                  U5      n[        SUS9XFR
                  '   M;     [        U R                  R                   5      R"                  " S0 UD6$ )a  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_r|   )r   r  r  r"  rF   r   r   r   r  r   rC   synchronize_pairs_get_attr_w_warn_on_nonedictr   r#   r   values)rE   rG   r  r(  r   lrr   s           rJ   r#   WriteOnlyCollection.insertW  s     &}}TYY]]+>>!6!@!@@))/  !#**DA..

	B %TR8E%%L + dii--.55>>>rM   c                n    [        U R                  R                  5      R                  " U R                  6 $ )z|Produce a :class:`_dml.Update` which will refer to rows in terms
of this instance-local :class:`_orm.WriteOnlyCollection`.

)r%   rF   r   r<  r&  rR   s    rJ   r%   WriteOnlyCollection.update  *    
 dii--.44d6J6JKKrM   c                n    [        U R                  R                  5      R                  " U R                  6 $ )z|Produce a :class:`_dml.Delete` which will refer to rows in terms
of this instance-local :class:`_orm.WriteOnlyCollection`.

)r"   rF   r   r<  r&  rR   s    rJ   r"   WriteOnlyCollection.delete  rK  rM   c                &    U R                  U5        g)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.  )rE   r,  s     rJ   add_allWriteOnlyCollection.add_all  s     	8$rM   c                (    U R                  U/5        g)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.

NrO  r1  s     rJ   rf   WriteOnlyCollection.add  s     	D6"rM   c                &    U R                  U5        g)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)r2  r1  s     rJ   rl   WriteOnlyCollection.remove  s     	$rM   r|   N)rq   r   )rq   zSelect[Tuple[_T]])rq   r'   )rq   r(   )rq   r&   r4  r5  )rt   ru   rv   rw   rx   r6  r  r$   r#   r%   r"   rP  rf   rl   r{   r|   rM   rJ   r   r   +  s9     I

&?PLL%# rM   r   N)Orx   
__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   rG   r2   r3   eventr4   sql.selectabler5   r6   r7   r:   HasCollectionAdapterAttributeImplro   class_loggerRelationshipPropertystrategy_forAbstractRelationshipLoader
Identifiedr   r   r  r   r|   rM   rJ   <module>ri     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 { rM   