
    +hA                     b    d dl 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d
 Z	y)    N   )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 ZddZd Zd Zd Zd Zy)IdentityMapc                 d    i | _         t               | _        t        j                  |       | _        y N)_dictset	_modifiedweakrefref_wrselfs    J/var/www/html/venv/lib/python3.12/site-packages/sqlalchemy/orm/identity.py__init__zIdentityMap.__init__   s"    
;;t$    c                     t         | _        y r
   )_killed_add_unpresentr   s    r   _killzIdentityMap._kill   s
    %r   c                 6    | j                   j                         S r
   )r   keysr   s    r   r   zIdentityMap.keys   s    zz  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                 &    | j                  |       y)zUoptional inlined form of add() which can assume item isn't present
        in the mapN)r$   r   r    keys      r   r   zIdentityMap._add_unpresent!   s     	r   c                     t        d      Nz%IdentityMap uses add() to insert datar   )r   dict_s     r   updatezIdentityMap.update&       !"IJJr   c                     t        d      Nz(IdentityMap uses remove() to remove datar   r   s    r   clearzIdentityMap.clear)       !"LMMr   c                 v    | j                   |_        |j                  r| j                  j	                  |       y y r
   )r   _instance_dictmodifiedr   r$   r   s     r   _manage_incoming_statez"IdentityMap._manage_incoming_state,   s,    #xx>>NNu% r   c                 X    |` |j                  r| j                  j                  |       y y r
   )r2   r3   r   discardr   s     r   _manage_removed_statez!IdentityMap._manage_removed_state2   s&     >>NN""5) r   c                     | j                   S r
   )r   r   s    r   _dirty_stateszIdentityMap._dirty_states7   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_modified:   s    
 DNN##r   c                 
    || v S r
    r   r'   s     r   has_keyzIdentityMap.has_keyA   s    d{r   c                     t        d      r.   r   r   s    r   popitemzIdentityMap.popitemD   r0   r   c                     t        d      r.   r   )r   r'   argss      r   popzIdentityMap.popG   r0   r   Nc                     t        d      r)   r   )r   r'   defaults      r   
setdefaultzIdentityMap.setdefaultJ   r,   r   c                 ,    t        | j                        S r
   )lenr   r   s    r   __len__zIdentityMap.__len__M   s    4::r   c                     t               r
   r   r   s    r   copyzIdentityMap.copyP   r"   r   c                     t        d      r)   r   )r   r'   values      r   __setitem__zIdentityMap.__setitem__S   r,   r   c                     t        d      r.   r   r?   s     r   __delitem__zIdentityMap.__delitem__V   r0   r   r
   )__name__
__module____qualname__r   r   r   r!   r$   r   r+   r/   r4   r7   r9   r<   r@   rB   rE   rH   rK   rM   rP   rR   r>   r   r   r   r      sm    %
&!$$
KN&*
$NNK$K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y)WeakInstanceDictc                 ^    | j                   |   }|j                         }|t        |      |S r
   r   objKeyErrorr   r'   r    os       r   __getitem__zWeakInstanceDict.__getitem__[   s.    

3IIK93-r   c                     	 || j                   v r | j                   |   }|j                         }ny	 |d uS # t        $ r Y yw xY wNFrY   r\   s       r   __contains__zWeakInstanceDict.__contains__b   sS    		!djj 

3IIK  D=   		s   .6 	AAc                     |j                   | j                  v r	 | j                  |j                      |u S y# t        $ r Y yw xY wr`   )r'   r   r[   r   s     r   contains_statezWeakInstanceDict.contains_staten   sH    99

"zz%)),55   s   6 	AAc                    |j                   | j                  v r1	 | j                  |j                      }||ur| j                  |       ny d }|| j                  |j                   <   | j	                  |       S # t        $ r Y 7w xY wr
   )r'   r   r7   r[   r4   )r   r    existings      r   r!   zWeakInstanceDict.replacew   s    99

"	 ::eii0
 5(..x8H %

599##E*  s   A8 8	BBc                 V   |j                   }|| j                  v r`	 | j                  |   }||urK|j                         }|:t        j                  dt        j                  |      d|j                   d      y|| j                  |<   | j                  |       y# t        $ r Y ,w xY w)NzCan't attach instance z; another instance with key z$ is already present in this session.FT)	r'   r   rZ   sa_excInvalidRequestErrororm_util	state_strr[   r4   )r   r    r'   existing_stater]   s        r   r$   zWeakInstanceDict.add   s    ii$**!!%C
 ".&**,A}$88  (11%8%))E  !

3##E*#  s   B 	B('B(c                 D    || j                   |<   | j                  |_        y r
   )r   r   r2   r&   s      r   r   zWeakInstanceDict._add_unpresent   s    

3#xxr   Nc                     || j                   vr|S 	 | j                   |   }|j                         }||S |S # t        $ r |cY S w xY wr
   rY   )r   r'   rG   r    r]   s        r   getzWeakInstanceDict.get   sW    djj N		JJsOE
 		AyH  	N	s   7 AAc                     | j                         }g }|D ]2  }|j                         }||j                  |j                  |f       4 |S r
   )
all_statesrZ   appendr'   r   valuesresultr    rO   s        r   itemszWeakInstanceDict.items   sO    " 	2EIIKE uyy%01	2 r   c                     | j                         }g }|D ]&  }|j                         }||j                  |       ( |S r
   )rp   rZ   rq   rr   s        r   rs   zWeakInstanceDict.values   sF    " 	%EIIKE e$	%
 r   c                 4    t        | j                               S r
   )iterr   r   s    r   __iter__zWeakInstanceDict.__iter__   s    DIIK  r   c                 4    t        | j                               S r
   )rx   ru   r   s    r   	iteritemszWeakInstanceDict.iteritems   s    

%%r   c                 4    t        | j                               S r
   )rx   rs   r   s    r   
itervalueszWeakInstanceDict.itervalues   s    &&r   c                     t         j                  r| j                  j                         S t	        | j                  j                               S r
   )r   py2kr   rs   listr   s    r   rp   zWeakInstanceDict.all_states   s4    99::$$&&

))+,,r   c                     	 | j                   |j                     }||u r'| j                   j                  |j                  d        y y # t        $ r Y y w xY wr
   )r   r'   rE   r[   r   r    sts      r   _fast_discardzWeakInstanceDict._fast_discard   sQ    	0EII&B
 U{

uyy$/ 	  		s   A 	AAc                 &    | j                  |       y r
   )safe_discardr   s     r   r6   zWeakInstanceDict.discard   s    % r   c                     |j                   | j                  v rW	 | j                  |j                      }||u r8| j                  j                  |j                   d        | j                  |       y y y # t        $ r Y y w xY wr
   )r'   r   rE   r7   r[   r   s      r   r   zWeakInstanceDict.safe_discard   st    99

"6ZZ		*
 ;JJNN599d3..u5  #  s   A1 1	A=<A=r
   )rS   rT   rU   r^   ra   rc   r!   r$   r   rn   ru   rs   ry   r   r   r{   r}   rp   r   r6   r   r>   r   r   rW   rW   Z   s[    
!&2(
! yy	&	'-
0!
6r   rW   c                 \    t        j                  dt        j                  |       z  d      )NzObject %s cannot be converted to 'persistent' state, as this identity map is no longer valid.  Has the owning Session been closed?lkrp)code)rg   rh   ri   rj   )r    r'   s     r   r   r      s4     
$
$	!++E2	3 	 r   )
r    r   ri   r   rg   objectr   rW   r   r>   r   r   <module>r      s8       HN& HNVY6{ Y6xr   