U
    ÌZjA  ã                   @   sX   d dl Z ddlmZ ddlmZ ddlmZ G dd„ deƒZG dd	„ d	eƒZd
d„ Z	dS )é    Né   )Úutilé   )Úexcc                   @   s®   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd*d d!„Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ ZdS )+ÚIdentityMapc                 C   s   i | _ tƒ | _t | ¡| _d S ©N)Ú_dictÚsetÚ	_modifiedÚweakrefÚrefÚ_wr©Úself© r   úZ/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/sqlalchemy/orm/identity.pyÚ__init__   s    zIdentityMap.__init__c                 C   s
   t | _d S r   )Ú_killedÚ_add_unpresentr   r   r   r   Ú_kill   s    zIdentityMap._killc                 C   s
   | j  ¡ S r   )r   Úkeysr   r   r   r   r      s    zIdentityMap.keysc                 C   s
   t ƒ ‚d S r   ©ÚNotImplementedError©r   Ústater   r   r   Úreplace   s    zIdentityMap.replacec                 C   s
   t ƒ ‚d S r   r   r   r   r   r   Úadd   s    zIdentityMap.addc                 C   s   |   |¡ dS )zUoptional inlined form of add() which can assume item isn't present
        in the mapN)r   ©r   r   Úkeyr   r   r   r   !   s    zIdentityMap._add_unpresentc                 C   s   t dƒ‚d S ©Nz%IdentityMap uses add() to insert datar   )r   Zdict_r   r   r   Úupdate&   s    zIdentityMap.updatec                 C   s   t dƒ‚d S ©Nz(IdentityMap uses remove() to remove datar   r   r   r   r   Úclear)   s    zIdentityMap.clearc                 C   s   | j |_|jr| j |¡ d S r   )r   Ú_instance_dictÚmodifiedr
   r   r   r   r   r   Ú_manage_incoming_state,   s    z"IdentityMap._manage_incoming_statec                 C   s   |` |jr| j |¡ d S r   )r#   r$   r
   Údiscardr   r   r   r   Ú_manage_removed_state2   s    z!IdentityMap._manage_removed_statec                 C   s   | j S r   )r
   r   r   r   r   Ú_dirty_states7   s    zIdentityMap._dirty_statesc                 C   s
   t | jƒS )z[return True if any InstanceStates present have been marked
        as 'modified'.

        )Úboolr
   r   r   r   r   Úcheck_modified:   s    zIdentityMap.check_modifiedc                 C   s   || kS r   r   ©r   r   r   r   r   Úhas_keyA   s    zIdentityMap.has_keyc                 C   s   t dƒ‚d S r!   r   r   r   r   r   ÚpopitemD   s    zIdentityMap.popitemc                 G   s   t dƒ‚d S r!   r   )r   r   Úargsr   r   r   ÚpopG   s    zIdentityMap.popNc                 C   s   t dƒ‚d S r   r   )r   r   Údefaultr   r   r   Ú
setdefaultJ   s    zIdentityMap.setdefaultc                 C   s
   t | jƒS r   )Úlenr   r   r   r   r   Ú__len__M   s    zIdentityMap.__len__c                 C   s
   t ƒ ‚d S r   r   r   r   r   r   ÚcopyP   s    zIdentityMap.copyc                 C   s   t dƒ‚d S r   r   )r   r   Úvaluer   r   r   Ú__setitem__S   s    zIdentityMap.__setitem__c                 C   s   t dƒ‚d S r!   r   r+   r   r   r   Ú__delitem__V   s    zIdentityMap.__delitem__)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r    r"   r%   r'   r(   r*   r,   r-   r/   r1   r3   r4   r6   r7   r   r   r   r   r      s(   
r   c                   @   s”   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zd"dd„Z	dd„ Z
dd„ Zdd„ Zejrpdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ ZdS )#ÚWeakInstanceDictc                 C   s&   | j | }| ¡ }|d kr"t|ƒ‚|S r   ©r   ÚobjÚKeyError©r   r   r   Úor   r   r   Ú__getitem__[   s
    
zWeakInstanceDict.__getitem__c                 C   sL   z(|| j kr | j | }| ¡ }nW dS W n tk
r>   Y dS X |d k	S d S ©NFr<   r?   r   r   r   Ú__contains__b   s    



zWeakInstanceDict.__contains__c                 C   s@   |j | jkr8z| j|j  |kW S  tk
r4   Y dS X ndS d S rB   )r   r   r>   r   r   r   r   Úcontains_staten   s    
zWeakInstanceDict.contains_statec                 C   sj   |j | jkrLz| j|j  }W n tk
r0   Y qPX ||k	rF|  |¡ qPd S nd }|| j|j < |  |¡ |S r   )r   r   r>   r'   r%   )r   r   Úexistingr   r   r   r   w   s    
zWeakInstanceDict.replacec                 C   s„   |j }|| jkrlz| j| }W n tk
r2   Y n:X ||k	rh| ¡ }|d k	rlt dt |¡|j f ¡‚ndS || j|< |  |¡ dS )NzZCan't attach instance %s; another instance with key %s is already present in this session.FT)	r   r   r>   r=   Úsa_excÚInvalidRequestErrorÚorm_utilÚ	state_strr%   )r   r   r   Zexisting_stater@   r   r   r   r   Š   s$    
ýÿ

zWeakInstanceDict.addc                 C   s   || j |< | j|_d S r   )r   r   r#   r   r   r   r   r   £   s    
zWeakInstanceDict._add_unpresentNc                 C   sR   || j kr|S z| j | }W n tk
r4   | Y S X | ¡ }|d krJ|S |S d S r   )r   r>   r=   )r   r   r0   r   r@   r   r   r   Úget¨   s    

zWeakInstanceDict.getc                 C   s:   |   ¡ }g }|D ]$}| ¡ }|d k	r| |j|f¡ q|S r   )Ú
all_statesr=   Úappendr   ©r   ÚvaluesÚresultr   r5   r   r   r   Úitems¶   s    zWeakInstanceDict.itemsc                 C   s4   |   ¡ }g }|D ]}| ¡ }|d k	r| |¡ q|S r   )rK   r=   rL   rM   r   r   r   rN   ¿   s    zWeakInstanceDict.valuesc                 C   s   t |  ¡ ƒS r   )Úiterr   r   r   r   r   Ú__iter__É   s    zWeakInstanceDict.__iter__c                 C   s   t |  ¡ ƒS r   )rQ   rP   r   r   r   r   Ú	iteritemsÎ   s    zWeakInstanceDict.iteritemsc                 C   s   t |  ¡ ƒS r   )rQ   rN   r   r   r   r   Ú
itervaluesÑ   s    zWeakInstanceDict.itervaluesc                 C   s"   t jr| j ¡ S t| j ¡ ƒS d S r   )r   Úpy2kr   rN   Úlistr   r   r   r   rK   Ô   s    
zWeakInstanceDict.all_statesc                 C   sB   z| j |j }W n tk
r$   Y nX ||kr>| j  |jd ¡ d S r   )r   r   r>   r/   ©r   r   Ústr   r   r   Ú_fast_discardÚ   s    zWeakInstanceDict._fast_discardc                 C   s   |   |¡ d S r   )Úsafe_discardr   r   r   r   r&   æ   s    zWeakInstanceDict.discardc                 C   sX   |j | jkrTz| j|j  }W n tk
r0   Y n$X ||krT| j |j d ¡ |  |¡ d S r   )r   r   r>   r/   r'   rW   r   r   r   rZ   é   s    zWeakInstanceDict.safe_discard)N)r8   r9   r:   rA   rC   rD   r   r   r   rJ   rP   rN   rR   r   rU   rS   rT   rK   rY   r&   rZ   r   r   r   r   r;   Z   s"   	
	
r;   c                 C   s   t jdt | ¡ dd�‚d S )Nz‚Object %s cannot be converted to 'persistent' state, as this identity map is no longer valid.  Has the owning Session been closed?Zlkrp)Úcode)rF   rG   rH   rI   )r   r   r   r   r   r   ö   s    þür   )
r   Ú r   rH   r   rF   Úobjectr   r;   r   r   r   r   r   Ú<module>   s   K 