
    -h>                        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  \R"                  \R$                  R'                  SS9 " S S\	R(                  5      5       5       r " S S\R,                  5      r " S S\5      r " S S\5      r " S S\\5      rS r " S S\5      rg)zDynamic collection API.

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

   )
attributes)exc)
interfaces)object_mapper)object_session)relationships)
strategies)util)Query   )log)resultdynamic)lazyc                       \ rS rSrS rSrg)
DynaLoader   c           
         SU l         U R                  (       d#  [        R                  " SU R                  -  5      eU R                  R
                  [        R                  [        R                  4;  a#  [        R                  " SU R                  -  5        [        R                  " U R                  US[        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.zOn relationship %s, 'dynamic' loaders cannot be used with many-to-one/one-to-one relationships and/or uselist=False.  This warning will be an exception in a future release.)	useobject
impl_classtarget_mapperorder_byquery_class)is_class_leveluselistr   InvalidRequestErrorparent_property	directionr   	ONETOMANY
MANYTOMANYr
   warnr	   _register_attributeDynamicAttributeImplmapperr   r   )selfr$   s     kC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\sqlalchemy/orm/dynamic.pyinit_class_attributeDynaLoader.init_class_attribute!   s    "||))!#'#7#78 
 !!++  !!4
 
 II" %)$8$89 	&&  +..55))22,,88	
    )r   N)__name__
__module____qualname____firstlineno__r'   __static_attributes__ r)   r&   r   r      s    
r)   r   c                     ^  \ rS rSrSrSrSrSrSrSr	 SU 4S jjr
\R                  4S jrS\R                  4S jr\R"                  S	 5       r\R"                  S
 5       r SS jr SS jrS rS\R                  SSS4S jrS rS r\R                  4S jr\R                  4S jr\R                  4S jr\R                  4S jr\R                  4S jr\R                  4S jrSr U =r!$ )r#   ?   TFr/   Nc                    > [         [        U ]
  " XX440 UD6  XPl        U(       a  [	        U5      U l        U(       d  [        U l        g [        UR                  5       ;   a  Xpl        g [        U5      U l        g N)superr#   __init__r   tupler   AppenderQueryr   AppenderMixinmromixin_user_query)
r%   class_keytypecallabledispatchr   r   r   kw	__class__s
            r&   r5   DynamicAttributeImpl.__init__G   se     	"D2	
35	
 +!(ODM,Dkoo//*/<Dr)   c                     U[         R                  -  (       d*  U R                  U[         R                  5      R                  $ U R                  X5      $ r3   )r   SQL_OK_get_collection_historyPASSIVE_NO_INITIALIZEadded_itemsr   )r%   statedict_passives       r&   getDynamicAttributeImpl.get_   sF    ***//z77k ##D00r)   c                     U[         R                  -  (       d  U R                  X5      R                  nOU R                  X5      nUR                  n[        U5      $ r3   )r   rC   rD   rF   added_plus_unchangedDynamicCollectionAdapter)r%   rG   rH   	user_datarI   datahistorys          r&   get_collection#DynamicAttributeImpl.get_collectiong   sN     ***//?KKD225BG//D'--r)   c                 L    [         R                  " U [         R                  5      $ r3   )r   Event	OP_APPENDr%   s    r&   _append_token"DynamicAttributeImpl._append_tokenu       j&:&:;;r)   c                 L    [         R                  " U [         R                  5      $ r3   )r   rU   	OP_REMOVErW   s    r&   _remove_token"DynamicAttributeImpl._remove_tokeny   rZ   r)   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_event	add_addedr>   appendrX   trackparentsethasparentr   instance_stater%   rG   rH   value	initiatorcollection_historyfns          r&   fire_append_event&DynamicAttributeImpl.fire_append_event}   s     %!%!5!5e!C$$U+--&&BuY%D$2D2DEE '  1j77>tL !2r)   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)	ra   add_removedrd   re   r   rf   r>   remover]   rg   s          r&   fire_remove_event&DynamicAttributeImpl.fire_remove_event   s}     %!%!5!5e!C&&u- 1j77>uM--&&BuY<$*<*<= 'r)   c                    U R                   UR                  ;  a"  [        X5      UR                  U R                   '   UR                  X [        R
                  5        SX R                   '   UR                  U R                      $ r`   )r<   committed_stateCollectionHistoryra   r   	NEVER_SET)r%   rG   rH   s      r&   ra   $DynamicAttributeImpl._modified_event   se    885000.?.LE!!$((+e:+?+?@ hh$$TXX..r)   c	           	         U(       a  UR                   U R                   L a  g U(       a  Uc  g Un	[        U	5      n
UR                  (       a%  [        R                  " U R                  X5      5      nU R                  X5      nUR                  (       d  UR                  nOWR                  UR                  5      n[        R                  nUR                  U
5      nU" 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 )N)rj   )parent_tokenlisthas_identityr
   IdentitySetrJ   ra   rF   unionintersection
differencerl   rq   )r%   rG   rH   rh   ri   rI   	check_oldpop_adaptiterable
new_valuesold_collectionrj   idset	constants	additionsremovalsmembers                     r&   setDynamicAttributeImpl.set   s9    //43D3DD5=(^
!--dhhu.DEN!11%?!!/;;N+11"..N   "//
;	*%00;	!,,Y7 F"&&'9 '  ! F""#5 #  r)   c                     [        5       er3   NotImplementedError)r%   argskwargss      r&   deleteDynamicAttributeImpl.delete   s    !##r)   c                     [        S5      e)Nz7Dynamic attributes don't support collection population.r   )r%   rG   rH   rh   s       r&   set_committed_value(DynamicAttributeImpl.set_committed_value   s    !H
 	
r)   c                 D    U R                  X5      nUR                  5       $ r3   )rD   
as_history)r%   rG   rH   rI   cs        r&   get_history DynamicAttributeImpl.get_history   s    ((8||~r)   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 r3   )rD   	all_itemsr   rf   )r%   rG   rH   rI   r   xs         r&   get_all_pending$DynamicAttributeImpl.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[        X5      nUR                  (       a"  U[        R
                  -  (       a
  [        XUS9$ U$ )N)apply_to)r<   rt   ru   r{   r   INIT_OK)r%   rG   rI   r   s       r&   rD   ,DynamicAttributeImpl._get_collection_history   sZ    88u,,,%%dhh/A!$.A7Z-?-?#?$T1==Hr)   c                 2    X@La  U R                  XX45        g g r3   )rl   r%   rG   rH   rh   ri   rI   s         r&   rc   DynamicAttributeImpl.append         ""5B !r)   c                 2    X@La  U R                  XX45        g g r3   )rq   r   s         r&   rp   DynamicAttributeImpl.remove   r   r)   c                 &    U R                  XX4US9  g )N)rI   )rp   r   s         r&   r   DynamicAttributeImpl.pop  s     	E%GDr)   )r   r   r   r3   )"r*   r+   r,   r-   uses_objectsdefault_accepts_scalar_loadersupports_population
collectionr   r   r5   r   PASSIVE_OFFrJ   rE   rR   r
   memoized_propertyrX   r]   rl   rq   ra   r   r   r   r   r   rD   rc   rp   r   r.   __classcell__r@   s   @r&   r#   r#   ?   s7   L$)!JGH =0 )3(>(> 1 00. 
< < 
< < BFM BF>
/" &&4l$

 1;0F0F 
 %/$D$DH 6@5K5K 	 7A6L6LC 7A6L6LC 7A6L6LE Er)   r#   c                   :    \ rS rSrSrS rS rS rS rS r	\	r
Srg	)
rN   i
  z9simplified CollectionAdapter for internal API consistencyc                     Xl         g r3   rP   )r%   rP   s     r&   r5   !DynamicCollectionAdapter.__init__  s    	r)   c                 ,    [        U R                  5      $ r3   )iterrP   rW   s    r&   __iter__!DynamicCollectionAdapter.__iter__  s    DIIr)   c                     g r3   r/   rW   s    r&   _reset_empty%DynamicCollectionAdapter._reset_empty  s    r)   c                 ,    [        U R                  5      $ r3   )lenrP   rW   s    r&   __len__ DynamicCollectionAdapter.__len__  s    499~r)   c                     gr`   r/   rW   s    r&   __bool__!DynamicCollectionAdapter.__bool__  s    r)   r   N)r*   r+   r,   r-   __doc__r5   r   r   r   r   __nonzero__r.   r/   r)   r&   rN   rN   
  s%    C Kr)   rN   c                   t   ^  \ rS rSrSrU 4S jrS r\" \S 5      rS rS r	S r
SS	 jrS
 rS rS rSrU =r$ )r8   i  Nc                   > [         [        U ]  UR                  S 5        UR	                  5       =U l        nXl        [        U5      nUR                  U R                  R                     nUR                  b+  UR                  R                  5       UR                  4U l        UR                  USS94U l        U R                  R                   (       a  U R                  R                   U l        g g )NF)alias_secondary)r4   r8   r5   r   objinstanceattrr   _propsr<   	secondaryr$   __clause_element__	_from_obj_with_parent_where_criteriar   _order_by_clauses)r%   r   rG   r   r$   propr@   s         r&   r5   AppenderMixin.__init__"  s    mT+D,>,>E#(99;.	x(}}TYY]]+>>% #kk<<>ODN h> 
 99%)YY%7%7D" r)   c                    [        U R                  5      nUbB  U R                  (       a1  UR                  (       a   U R                  U;   a  UR                  5         [        R
                  " U R                  5      (       d  g U$ r3   )r   r   	autoflushflushorm_utilr{   r%   sesss     r&   sessionAppenderMixin.session=  sV    dmm,%JJL$$T]]33Kr)   c                     g r3   r/   )sr   s     r&   <lambda>AppenderMixin.<lambda>K  s    Tr)   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       $ )NzInstance %s is detached, dynamic relationship cannot return a correct result.   This warning will become a DetachedInstanceError in a future release.T)_source_supports_scalars)r   r   rf   r   detachedr
   r!   r   	state_strr   IteratorResultSimpleResultMetaDatar   r;   r*   r   rD   rE   rF   scalars	_generate_iter)r%   r   rG   s      r&   r   AppenderMixin._iterM  s    ||<--dmm<E~~		C  ))%02 ((++TYY-=-=-F-F,GHII55"11$--@"88 "k	 *.	 gi	 >>$'--//r)   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      $ r3   )
r   r   rD   r   rf   r   rE   indexedr   __getitem__)r%   indexr   s      r&   r   AppenderMixin.__getitem__f  si    ||<9944))$--800 gen
 >>$'33E::r)   c                    U R                   nUc[  [        U R                  R                  [        R
                  " U R                  5      [        R                  5      R                  5      $ U R                  U5      R                  5       $ r3   )r   r   r   rD   r   rf   r   rE   rF   r   countr   s     r&   r   AppenderMixin.countp  sk    ||<		11--dmm<44 +	  >>$'--//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)r   )r   r   orm_excDetachedInstanceErrorr   instance_strr   r<   r   r   queryr   r   r   )r%   r   r   r   s       r&   r   AppenderMixin._generate|  s     ==<!(+D|33  ,,X6		G  $$TYY%<%<d$KEJJtyy667E $ 4 4.."&"8"8r)   c                     U H]  nU R                   R                  [        R                  " U R                  5      [        R
                  " U R                  5      US 5        M_     g r3   r   rc   r   rf   r   instance_dict)r%   iteratoritems      r&   extendAppenderMixin.extend  sH    DII))$--8((7	 r)   c                     U R                   R                  [        R                  " U R                  5      [        R
                  " U R                  5      US 5        g r3   r   r%   r   s     r&   rc   AppenderMixin.append  >    		%%dmm4$$T]]3		
r)   c                     U R                   R                  [        R                  " U R                  5      [        R
                  " U R                  5      US 5        g r3   )r   rp   r   rf   r   r   r  s     r&   rp   AppenderMixin.remove  r  r)   )r   r   r   r   r   r3   )r*   r+   r,   r-   r   r5   r   propertyr   r   r   r   r  rc   rp   r.   r   r   s   @r&   r8   r8     sI    K86 w 12G02;
04

 
r)   r8   c                       \ rS rSrSrSrg)r7   i  zBA dynamic query that supports basic collection storage operations.r/   N)r*   r+   r,   r-   r   r.   r/   r)   r&   r7   r7     s    Lr)   r7   c                 J    SU R                   -   n[        U[        U 4SU 05      $ )zAReturn a new class with AppenderQuery functionality layered over.Appenderr   )r*   typer8   )clsnames     r&   r:   r:     s)    $D}c*]C,@AAr)   c                   Z    \ rS rSrSrSS jr\S 5       r\S 5       rS r	S r
S	 rS
 rSrg)ru   i  zDOverrides AttributeHistory to receive append/remove events directly.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)r7   r   r
   OrderedIdentitySetunchanged_itemsrF   deleted_items_reconcile_collection)r%   r   rG   r   colls        r&   r5   CollectionHistory.__init__  s     -77>D#'#:#:4#@D '33D!)!7!7D)-D&!%!8!8!:D#668D#'#:#:#<D ).D&r)   c                 ^    [        U R                  R                  U R                  5      5      $ r3   )rz   rF   r}   r  rW   s    r&   rM   &CollectionHistory.added_plus_unchanged  s$    D$$**4+?+?@AAr)   c                     [        U R                  R                  U R                  5      R                  U R                  5      5      $ r3   )rz   rF   r}   r  r  rW   s    r&   r   CollectionHistory.all_items  s=    ""4#7#78>>""
 	
r)   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      $ r3   )	r  rF   r   r  r  r~   r   Historyrz   )r%   addeddeleted	unchangeds       r&   r   CollectionHistory.as_history  s    %%$$//0D0DEE((55d6J6JKG,,77@I   $$"" &E
 !!$u+tIWNNr)   c                 2    [        U R                  5      U   $ r3   )rz   rF   )r%   r   s     r&   r   CollectionHistory.indexed  s    D$$%e,,r)   c                 :    U R                   R                  U5        g r3   )rF   addr%   rh   s     r&   rb   CollectionHistory.add_added  s    U#r)   c                     XR                   ;   a  U R                   R                  U5        g U R                  R                  U5        g r3   )rF   rp   r  r%  r&  s     r&   ro   CollectionHistory.add_removed  s6    $$$##E*""5)r)   )r  rF   r  r  r3   )r*   r+   r,   r-   r   r5   r	  rM   r   r   r   rb   ro   r.   r/   r)   r&   ru   ru     sI    N/ B B 
 
O-$*r)   ru   N)r    r   r   r   r   r   r   r   r	   r
   r   r   r   r   enginer   class_loggerRelationshipPropertystrategy_forAbstractRelationshipLoaderr   AttributeImplr#   objectrN   r8   r7   r:   ru   r/   r)   r&   <module>r2     s                 ##00i0@
66 
 A 
>HE:33 HEVv *N
F N
bMM5 MB3* 3*r)   