
    ؄_(                         d dl Z ddlmZ ddlmZ ddlmZ ddlmZ  G d de          Z G d	 d
e          Z	 G d de          Z
dS )    N   )
attributes)util   )excc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd ZddZd Zd Zd Zd ZdS )IdentityMapc                 l    i | _         t                      | _        t          j        |           | _        d S N)_dictset	_modifiedweakrefref_wrselfs    \/var/www/book.euthymeo.com/html/venv/lib/python3.11/site-packages/sqlalchemy/orm/identity.py__init__zIdentityMap.__init__   s)    
;t$$    c                 4    | j                                         S r   )r   keysr   s    r   r   zIdentityMap.keys   s    z   r   c                     t                      r   NotImplementedErrorr   states     r   replacezIdentityMap.replace       !###r   c                     t                      r   r   r   s     r   addzIdentityMap.add   r   r   c                 0    |                      |           dS )zUoptional inlined form of add() which can assume item isn't present
        in the mapN)r!   r   r   keys      r   _add_unpresentzIdentityMap._add_unpresent   s     	r   c                      t          d          Nz%IdentityMap uses add() to insert datar   )r   dict_s     r   updatezIdentityMap.update$       !"IJJJr   c                      t          d          Nz(IdentityMap uses remove() to remove datar   r   s    r   clearzIdentityMap.clear'       !"LMMMr   c                 d    | j         |_        |j        r| j                            |           d S d S r   )r   _instance_dictmodifiedr   r!   r   s     r   _manage_incoming_statez"IdentityMap._manage_incoming_state*   s<    #x> 	&Nu%%%%%	& 	&r   c                 P    |` |j        r| j                            |           d S d S r   )r0   r1   r   discardr   s     r   _manage_removed_statez!IdentityMap._manage_removed_state0   s8     > 	*N""5)))))	* 	*r   c                     | j         S r   )r   r   s    r   _dirty_stateszIdentityMap._dirty_states5   s
    ~r   c                 *    t          | j                  S )z[return True if any InstanceStates present have been marked
        as 'modified'.

        )boolr   r   s    r   check_modifiedzIdentityMap.check_modified8   s    
 DN###r   c                 
    || v S r    r   r$   s     r   has_keyzIdentityMap.has_key?   s    d{r   c                      t          d          r,   r   r   s    r   popitemzIdentityMap.popitemB   r.   r   c                      t          d          r,   r   )r   r$   argss      r   popzIdentityMap.popE   r.   r   Nc                      t          d          r'   r   r   r$   defaults      r   
setdefaultzIdentityMap.setdefaultH   r*   r   c                 *    t          | j                  S r   )lenr   r   s    r   __len__zIdentityMap.__len__K   s    4:r   c                     t                      r   r   r   s    r   copyzIdentityMap.copyN   r   r   c                      t          d          r'   r   )r   r$   values      r   __setitem__zIdentityMap.__setitem__Q   r*   r   c                      t          d          r,   r   r=   s     r   __delitem__zIdentityMap.__delitem__T   r.   r   r   )__name__
__module____qualname__r   r   r   r!   r%   r)   r-   r2   r5   r7   r:   r>   r@   rC   rG   rJ   rL   rO   rQ   r<   r   r   r	   r	      sN       % % %
! ! !$ $ $$ $ $  
K K KN N N& & &* * *
  $ $ $  N N NN N NK K K K  $ $ $K K KN N N N Nr   r	   c                       e Zd Zd Zd Zd Zd Zd Zd ZddZ	d	 Z
d
 Zd Zej        rd Zd Zd Zd Zd Zd Zd ZdS )WeakInstanceDictc                 j    | j         |         }|                                }|t          |          |S r   r   objKeyErrorr   r$   r   os       r   __getitem__zWeakInstanceDict.__getitem__Y   s0    
3IIKK93--r   c                     	 || j         v r"| j         |         }|                                }ndS 	 |d uS # t          $ r Y dS w xY wNFrX   r[   s       r   __contains__zWeakInstanceDict.__contains__`   sh    		!dj  
3IIKKu  D=   	 	 	55	s   +4 
AAc                 n    |j         | j        v r&	 | j        |j                  |u S # t          $ r Y dS w xY wdS r_   )r$   r   rZ   r   s     r   contains_statezWeakInstanceDict.contains_statel   sS    9
""z%),55   uu 5s   $ 
22c                     |j         | j        v r?	 | j        |j                  }||ur|                     |           nd S # t          $ r Y nw xY wd }|| j        |j         <   |                     |           |S r   )r$   r   r5   rZ   r2   r   r   existings      r   r   zWeakInstanceDict.replaceu   s    9
""	 :ei0
 5((..x88884     H %
59##E***s   > 
A
Ac                 >   |j         }|| j        v rm	 | j        |         }||urI|                                }|2t          j        dt          j        |          d|j         d          ndS # t          $ r Y nw xY w|| j        |<   |                     |           dS NzCan't attach instance z; another instance with key z$ is already present in this session.FT)	r$   r   rY   sa_excInvalidRequestErrororm_util	state_strrZ   r2   )r   r   r$   existing_stater\   s        r   r!   zWeakInstanceDict.add   s    i$*!!%C
 "..&**,,A}$88  (1%8888%)))E   % !5      
3##E***ts   A. .
A;:A;c                 2    || j         |<   | j        |_        d S r   )r   r   r0   r#   s      r   r%   zWeakInstanceDict._add_unpresent   s    
3#xr   Nc                     || j         vr|S 	 | j         |         }|                                }||S |S # t          $ r |cY S w xY wr   rX   )r   r$   rF   r   r\   s        r   getzWeakInstanceDict.get   sh    dj  N		JsOE
 		AyH  	 	 	NNN	s   4 AAc                     |                                  }g }|D ]4}|                                }||                    |j        |f           5|S r   )
all_statesrY   appendr$   r   valuesresultr   rN   s        r   itemszWeakInstanceDict.items   sW    "" 	2 	2EIIKKE uy%0111r   c                     |                                  }g }|D ]-}|                                }||                    |           .|S r   )rq   rY   rr   rs   s        r   rt   zWeakInstanceDict.values   sP    "" 	% 	%EIIKKE e$$$r   c                 D    t          |                                           S r   )iterr   r   s    r   __iter__zWeakInstanceDict.__iter__   s    DIIKK   r   c                 D    t          |                                           S r   )ry   rv   r   s    r   	iteritemszWeakInstanceDict.iteritems   s    

%%%r   c                 D    t          |                                           S r   )ry   rt   r   s    r   
itervalueszWeakInstanceDict.itervalues   s    &&&r   c                     t           j        r| j                                        S t	          | j                                                  S r   )r   py2kr   rt   listr   s    r   rq   zWeakInstanceDict.all_states   s<    9 	-:$$&&&
))++,,,r   c                     	 | j         |j                 }||u r"| j                             |j        d            d S d S # t          $ r Y d S w xY wr   )r   r$   rC   rZ   r   r   sts      r   _fast_discardzWeakInstanceDict._fast_discard   si    	0EI&B
 U{{
uy$///// {	  	 	 	DD	s   < 
A
	A
c                 0    |                      |           d S r   safe_discardr   s     r   r4   zWeakInstanceDict.discard       %     r   c                     |j         | j        v ra	 | j        |j                  }||u r7| j                            |j         d            |                     |           d S d S # t          $ r Y d S w xY wd S r   )r$   r   rC   r5   rZ   r   s      r   r   zWeakInstanceDict.safe_discard   s    9
""6Z	*
 ;;JNN59d333..u55555 ;	     #"s   A 
A-,A-c                     dS )Nr   r<   r   s    r   prunezWeakInstanceDict.prune   s    qr   r   )rR   rS   rT   r]   r`   rb   r   r!   r%   ro   rv   rt   rz   r   r   r|   r~   rq   r   r4   r   r   r<   r   r   rV   rV   X   s$         
! 
! 
!    &  2( ( (
       ! ! ! y '	& 	& 	&	' 	' 	'- - -
0 
0 
0! ! !
6 
6 
6    r   rV   c                       e Zd ZdZej        rd Zd Zd Zd Z	d Z
ddZd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )StrongInstanceDicta&  A 'strong-referencing' version of the identity map.

    .. deprecated 1.1::
        The strong
        reference identity map is legacy.  See the
        recipe at :ref:`session_referencing_behavior` for
        an event-based approach to maintaining strong identity
        references.


    c                 4    | j                                         S r   )r   r~   r   s    r   r~   zStrongInstanceDict.itervalues  s    :((***r   c                 4    | j                                         S r   )r   r|   r   s    r   r|   zStrongInstanceDict.iteritems	  s    :'')))r   c                 *    t          | j                  S r   )ry   r(   r   s    r   rz   zStrongInstanceDict.__iter__  s    DJr   c                     | j         |         S r   r   r=   s     r   r]   zStrongInstanceDict.__getitem__  s    z#r   c                     || j         v S r   r   r=   s     r   r`   zStrongInstanceDict.__contains__  s    dj  r   Nc                 8    | j                             ||          S r   )r   ro   rE   s      r   ro   zStrongInstanceDict.get  s    z~~c7+++r   c                 4    | j                                         S r   )r   rt   r   s    r   rt   zStrongInstanceDict.values  s    z  """r   c                 4    | j                                         S r   )r   rv   r   s    r   rv   zStrongInstanceDict.items  s    z!!!r   c                 >    d |                                  D             S )Nc                 6    g | ]}t          j        |          S r<   )r   instance_state).0r\   s     r   
<listcomp>z1StrongInstanceDict.all_states.<locals>.<listcomp>  s#    DDD
)!,,DDDr   )rt   r   s    r   rq   zStrongInstanceDict.all_states  s    DDdkkmmDDDDr   c                 V    |j         | v o t          j        | |j                            |u S r   )r$   r   r   r   s     r   rb   z!StrongInstanceDict.contains_state!  s0    I D)$uy/::eC	
r   c                    |j         | j        v rB| j        |j                  }t          j        |          }||ur|                     |           nd S d }|                                | j        |j         <   |                     |           |S r   )r$   r   r   r   r5   rY   r2   rd   s      r   r   zStrongInstanceDict.replace'  s    9
""z%),H!0::Hu$$**84444H %		
59##E***r   c                 8   |j         | v rZt          j        | j        |j                            |ur2t	          j        dt          j        |          d|j         d          dS |                                | j        |j         <   | 	                    |           dS rg   )
r$   r   r   r   rh   ri   rj   rk   rY   r2   r   s     r   r!   zStrongInstanceDict.add6  s    9(EI)>??uLL00  )%0000%)))=   5$)IIKKDJuy!''...4r   c                 V    |                                 | j        |<   | j        |_        d S r   )rY   r   r   r0   r#   s      r   r%   z!StrongInstanceDict._add_unpresentE  s%    ))++
3#xr   c                     	 | j         |j                 }t          j        |          |u r"| j                             |j        d            d S d S # t
          $ r Y d S w xY wr   )r   r$   r   r   rC   rZ   )r   r   rY   s      r   r   z StrongInstanceDict._fast_discardJ  sw    	0*UY'C
 (--66
uy$///// 76	  	 	 	DD	s   A 
AAc                 0    |                      |           d S r   r   r   s     r   r4   zStrongInstanceDict.discardV  r   r   c                     |j         | j        v ra| j        |j                  }t          j        |          }||u r9| j                            |j         d            |                     |           d S d S d S r   )r$   r   r   r   rC   r5   )r   r   rY   r   s       r   r   zStrongInstanceDict.safe_discardY  sy    9
""*UY'C*3//BU{{
uy$///**511111 #" {r   c                 ^   t          |           }d |                                 D             }t          j                    }|                    |            | j                                         | j                            |           t          |          | _        |t          |           z
  S )z%prune unreferenced, non-dirty states.c                 D    g | ]}|j         	|                                S r<   )r1   rY   )r   ss     r   r   z,StrongInstanceDict.prune.<locals>.<listcomp>e  s'    BBBQqzBBBBr   )	rI   rq   r   WeakValueDictionaryr)   r   r-   r9   r1   )r   	ref_countdirtykeeperss       r   r   zStrongInstanceDict.prunea  s     II	BB$//"3"3BBB -//t

'"""U3t99$$r   r   )rR   rS   rT   __doc__r   r   r~   r|   rz   r]   r`   ro   rt   rv   rq   rb   r   r!   r%   r   r4   r   r   r<   r   r   r   r      s1       
 
 y *	+ 	+ 	+	* 	* 	*       ! ! !, , , ,# # #" " "E E E
 
 
    ( ( (

0 
0 
0! ! !2 2 2% % % % %r   r   )r    r   r   rj   r   rh   objectr	   rV   r   r<   r   r   <module>r      s                           EN EN EN EN EN& EN EN ENP\ \ \ \ \{ \ \ \~w% w% w% w% w% w% w% w% w% w%r   