§
    WøÁiX&  ã                  ó°  — 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! er0d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d#e¬$¦  «        Z. G d%„ d&ee.         ¦  «        Z/ G d'„ d(e¦  «        Z0ej1         2                    d)¬*¦  «         G d+„ d,e¦  «        ¦   «         Z3 G d-„ d.ee.         ¦  «        Z4 G d/„ d0e4e.         ee.         ¦  «        Z5d7d5„Z6d6S )8zâ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)Ú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                  ó   — e Zd Z	 ddd„ZdS )ÚDynamicCollectionHistoryNÚattrÚDynamicAttributeImplÚstateúInstanceState[_T]Úpassiver   Úapply_toú&Optional[DynamicCollectionHistory[_T]]ÚreturnÚNonec                ób  — |r]t          ||¦  «                             d¦  «        }t          j        |¦  «        | _        |j        | _        |j        | _        d| _        d S t          j        ¦   «         | _        t          j        ¦   «         | _        t          j        ¦   «         | _        d| _        d S )NFT)ÚAppenderQueryÚ	autoflushr   ÚOrderedIdentitySetÚunchanged_itemsÚadded_itemsÚdeleted_itemsÚ_reconcile_collection)Úselfr(   r*   r,   r-   Úcolls         ú`/var/www/html/jarvis.com/web/backend/venv/lib/python3.11/site-packages/sqlalchemy/orm/dynamic.pyÚ__init__z!DynamicCollectionHistory.__init__>   s¡   € ð ð 
	/Ý   uÑ-Ô-×7Ò7¸Ñ>Ô>ˆDÝ#'Ô#:¸4Ñ#@Ô#@ˆDÔ Ø'Ô3ˆDÔØ!)Ô!7ˆDÔØ)-ˆDÔ&Ð&Ð&å!%Ô!8Ñ!:Ô!:ˆDÔÝ#Ô6Ñ8Ô8ˆDÔÝ#'Ô#:Ñ#<Ô#<ˆDÔ Ø).ˆDÔ&Ð&Ð&ó    ©N)
r(   r)   r*   r+   r,   r   r-   r.   r/   r0   )Ú__name__Ú
__module__Ú__qualname__r<   © r=   r;   r'   r'   =   s3   € € € € € ð <@ð/ð /ð /ð /ð /ð /ð /r=   r'   c                  ó:   — e Zd ZU dZee         Zded<   	 ddd„ZdS )r)   TzType[AppenderMixin[Any]]Úquery_classNÚclass_ú#Union[Type[Any], AliasedClass[Any]]ÚkeyÚstrÚdispatchú"_Dispatch[QueryableAttribute[Any]]Útarget_mapperú
Mapper[_T]Úorder_byr   ú!Optional[Type[AppenderMixin[_T]]]Úkwr   r/   r0   c                ó  — t          j        j        | ||d |fi |¤Ž || _        |rt	          |¦  «        | _        |st          | _        d S t          | 	                    ¦   «         v r	|| _        d S t          |¦  «        | _        d S r>   )r   ÚAttributeImplr<   rK   ÚtuplerM   r2   rD   ÚAppenderMixinÚmroÚmixin_user_query)r9   rE   rG   rI   rK   rM   rD   rO   s           r;   r<   zDynamicAttributeImpl.__init__W   s¢   € õ 	Ô Ô)Ø�&˜#˜t Xð	
ð 	
Ø13ð	
ð 	
ð 	
ð +ˆÔØð 	,Ý! (™OœOˆDŒMØð 	=Ý,ˆDÔÐÐÝ˜kŸošoÑ/Ô/Ð/Ð/Ø*ˆDÔÐÐå/°Ñ<Ô<ˆDÔÐÐr=   r>   )rE   rF   rG   rH   rI   rJ   rK   rL   rM   r   rD   rN   rO   r   r/   r0   )	r?   r@   rA   Ú_supports_dynamic_iterationr'   r   Úcollection_history_clsÚ__annotations__r<   rB   r=   r;   r)   r)   R   sQ   € € € € € € Ø"&ÐØ5°cÔ:ÐØ)Ð)Ð)Ñ)ð :>ð=ð =ð =ð =ð =ð =ð =r=   r)   Údynamic)Úlazyc                  ó   — e Zd ZeZdS )Ú
DynaLoaderN)r?   r@   rA   r)   Ú
impl_classrB   r=   r;   r\   r\   o   s   € € € € € à%€J€J€Jr=   r\   c                  óÐ   ‡ — e Zd ZU dZdZded<   ded<   d)ˆ fd„Zed*d„¦   «         Zej	        d+d„¦   «         Zd,d„Z
erd-d„Zd.d„Zd/d„Z	 d0d1d„Zd2d"„Zd3d%„Zd2d&„Zd3d'„Zd3d(„Zˆ xZS )4rS   zTA mixin that expects to be mixing in a Query class with
    AbstractAppender.


    NzOptional[Type[Query[_T]]]rD   zTuple[ColumnElement[Any], ...]Ú_order_by_clausesr(   r)   r*   r+   r/   r0   c                ó‚   •— t          j        | |j        d ¦  «         t          ¦   «                              ||¦  «         d S r>   )r   r<   rK   Úsuper)r9   r(   r*   Ú	__class__s      €r;   r<   zAppenderMixin.__init__~   sG   ø€ õ 	ŒØØÔØñ	
ô 	
ð 	
õ
 	‰Œ×Ò˜˜uÑ%Ô%Ð%Ð%Ð%r=   úOptional[Session]c                ó°   — t          | j        ¦  «        }|�$|j        r| j        |v r|                     ¦   «          t	          j        | j        ¦  «        sd S |S r>   )r   Úinstancer3   ÚflushÚorm_utilÚhas_identity©r9   Úsesss     r;   ÚsessionzAppenderMixin.sessionˆ   sV   € å˜dœmÑ,Ô,ˆØÐ ¤Ð°4´=ÀDÐ3HÐ3HØ�JŠJ‰LŒLˆLÝÔ$ T¤]Ñ3Ô3ð 	Ø�4àˆKr=   rk   r   c                ó   — || _         d S r>   )rj   )r9   rk   s     r;   rk   zAppenderMixin.session’   s   € àˆŒ	ˆ	ˆ	r=   ú1Union[result.ScalarResult[_T], result.Result[_T]]c           
     ó"  — | j         }|€àt          j        | j        ¦  «        }|j        r)t          j        dt          j        |¦  «        z  ¦  «         t          j
        t          j        | j        j        j        g¦  «        t          | j                             t          j        | j        ¦  «        t"          j        ¦  «        j        ¦  «        d¬¦  «                             ¦   «         S |                      |¦  «                             ¦   «         S )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)rk   r   Úinstance_statere   Údetachedr   Úwarnrg   Ú	state_strr   ÚIteratorResultÚSimpleResultMetaDatar(   rE   r?   ÚiterÚ_get_collection_historyr   ÚPASSIVE_NO_INITIALIZEr6   ÚscalarsÚ	_generateÚ_iter)r9   rj   r*   s      r;   r{   zAppenderMixin._iter–   sû   € ØŒ|ˆØˆ<ÝÔ-¨d¬mÑ<Ô<ˆEØŒ~ð Ý”	ðCõ  Ô)¨%Ñ0Ô0ñ2ñô ð õ Ô(ÝÔ+¨T¬YÔ-=Ô-FÐ,GÑHÔHÝØ”I×5Ò5Ý"Ô1°$´-Ñ@Ô@Ý#Ô9ñô ô "ñ	ô ð *.ð	ñ 	ô 	÷ Šg‰iŒið	ð —>’> $Ñ'Ô'×-Ò-Ñ/Ô/Ð/r=   úIterator[_T]c                ó   — d S r>   rB   )r9   s    r;   Ú__iter__zAppenderMixin.__iter__±   s   € € € r=   Úindexr   úUnion[_T, List[_T]]c                ó  — | j         }|€O| j                             t          j        | j        ¦  «        t          j        ¦  «                             |¦  «        S |  	                    |¦  «         
                    |¦  «        S r>   )rk   r(   rw   r   rp   re   r   rx   Úindexedrz   Ú__getitem__)r9   r   rj   s      r;   rƒ   zAppenderMixin.__getitem__³   sm   € ØŒ|ˆØˆ<Ø”9×4Ò4ÝÔ)¨$¬-Ñ8Ô8ÝÔ1ñô ÷ Šg�e‰nŒnðð
 —>’> $Ñ'Ô'×3Ò3°EÑ:Ô:Ð:r=   Úintc                óþ   — | j         }|€Nt          | j                             t	          j        | j        ¦  «        t          j        ¦  «        j	        ¦  «        S |  
                    |¦  «                             ¦   «         S r>   )rk   Úlenr(   rw   r   rp   re   r   rx   r6   rz   Úcountri   s     r;   r‡   zAppenderMixin.count½   sp   € ØŒ|ˆØˆ<ÝØ”	×1Ò1ÝÔ-¨d¬mÑ<Ô<ÝÔ5ñô ô ñ	ô ð ð —>’> $Ñ'Ô'×-Ò-Ñ/Ô/Ð/r=   rj   ú	Query[_T]c                ó€  — | j         }|€Ht          |¦  «        }|€7t          j        dt	          j        |¦  «        ›d| j        j        ›d�¦  «        ‚| j        r"|                      | j        j	        |¬¦  «        }n| 
                    | j        j	        ¦  «        }| j        |_        | j        |_        | j        |_        |S )NzParent instance zh is not bound to a Session, and no contextual session is established; lazy load operation of attribute 'z' cannot proceed)rk   )re   r   Úorm_excÚDetachedInstanceErrorrg   Úinstance_strr(   rG   rD   rK   ÚqueryÚ_where_criteriaÚ	_from_objr_   )r9   rj   re   r�   s       r;   rz   zAppenderMixin._generateÉ   sÆ   € ð ”=ˆØˆ<Ý! (Ñ+Ô+ˆDØˆ|ÝÔ3Ð3õ  Ô,¨XÑ6Ô6Ð6Ð6¸¼	¼¸¸ðGñô ð ð Ôð 	8Ø×$Ò$ T¤YÔ%<ÀdÐ$ÑKÔKˆEˆEà—J’J˜tœyÔ6Ñ7Ô7ˆEà $Ô 4ˆÔØœ.ˆŒØ"&Ô"8ˆÔàˆr=   ÚiteratorúIterable[_T]c                ó0   — |                       |¦  «         dS )a~  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©r9   r�   s     r;   Úadd_allzAppenderMixin.add_allæ   s   € ð 	×Ò˜8Ñ$Ô$Ð$Ð$Ð$r=   Úitemr$   c                ó2   — |                       |g¦  «         dS )ap  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“   ©r9   r—   s     r;   ÚaddzAppenderMixin.addô   s    € ð 	×Ò˜D˜6Ñ"Ô"Ð"Ð"Ð"r=   c                ó0   — |                       |¦  «         dS )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     r;   ÚextendzAppenderMixin.extend  s   € ð 	×Ò˜8Ñ$Ô$Ð$Ð$Ð$r=   c                ó2   — |                       |g¦  «         dS )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     r;   ÚappendzAppenderMixin.append  s    € ð 	×Ò˜D˜6Ñ"Ô"Ð"Ð"Ð"r=   c                ó0   — |                       |¦  «         dS )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     r;   ÚremovezAppenderMixin.remove  s   € ð 	×Ò˜$ÑÔÐÐÐr=   )r(   r)   r*   r+   r/   r0   )r/   rc   )rk   r   r/   r0   )r/   rm   )r/   r|   )r   r   r/   r€   )r/   r„   r>   )rj   rc   r/   rˆ   )r�   r‘   r/   r0   )r—   r$   r/   r0   )r?   r@   rA   Ú__doc__rD   rX   r<   Úpropertyrk   Úsetterr{   r   r~   rƒ   r‡   rz   r–   rš   rœ   rž   r¡   Ú__classcell__)rb   s   @r;   rS   rS   t   s~  ø€ € € € € € ðð ð .2€KÐ1Ð1Ð1Ñ1Ø5Ð5Ð5Ñ5ð&ð &ð &ð &ð &ð &ð ðð ð ñ „Xðð „^ðð ð ñ „^ðð0ð 0ð 0ð 0ð2 ð 0à/Ð/Ð/Ð/ð;ð ;ð ;ð ;ð
0ð 
0ð 
0ð 
0ð #'ðð ð ð ð ð:%ð %ð %ð %ð#ð #ð #ð #ð%ð %ð %ð %ð#ð #ð #ð #ð ð  ð  ð  ð  ð  ð  ð  r=   rS   c                  ó   — e Zd ZdZdS )r2   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.


    N)r?   r@   rA   r¢   rB   r=   r;   r2   r2     s   € € € € € ðð ð ð r=   r2   Úclsr   r/   útype[AppenderMixin[Any]]c                óJ   — d| j         z   }t          |t          | fd| i¦  «        S )zAReturn a new class with AppenderQuery functionality layered over.ÚAppenderrD   )r?   ÚtyperS   )r§   Únames     r;   rU   rU   )  s*   € à˜œÑ$€DÝ�•} cÐ*¨]¸CÐ,@ÑAÔAÐAr=   N)r§   r   r/   r¨   )7r¢   Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   r   r   Ú r   r   rŠ   r   r   rg   Úbaser   r�   r   rk   r   Ú	writeonlyr   r   r   r   Úenginer   r   Úmapperr   r   r   r*   r    r!   Úeventr"   Úsql.elementsr#   r$   r'   r)   ÚRelationshipPropertyÚstrategy_forr\   rS   r2   rU   rB   r=   r;   ú<module>r¸      s¨  ðð	ð 	ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø /Ð /Ð /Ð /Ð /Ð /Ø -Ð -Ð -Ð -Ð -Ð -Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð ð -Ø$Ð$Ð$Ð$Ð$Ð$ØÐÐÐÐÐØ6Ð6Ð6Ð6Ð6Ð6Ø Ð Ð Ð Ð Ð Ø$Ð$Ð$Ð$Ð$Ð$Ø"Ð"Ð"Ð"Ð"Ð"Ø!Ð!Ð!Ð!Ð!Ð!Ø,Ð,Ð,Ð,Ð,Ð,à€WˆT˜ÐÑÔ€ð/ð /ð /ð /ð /Ð/°Ô3ñ /ô /ð /ð*=ð =ð =ð =ð =Ð1ñ =ô =ð =ð: Ô#×0Ò0°iÐ0Ñ@Ô@ð&ð &ð &ð &ð &�ñ &ô &ñ AÔ@ð&ðg ð g ð g ð g ð g Ð,¨RÔ0ñ g ô g ð g ðTð ð ð ð �M "Ô% u¨R¤yñ ô ð ðBð Bð Bð Bð Bð Br=   