§
    eŠtjÝ&  ã                  ó¼  — 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" 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/         ¦  «        Z0 G d(„ d)e¦  «        Z1ej2         3                    d*¬+¦  «         G d,„ d-e ¦  «        ¦   «         Z4 G d.„ d/ee/         ¦  «        Z5 G d0„ d1e5e/         ee/         ¦  «        Z6d8d6„Z7d7S )9zâ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                  ó   — 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         úT/var/www/html/CA-Chatbot/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/   r0   r1   )Ú__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   r0   r1   c                ó  — t          j        j        | ||d |fi |¤Ž || _        |rt	          |¦  «        | _        |st          | _        d S t          | 	                    ¦   «         v r	|| _        d S t          |¦  «        | _        d S r?   )r   ÚAttributeImplr=   rL   ÚtuplerN   r3   rE   ÚAppenderMixinÚmroÚmixin_user_query)r:   rF   rH   rJ   rL   rN   rE   rP   s           r<   r=   zDynamicAttributeImpl.__init__W   s¢   € õ 	Ô Ô)Ø�&˜#˜t Xð	
ð 	
Ø13ð	
ð 	
ð 	
ð +ˆÔØð 	,Ý! (™OœOˆDŒMØð 	=Ý,ˆDÔÐÐÝ˜kŸošoÑ/Ô/Ð/Ð/Ø*ˆDÔÐÐå/°Ñ<Ô<ˆDÔÐÐr>   r?   )rF   rG   rH   rI   rJ   rK   rL   rM   rN   r   rE   rO   rP   r   r0   r1   )	r@   rA   rB   Ú_supports_dynamic_iterationr(   r   Úcollection_history_clsÚ__annotations__r=   rC   r>   r<   r*   r*   R   sQ   € € € € € € Ø"&ÐØ5°cÔ:ÐØ)Ð)Ð)Ñ)ð :>ð=ð =ð =ð =ð =ð =ð =r>   r*   Údynamic)Úlazyc                  ó   — e Zd ZeZdS )Ú
DynaLoaderN)r@   rA   rB   r*   Ú
impl_classrC   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d0d„Z
erd1d„Zed2d„¦   «         Zed3d„¦   «         Zd4d „Zd5d!„Z	 d6d7d$„Zd8d'„Zd9d)„Zd8d*„Zd9d+„Zd9d,„Zˆ xZS ):rT   zTA mixin that expects to be mixing in a Query class with
    AbstractAppender.


    NzOptional[Type[Query[_T]]]rE   zTuple[ColumnElement[Any], ...]Ú_order_by_clausesr)   r*   r+   r,   r0   r1   c                ó‚   •— t          j        | |j        d ¦  «         t          ¦   «                              ||¦  «         d S r?   )r   r=   rL   Úsuper)r:   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   Úinstancer4   ÚflushÚorm_utilÚhas_identity©r:   Úsesss     r<   ÚsessionzAppenderMixin.sessionˆ   sV   € å˜dœmÑ,Ô,ˆØÐ ¤Ð°4´=ÀDÐ3HÐ3HØ�JŠJ‰LŒLˆLÝÔ$ T¤]Ñ3Ô3ð 	Ø�4àˆKr>   rl   r    c                ó   — || _         d S r?   )rk   )r:   rl   s     r<   rl   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)rl   r   Úinstance_staterf   Údetachedr   Úwarnrh   Ú	state_strr   ÚIteratorResultÚSimpleResultMetaDatar)   rF   r@   ÚiterÚ_get_collection_historyr   ÚPASSIVE_NO_INITIALIZEr7   ÚscalarsÚ	_generateÚ_iter)r:   rk   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?   rC   )r:   s    r<   Ú__iter__zAppenderMixin.__iter__±   s   € € € r>   ÚindexÚintr%   c                ó   — d S r?   rC   ©r:   r€   s     r<   Ú__getitem__zAppenderMixin.__getitem__³   s   € Ø-0¨Sr>   ÚsliceúList[_T]c                ó   — d S r?   rC   rƒ   s     r<   r„   zAppenderMixin.__getitem__¶   s   € Ø58°Sr>   úUnion[int, slice]úUnion[_T, List[_T]]c                ó  — | j         }|€O| j                             t          j        | j        ¦  «        t          j        ¦  «                             |¦  «        S |  	                    |¦  «         
                    |¦  «        S r?   )rl   r)   rx   r   rq   rf   r   ry   Úindexedr{   r„   )r:   r€   rk   s      r<   r„   zAppenderMixin.__getitem__¹   sm   € ØŒ|ˆØˆ<Ø”9×4Ò4ÝÔ)¨$¬-Ñ8Ô8ÝÔ1ñô ÷ Šg�e‰nŒnðð
 —>’> $Ñ'Ô'×3Ò3°EÑ:Ô:Ð:r>   c                óþ   — | j         }|€Nt          | j                             t	          j        | j        ¦  «        t          j        ¦  «        j	        ¦  «        S |  
                    |¦  «                             ¦   «         S r?   )rl   Úlenr)   rx   r   rq   rf   r   ry   r7   r{   Úcountrj   s     r<   rŽ   zAppenderMixin.countÃ   sp   € ØŒ|ˆØˆ<ÝØ”	×1Ò1ÝÔ-¨d¬mÑ<Ô<ÝÔ5ñô ô ñ	ô ð ð —>’> $Ñ'Ô'×-Ò-Ñ/Ô/Ð/r>   rk   ú	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)rl   )rf   r   Úorm_excÚDetachedInstanceErrorrh   Úinstance_strr)   rH   rE   rL   ÚqueryÚ_where_criteriaÚ	_from_objr`   )r:   rk   rf   r”   s       r<   r{   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©r:   r—   s     r<   Úadd_allzAppenderMixin.add_allì   s   € ð 	×Ò˜8Ñ$Ô$Ð$Ð$Ð$r>   Úitemc                ó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š   ©r:   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,   r0   r1   )r0   rd   )rl   r    r0   r1   )r0   rn   )r0   r}   )r€   r�   r0   r%   )r€   r…   r0   r†   )r€   rˆ   r0   r‰   )r0   r�   r?   )rk   rd   r0   r�   )r—   r˜   r0   r1   )rž   r%   r0   r1   )r@   rA   rB   Ú__doc__rE   rY   r=   Úpropertyrl   Úsetterr|   r   r   r	   r„   rŽ   r{   r�   r¡   r£   r¥   r¨   Ú__classcell__)rc   s   @r<   rT   rT   t   sª  ø€ € € € € € ðð ð .2€KÐ1Ð1Ð1Ñ1Ø5Ð5Ð5Ñ5ð&ð &ð &ð &ð &ð &ð ðð ð ñ „Xðð „^ðð ð ñ „^ðð0ð 0ð 0ð 0ð2 ð 0à/Ð/Ð/Ð/àØ0Ð0Ð0ñ „XØ0àØ8Ð8Ð8ñ „XØ8ð;ð ;ð ;ð ;ð
0ð 
0ð 
0ð 
0ð #'ðð ð ð ð ð:%ð %ð %ð %ð#ð #ð #ð #ð%ð %ð %ð %ð#ð #ð #ð #ð ð  ð  ð  ð  ð  ð  ð  r>   rT   c                  ó   — e Zd ZdZdS )r3   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@   rA   rB   r©   rC   r>   r<   r3   r3   $  s   € € € € € ðð ð ð r>   r3   Úclsr   r0   útype[AppenderMixin[Any]]c                óJ   — d| j         z   }t          |t          | fd| i¦  «        S )zAReturn a new class with AppenderQuery functionality layered over.ÚAppenderrE   )r@   ÚtyperT   )r®   Únames     r<   rV   rV   /  s*   € à˜œÑ$€DÝ�•} cÐ*¨]¸CÐ,@ÑAÔAÐAr>   N)r®   r   r0   r¯   )8r©   Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   r   r   r   Ú r   r   r‘   r   r   rh   Úbaser   r”   r   rl   r   Ú	writeonlyr   r   r   r   Úenginer   r   Úmapperr   r   r    r+   r!   r"   Úeventr#   Úsql.elementsr$   r%   r(   r*   ÚRelationshipPropertyÚstrategy_forr]   rT   r3   rV   rC   r>   r<   ú<module>r¿      s¸  ðð	ð 	ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø /Ð /Ð /Ð /Ð /Ð /Ø -Ð -Ð -Ð -Ð -Ð -Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð àð -Ø$Ð$Ð$Ð$Ð$Ð$ØÐÐÐÐÐØ6Ð6Ð6Ð6Ð6Ð6Ø Ð Ð Ð Ð Ð Ø$Ð$Ð$Ð$Ð$Ð$Ø"Ð"Ð"Ð"Ð"Ð"Ø!Ð!Ð!Ð!Ð!Ð!Ø,Ð,Ð,Ð,Ð,Ð,à€WˆT˜ÐÑÔ€ð/ð /ð /ð /ð /Ð/°Ô3ñ /ô /ð /ð*=ð =ð =ð =ð =Ð1ñ =ô =ð =ð: Ô#×0Ò0°iÐ0Ñ@Ô@ð&ð &ð &ð &ð &�ñ &ô &ñ AÔ@ð&ðm ð m ð m ð m ð m Ð,¨RÔ0ñ m ô m ð m ð`ð ð ð ð �M "Ô% u¨R¤yñ ô ð ðBð Bð Bð Bð Bð Br>   