L iWdZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z dd lm Z dd lm Z dd lm Z dd lm Z dd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!dd lm"Z"dd!l#m$Z$dd"l#m%Z%dd#l#m&Z&dd$l#m'Z'dd%l(m)Z)dd&l(m*Z*dd'l(m+Z+dd(l,m-Z-erNdd)lm.Z.dd*l/m0Z0dd+lm1Z1dd,lm2Z2dd-l3m4Z4dd.l3m5Z5dd/l6m7Z7dd0lm8Z8dd1l9m:Z:dd2l"m;Z;dd3lm?Z?dd5l>m@Z@ed6e7ZAGd8d9eeAZBGd:d;ejejZEe!jejjd<=Gd>d?eje!jZKGd@dAZLGdBdCeeAZMGdDdEeMeAZNyF)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)boundceZdZUdZded<ded<ded<ded< d dd Zedd Zedd Zdd Z dd Z ddZ ddZ y)WriteOnlyHistoryzDOverrides AttributeHistory to receive append/remove events directly.zutil.OrderedIdentitySetunchanged_items added_items deleted_itemsbool_reconcile_collectionNc|rt|tjzrtjd|d|d|j|_|j |_|j |_|j|_ytj|_tj|_tj|_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) rSQL_OKrInvalidRequestErrorr;r<r=r?r!OrderedIdentitySet)selfattrstatepassiveapply_tos ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/orm/writeonly.py__init__zWriteOnlyHistory.__init__Us +++-- '348&933$,#;#;D '33D !)!7!7D )1)G)GD &!%!8!8!:D #668D #'#:#:# >""   rKc|jrf|jj|j}|jj |j}|jj|}n$|j|j|j}}}t jt|t|t|SrM) r?r< differencer;r= intersectionrHistoryrN)rDaddeddeleted unchangeds rI as_historyzWriteOnlyHistory.as_history|s  % %$$//0D0DEE((55d6J6JKG,,77@I  $$""&9E !!$u+tIW NNrKc2t|j|SrM)rNr<)rDindexs rIindexedzWriteOnlyHistory.indexedsD$$%e,,rKc:|jj|yrM)r<addrDvalues rI add_addedzWriteOnlyHistory.add_addeds U#rKc||jvr|jj|y|jj|yrM)r<remover=r`ras rI add_removedzWriteOnlyHistory.add_removeds8 D$$ $    # #E *    " "5 )rKrM) rEWriteOnlyAttributeImplrFInstanceState[_T]rGrrHzOptional[WriteOnlyHistory[_T]]returnNone)rizList[_T])riattributes.History)r]zUnion[int, slice]rizUnion[List[_T], _T])rbr7rirj) __name__ __module__ __qualname____doc____annotations__rJpropertyrQrSr[r^rcrfrKrIr:r:MsN,,((**48 /$/!/ / 1 /  /6BB   O-$*rKr:ceZdZUdZded<dZded<dZded<dZded<dZded<dZ ded <d Z d ed <e Z d ed<ded< d&fd Z ejf d'dZe d( d)dZe d( d*dZe d( d+dZdejf d+dZej(d,dZej(d,dZ d- d.dZ d- d.dZ d/dZdejdddf d0dZd1dZ d2dZej:f d3d Zej>f d4d!Z d5d"Z!ej:f d6d#Z"ej:f d6d$Z#ej:f d6d%Z$xZ%S)7rgTr> uses_objectsFdefault_accepts_scalar_loadersupports_population_supports_dynamic_iteration collectiondynamicrrr1order_byzType[WriteOnlyHistory[Any]]collection_history_clszType[WriteOnlyCollection[Any]] query_classc vt|||d|fi|||_t|_|rt ||_yyrM)superrJ target_mapperWriteOnlyCollectionr|tuplerz)rDclass_keydispatchrrzkw __class__s rIrJzWriteOnlyAttributeImpl.__init__s@ dH;;*. !(ODM rKc|tjzs*|j|tjjS|j ||SrM)rrA_get_collection_historyPASSIVE_NO_INITIALIZEr<r|)rDrFdict_rGs rIgetzWriteOnlyAttributeImpl.getsJ +++//{88k ##D%0 0rKcyrMrrrDrFr user_datarGs rIget_collectionz%WriteOnlyAttributeImpl.get_collection rKcyrMrrrs rIrz%WriteOnlyAttributeImpl.get_collectionrrKcyrMrrrs rIrz%WriteOnlyAttributeImpl.get_collections rKNc|tjzs'|j||j}t |S|j||}|j}t |SrM)rrArr<rQDynamicCollectionAdapter)rDrFrrrGdatahistorys rIrz%WriteOnlyAttributeImpl.get_collectionsa+++//w?KKD(--225'BG//D'--rKcJtj|tjSrM)rr, OP_APPENDrPs rI _append_tokenz$WriteOnlyAttributeImpl._append_token--dJ4H4HIIrKcJtj|tjSrM)rr, OP_REMOVErPs rI _remove_tokenz$WriteOnlyAttributeImpl._remove_tokenrrKc ||j||}|j||jjD]}||||xs |j}|j r*|'|j tj||dyyyNT) _modified_eventrcrappendr trackparent sethasparentrinstance_staterDrFrrb initiatorcollection_historyfns rIfire_append_eventz(WriteOnlyAttributeImpl.fire_append_events  %!%!5!5eU!C $$U+--&& FBueY%D$2D2DEE F    1   j77>t L!2 rKc||j||}|j||jr(|&|jt j ||d|j jD]}||||xs |jy)NF) rrfrrrrrrerrs rIfire_remove_eventz(WriteOnlyAttributeImpl.fire_remove_event s  %!%!5!5eU!C &&u-    1   j77>u M--&& >B ueY<$*<*< = >rKc |j|jvr8|j||tj|j|j<|j ||t d||j<|j|jSr)rcommitted_stater{rPASSIVE_NO_FETCHrr)rDrFrs rIrz&WriteOnlyAttributeImpl._modified_eventsz 88500 0.2.I.Ie[99/E ! !$(( + eT95dhh$$TXX..rKc |r|j|jury|r|y|} t| } |jrL|jst j d|dt j|j|||} |j||} |js | j} n j| j} | j| } t j| j| }| j| }| D]}||vs|j|||d| |D]}|j|||d| y)Nz Collection "zV" does not support implicit iteration; collection replacement operations can't be usedrG)r) parent_tokenrN has_identityrwrrBr! IdentitySetrrr<rOrVrUrr)rDrFrrbrrG check_oldpop_adaptiterable new_valuesold_collectionr constants additionsremovalsmembers rIsetzWriteOnlyAttributeImpl.set+sz //43D3DD  5= (^   33--"4&)$$ "--w7N"11%?!!/;;N+11"..N#// ; $$Z0;;IF !,,Y7  F"&&'9 '  F  " "#5 #  rKctrMNotImplementedError)rDargskwargss rIr"zWriteOnlyAttributeImpl.deletehs !##rKctd)Nz7Dynamic attributes don't support collection population.r)rDrFrrbs rIset_committed_valuez*WriteOnlyAttributeImpl.set_committed_valueks" E  rKcF|j||}|jSrM)rr[)rDrFrrGcs rI get_historyz"WriteOnlyAttributeImpl.get_historyrs"  ( ( 8||~rKc|j||}|jDcgc]}tj||fc}Scc}wrM)rrSrr)rDrFrrGrxs rIget_all_pendingz&WriteOnlyAttributeImpl.get_all_pending{s>  ( ( 8;<;;Ga**1-q1GGGsAc|j|jvr|j|j}n!|j||tj}|j r(|tj zr|j||||S|S)N)rH)rrr{rrrINIT_OK)rDrFrGrs rIrz.WriteOnlyAttributeImpl._get_collection_historys 88u,, ,%%dhh/A++e[99A   7[-@-@#@..eWq/ HrKc6||ur|j||||yyrM)rrDrFrrbrrGs rIrzWriteOnlyAttributeImpl.append% D  " "5% B !rKc6||ur|j||||yyrM)rrs rIrezWriteOnlyAttributeImpl.removerrKc0|j|||||y)Nr)rers rIrzWriteOnlyAttributeImpl.pops E5%G DrK) rz#Union[Type[Any], AliasedClass[Any]]rstrrz"_Dispatch[QueryableAttribute[Any]]rz Mapper[_T]rzr1rr)rFInstanceState[Any]rr+rGrriz8Union[util.OrderedIdentitySet, WriteOnlyCollection[Any]])..) rFrrr+rz Literal[None]rGz Literal[PassiveFlag.PASSIVE_OFF]rir/) rFrrr+rr.rGrrir/) rFrrr+rz$Optional[_AdaptedCollectionProtocol]rGrrizIUnion[Literal[LoaderCallableStatus.PASSIVE_NO_RESULT], CollectionAdapter])rizattributes.AttributeEventTokenrM) rFrrr+rbrrOptional[AttributeEventToken]rzOptional[WriteOnlyHistory[Any]]rirj)rFrrr+riWriteOnlyHistory[Any])rFrrr+rbrrrrGrrrrr>rr>rirj)rrrrrir )rFrrr+rbrrir )rFrrr+rGrrirk)rFrrr+rGrriz$List[Tuple[InstanceState[Any], Any]])rFrrGrrir) rFrrr+rbrrrrGrrirj)&rlrmrnrtrprurvrwrxryrzr:r{rJr PASSIVE_OFFrr rr!memoized_propertyrrrrrrr"rrrrrrrrer __classcell__)rs@rIrgrgsL$*/!4/ %%(--JGT(*H%*:J7J// ,3 , ,5 , " , * , ,& +66 1! 1 1 1 B 1 $'47  !  !  2      14"  !  .        ;>"  !  8        ;?*66 .!..8 .  .   ." JJ JJ?C M!MM M 1 M < M M2?C >!>> > 1 > < > >& /' /0= /  /(48*66;!;; ; 1 ;  ;;;; ;z$ ' 0= FI   +;; !    +@@ H!HH H . H'2= 0 +;; C! C C C 1 C  C  C" +;; C! C C C 1 C  C  C" +;; E!EE E 1 E  E ErKrg write_only)lazyceZdZeZddZy)WriteOnlyLoaderc d|_|jr6|jjtj tj fvr"tjd|jztj|j|d|j|jj|jj|jjy)NTztOn relationship %s, 'dynamic' loaders cannot be used with many-to-one/one-to-one relationships and/or uselist=False.) useobject impl_classrrzr|)is_class_leveluselistparent_property directionr ONETOMANY MANYTOMANYrrBr_register_attributermapperrzr|)rDrs rIinit_class_attributez$WriteOnlyLoader.init_class_attributes"||t33==   ! !F  ))!#'#7#78  &&  ..55))22,,88 rKN)rz Mapper[Any]rirj)rlrmrnrgrrrrrKrIrrs(J rKrcDeZdZUdZded<d dZd dZd dZd dZddZ y )rz9simplified CollectionAdapter for internal API consistencyCollection[Any]rc||_yrM)r)rDrs rIrJz!DynamicCollectionAdapter.__init__s  rKc,t|jSrM)iterrrPs rI__iter__z!DynamicCollectionAdapter.__iter__sDIIrKcyrMrrrPs rI _reset_emptyz%DynamicCollectionAdapter._reset_emptys rKc,t|jSrM)lenrrPs rI__len__z DynamicCollectionAdapter.__len__s499~rKcyrrrrPs rI__bool__z!DynamicCollectionAdapter.__bool__srKN)rr)riz Iterator[Any])rirj)riint)rir>) rlrmrnrorprJrrrrrrrKrIrrs$C  rKrcFeZdZUdZesdZded<ded<d dZd dZd d Z y )AbstractCollectionWriterzsVirtual collection which includes append/remove methods that synchronize into the attribute event system. rrr7instancezTuple[FromClause, ...] _from_objc|j}tr|sJ||_||_t |}|j |jj }|j,|jj|jf|_ nd|_ |j|df|_ |jjr|jj|_yd|_y)NrrF)alias_secondary)objrrrEr_propsr secondaryr__clause_element__r _with_parent_where_criteriarz_order_by_clauses)rDrErFrrprops rIrJz!AbstractCollectionWriter.__init__s99; O8   x(}}TYY]]+ >> %#kk<<>ODNDN   h  >  99  %)YY%7%7D "%'D "rKc|D]Z}|jjtj|jtj |j|d\yrM)rErrrr instance_dict)rDiteratoritems rI _add_all_implz&AbstractCollectionWriter._add_all_implsM D II  ))$--8((7   rKc|jjtj|jtj |j|dyrM)rErerrrrrDr s rI _remove_implz%AbstractCollectionWriter._remove_impls>   % %dmm 4  $ $T]] 3    rKN)rErgrFrhrz Iterable[_T]rirjr r7rirj) rlrmrnror __slots__rprJr r rrrKrIrrs,  L%%(B rKrcTeZdZdZdZd dZd dZddZddZddZ ddZ dd Z dd Z y )raWrite-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` )rrErrrctd)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().) TypeErrorrPs rIrzWriteOnlyCollection.__iter__@s M  rKct|jjj|j}|j r|j |j }|jr|j|j}|S)zProduce a :class:`_sql.Select` construct that represents the rows within this instance-local :class:`_orm.WriteOnlyCollection`. ) r$rErwhererr select_fromrrz)rDstmts rIr$zWriteOnlyCollection.selectGsl 5vdii--.44d6J6JK >>#4##T^^4D  ! ! 4==$"8"89D rKct|j}|j}|j|jj }|j tjurtjdi}|jD]=\}}|j|||j|}td|||j <?t|jj j"di|S)aNFor 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)rrrrrErrrrrrBsynchronize_pairs_get_attr_w_warn_on_nonedictrr#rvalues)rDrFrrrlrrs rIr#zWriteOnlyCollection.insertSs &}}TYY]]+ >>!6!@!@ @))/  !#** 9DAq..  B%TR8E!%%L 96vdii--.55>>>rKcnt|jjj|jS)zProduce a :class:`_dml.Update` which will refer to rows in terms of this instance-local :class:`_orm.WriteOnlyCollection`. )r%rErrrrPs rIr%zWriteOnlyCollection.update{, 5vdii--.44d6J6JKKrKcnt|jjj|jS)zProduce a :class:`_dml.Delete` which will refer to rows in terms of this instance-local :class:`_orm.WriteOnlyCollection`. )r"rErrrrPs rIr"zWriteOnlyCollection.deleter!rKc&|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. Nr )rDrs rIadd_allzWriteOnlyCollection.add_alls 8$rKc(|j|gy)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 rIr`zWriteOnlyCollection.adds D6"rKc&|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 rIrezWriteOnlyCollection.removes $rKN)rir )rizSelect[Tuple[_T]])rir')rir()rir&rr) rlrmrnrorrr$r#r%r"r%r`rerrrKrIrr's9 I  &?PLL%# rKrN)Oro __future__rtypingrrrrrr r r r r rrrrrsqlalchemy.sqlrrrrrbaserrrrrrr r!sqlr"r#r$r%sql.dmlr&r'r( util.typingr)r*_typingr+r,r- collectionsr.r/rr0r1rFr2r3eventr4sql.selectabler5r6r7r:HasCollectionAdapter AttributeImplrg class_loggerRelationshipProperty strategy_forAbstractRelationshipLoader IdentifiedrrrrrrrKrIr;s] # $'!$&/*7.6$"!+' TF*wr{F*R^E##Z%=%=^EB ##00l0C j;;S^^ D 4*< wr{< ~{ 226{ rK