ó
    Ñ]jÞ&  ã                  óz  • 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"  \(       a0  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%9r/ " S& S'\\/   5      r0 " S( S)\5      r1\Rd                  Rg                  S*S+9 " S, S-\ 5      5       r4 " S. S/\\/   5      r5 " S0 S1\5\/   \\/   5      r6S4S2 jr7g3)5zâDynamic collection API.

Dynamic collections act like Query() objects for read operations and support
basic add/delete mutation.

.. legacy:: the "dynamic" loader is a legacy feature, superseded by the
 "write_only" loader.


é    )Úannotations)ÚAny)ÚIterable)ÚIterator)ÚList)ÚOptional)Úoverload)ÚTuple)ÚType)ÚTYPE_CHECKING)ÚTypeVar)ÚUnioné   )Ú
attributes)Úexc)Úrelationships)Úutil)ÚPassiveFlag)ÚQuery)Úobject_session)ÚAbstractCollectionWriter)ÚWriteOnlyAttributeImpl)ÚWriteOnlyHistory)ÚWriteOnlyLoaderé   )Úresult)ÚQueryableAttribute)ÚMapper)Ú_RelationshipOrderByArg)ÚSession)ÚInstanceState)ÚAliasedClass)Ú	_Dispatch)ÚColumnElementÚ_T)Úboundc                  ó6   • \ rS rSr S         SS jjrSrg)ÚDynamicCollectionHistoryé>   Nc                óz  • U(       a_  [        X5      R                  S5      n[        R                  " U5      U l        UR
                  U l        UR                  U l        SU l        g [        R                  " 5       U l        [        R                  " 5       U l        [        R                  " 5       U l        SU l        g )NFT)ÚAppenderQueryÚ	autoflushr   ÚOrderedIdentitySetÚunchanged_itemsÚadded_itemsÚdeleted_itemsÚ_reconcile_collection)ÚselfÚattrÚstateÚpassiveÚapply_toÚcolls         ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sqlalchemy/orm/dynamic.pyÚ__init__Ú!DynamicCollectionHistory.__init__?   sŽ   € ö Ü  Ó-×7Ñ7¸Ó>ˆDÜ#'×#:Ò#:¸4Ó#@ˆDÔ Ø'×3Ñ3ˆDÔØ!)×!7Ñ!7ˆDÔØ)-ˆDÕ&ä!%×!8Ò!8Ó!:ˆDÔÜ#×6Ò6Ó8ˆDÔÜ#'×#:Ò#:Ó#<ˆDÔ Ø).ˆDÕ&ó    )r1   r/   r0   r.   ©N)
r3   ÚDynamicAttributeImplr4   úInstanceState[_T]r5   r   r6   z&Optional[DynamicCollectionHistory[_T]]ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r9   Ú__static_attributes__© r;   r8   r(   r(   >   sB   † ð <@ð/à"ð/ð !ð/ð ð	/ð
 9ð/ð 
÷/ð /r;   r(   c                  ó\   • \ rS rSr% Sr\\   rS\S'    S               S	S jjr	Sr
g)
r=   éS   TzType[AppenderMixin[Any]]Úquery_classNc                ó
  • [         R                  R                  " XUS U40 UD6  X@l        U(       a  [	        U5      U l        U(       d  [        U l        g [        UR                  5       ;   a  X`l        g [        U5      U l        g r<   )r   ÚAttributeImplr9   Útarget_mapperÚtupleÚorder_byr+   rI   ÚAppenderMixinÚmroÚmixin_user_query)r2   Úclass_ÚkeyÚdispatchrL   rN   rI   Úkws           r8   r9   ÚDynamicAttributeImpl.__init__X   sl   € ô 	× Ñ ×)Ò)Ø˜#˜t Xñ	
Ø13ò	
ð +ÔÞÜ! (›OˆDŒMÞÜ,ˆDÕÜ˜kŸo™oÓ/Ó/Ø*Õä/°Ó<ˆDÕr;   )rN   rI   rL   r<   )rR   z#Union[Type[Any], AliasedClass[Any]]rS   ÚstrrT   z"_Dispatch[QueryableAttribute[Any]]rL   z
Mapper[_T]rN   r   rI   z!Optional[Type[AppenderMixin[_T]]]rU   r   r?   r@   )rA   rB   rC   rD   Ú_supports_dynamic_iterationr(   r   Úcollection_history_clsÚ__annotations__r9   rE   rF   r;   r8   r=   r=   S   sv   ‡ Ø"&ÐØ5°cÑ:ÐØ)Ó)ð :>ð=à3ð=ð ð=ð 5ð	=ð
 "ð=ð *ð=ð 7ð=ð ð=ð 
÷=ð =r;   r=   Údynamic)Úlazyc                  ó   • \ rS rSr\rSrg)Ú
DynaLoaderép   rF   N)rA   rB   rC   rD   r=   Ú
impl_classrE   rF   r;   r8   r^   r^   p   s   † à%ƒJr;   r^   c                  ó8  ^ • \ rS rSr% SrSrS\S'   S\S'         SU 4S jjr\SS	 j5       r	\	R                  SS
 j5       r	SS jr\(       a  SS jr\SS j5       r\SS j5       rSS jrS S jr S!   S"S jjrS#S jrS$S jrS#S jrS$S jrS$S jrSrU =r$ )%rO   éu   zLA mixin that expects to be mixing in a Query class with
AbstractAppender.


NzOptional[Type[Query[_T]]]rI   zTuple[ColumnElement[Any], ...]Ú_order_by_clausesc                óh   >• [         R                  " U UR                  S 5        [        TU ]  X5        g r<   )r   r9   rL   Úsuper)r2   r3   r4   Ú	__class__s      €r8   r9   ÚAppenderMixin.__init__   s/   ø€ ô 	�ŠØØ×ÑØô	
ô
 	‰Ñ˜Õ%r;   c                óä   • [        U R                  5      nUb1  UR                  (       a   U R                  U;   a  UR                  5         [        R
                  " U R                  5      (       d  g U$ r<   )r   Úinstancer,   ÚflushÚorm_utilÚhas_identity©r2   Úsesss     r8   ÚsessionÚAppenderMixin.session‰   sM   € ä˜dŸm™mÓ,ˆØÑ §§°4·=±=ÀDÓ3HØ�J‰JŒLÜ×$Ò$ T§]¡]×3Ñ3ØàˆKr;   c                ó   • Xl         g r<   ©rn   )r2   ro   s     r8   ro   rp   “   s   € à�	r;   c           
     ó|  • U R                   nUGc  [        R                  " U R                  5      nUR                  (       a-  [
        R                  " S[        R                  " U5      -  5        [        R                  " [        R                  " U R                  R                  R                  /5      [        U R                  R!                  [        R                  " U R                  5      ["        R$                  5      R&                  5      SS9R)                  5       $ U R+                  U5      R-                  5       $ )Nz•Instance %s is detached, dynamic relationship cannot return a correct result.   This warning will become a DetachedInstanceError in a future release.T)Ú_source_supports_scalars)ro   r   Úinstance_stateri   Údetachedr   Úwarnrk   Ú	state_strr   ÚIteratorResultÚSimpleResultMetaDatar3   rR   rA   ÚiterÚ_get_collection_historyr   ÚPASSIVE_NO_INITIALIZEr/   ÚscalarsÚ	_generateÚ_iter)r2   rn   r4   s      r8   r€   ÚAppenderMixin._iter—   sì   € Ø�|‰|ˆØŠ<Ü×-Ò-¨d¯m©mÓ<ˆEØ�~�~Ü—	’	ðCô  ×)Ò)¨%Ó0ñ2ôô ×(Ò(Ü×+Ò+¨T¯Y©Y×-=Ñ-=×-FÑ-FÐ,GÓHÜØ—I‘I×5Ñ5Ü"×1Ò1°$·-±-Ó@Ü#×9Ñ9ó÷ "‘kó	ð *.ñ	÷ ‰g‹ið	ð —>‘> $Ó'×-Ñ-Ó/Ð/r;   c                ó   • g r<   rF   )r2   s    r8   Ú__iter__ÚAppenderMixin.__iter__²   s   € ¨Cr;   c                ó   • g r<   rF   ©r2   Úindexs     r8   Ú__getitem__ÚAppenderMixin.__getitem__´   s   € Ø-0r;   c                ó   • g r<   rF   r†   s     r8   rˆ   r‰   ·   s   € Ø58r;   c                ó  • U R                   nUcW  U R                  R                  [        R                  " U R
                  5      [        R                  5      R                  U5      $ U R                  U5      R                  U5      $ r<   )ro   r3   r|   r   ru   ri   r   r}   Úindexedr   rˆ   )r2   r‡   rn   s      r8   rˆ   r‰   º   si   € Ø�|‰|ˆØ‰<Ø—9‘9×4Ñ4Ü×)Ò)¨$¯-©-Ó8Ü×1Ñ1ó÷ ‰g�e‹nðð
 —>‘> $Ó'×3Ñ3°EÓ:Ð:r;   c                ó  • U R                   nUc[  [        U R                  R                  [        R
                  " U R                  5      [        R                  5      R                  5      $ U R                  U5      R                  5       $ r<   )ro   Úlenr3   r|   r   ru   ri   r   r}   r/   r   Úcountrm   s     r8   r�   ÚAppenderMixin.countÄ   sk   € Ø�|‰|ˆØ‰<ÜØ—	‘	×1Ñ1Ü×-Ò-¨d¯m©mÓ<Ü×5Ñ5ó÷ ‘+ó	ð ð —>‘> $Ó'×-Ñ-Ó/Ð/r;   c                óê  • U R                   nUcU  [        U5      nUcG  [        R                  " S[        R
                  " U5      < SU R                  R                  < S35      eU R                  (       a%  U R                  U R                  R                  US9nO%UR                  U R                  R                  5      nU R                  Ul        U R                  Ul        U R                  Ul        U$ )NzParent instance zh is not bound to a Session, and no contextual session is established; lazy load operation of attribute 'z' cannot proceed)ro   )ri   r   Úorm_excÚDetachedInstanceErrorrk   Úinstance_strr3   rS   rI   rL   ÚqueryÚ_where_criteriaÚ	_from_objrc   )r2   rn   ri   r•   s       r8   r   ÚAppenderMixin._generateÐ   sÂ   € ð —=‘=ˆØ‰<Ü! (Ó+ˆDØ‰|Ü×3Ó3ô  ×,Ò,¨XÖ6¸¿	¹	¿¼ðGóð ð ××Ø×$Ñ$ T§Y¡Y×%<Ñ%<ÀdÐ$ÐK‰Eà—J‘J˜tŸy™y×6Ñ6Ó7ˆEà $× 4Ñ 4ˆÔØŸ.™.ˆŒØ"&×"8Ñ"8ˆÔàˆr;   c                ó&   • U R                  U5        g)aN  Add an iterable of items to this :class:`_orm.AppenderQuery`.

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

This method is provided to assist in delivering forwards-compatibility
with the :class:`_orm.WriteOnlyCollection` collection class.

.. versionadded:: 2.0

N©Ú_add_all_impl©r2   Úiterators     r8   Úadd_allÚAppenderMixin.add_allí   s   € ð 	×Ñ˜8Õ$r;   c                ó(   • U R                  U/5        g)a@  Add an item to this :class:`_orm.AppenderQuery`.

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

This method is provided to assist in delivering forwards-compatibility
with the :class:`_orm.WriteOnlyCollection` collection class.

.. versionadded:: 2.0

Nrš   ©r2   Úitems     r8   ÚaddÚAppenderMixin.addû   s   € ð 	×Ñ˜D˜6Õ"r;   c                ó&   • U R                  U5        g)z²Add an iterable of items to this :class:`_orm.AppenderQuery`.

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

Nrš   rœ   s     r8   ÚextendÚAppenderMixin.extend	  s   € ð 	×Ñ˜8Õ$r;   c                ó(   • U R                  U/5        g)z§Append an item to this :class:`_orm.AppenderQuery`.

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

Nrš   r¡   s     r8   ÚappendÚAppenderMixin.append  s   € ð 	×Ñ˜D˜6Õ"r;   c                ó&   • U R                  U5        g)z�Remove an item from this :class:`_orm.AppenderQuery`.

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

N)Ú_remove_implr¡   s     r8   ÚremoveÚAppenderMixin.remove  s   € ð 	×Ñ˜$Õr;   rr   )r3   r=   r4   r>   r?   r@   )r?   úOptional[Session])ro   r    r?   r@   )r?   z1Union[result.ScalarResult[_T], result.Result[_T]])r?   zIterator[_T])r‡   Úintr?   r%   )r‡   Úslicer?   zList[_T])r‡   zUnion[int, slice]r?   zUnion[_T, List[_T]])r?   r°   r<   )rn   r¯   r?   z	Query[_T])r�   zIterable[_T]r?   r@   )r¢   r%   r?   r@   )rA   rB   rC   rD   Ú__doc__rI   rZ   r9   Úpropertyro   Úsetterr€   r   rƒ   r	   rˆ   r�   r   rž   r£   r¦   r©   r­   rE   Ú__classcell__)rf   s   @r8   rO   rO   u   sÑ   ø‡ ñð .2€KÐ*Ó1Ø5Ó5ð&Ø(ð&Ø1Bð&à	÷&ð óó ðð ‡^�^óó ðô0ö2 ä/àÛ0ó Ø0àÛ8ó Ø8ô;ô
0ð #'ðàðð 
õô:%ô#ô%ô#÷ ò  r;   rO   c                  ó   • \ rS rSrSrSrg)r+   i%  zÎA dynamic query that supports basic collection storage operations.

Methods on :class:`.AppenderQuery` include all methods of
:class:`_orm.Query`, plus additional methods used for collection
persistence.


rF   N)rA   rB   rC   rD   r²   rE   rF   r;   r8   r+   r+   %  s   † ôr;   r+   c                óJ   • SU R                   -   n[        U[        U 4SU 05      $ )zAReturn a new class with AppenderQuery functionality layered over.ÚAppenderrI   )rA   ÚtyperO   )ÚclsÚnames     r8   rQ   rQ   0  s)   € à˜Ÿ™Ñ$€DÜ�”} cÐ*¨]¸CÐ,@ÓAÐAr;   N)rº   r   r?   ztype[AppenderMixin[Any]])8r²   Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   r   r   r   Ú r   r   r’   r   r   rk   Úbaser   r•   r   ro   r   Ú	writeonlyr   r   r   r   Úenginer   r   Úmapperr   r   r    r4   r!   r"   Úeventr#   Úsql.elementsr$   r%   r(   r=   ÚRelationshipPropertyÚstrategy_forr^   rO   r+   rQ   rF   r;   r8   Ú<module>rÇ      s  ðñ	õ #å Ý Ý Ý Ý Ý Ý Ý Ý  Ý Ý å Ý Ý Ý Ý Ý Ý #Ý /Ý -Ý 'Ý &Ý Ý ö Ý$ÝÝ6Ý Ý$Ý"Ý!Ý,áˆT˜Ñ€ô/Ð/°Ñ3ô /ô*=Ð1ô =ð: ×#Ñ#×0Ñ0°iÐ0Ð@ô&�ó &ó Að&ôm Ð,¨RÑ0ô m ô`�M "Ñ% u¨R¡yô õBr;   