o
    Šåg!$  ã                   @  s  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ZddlmZ ddlmZ erlddlmZ ddlmZ eded�Zeded�ZG dd„ dƒZG dd„ deƒZd$d"d#„ZdS )%é    )Úannotations)ÚAny)Úcast)ÚDict)ÚIterable)ÚIterator)ÚList)ÚNoReturn)ÚOptional)ÚSet)ÚTuple)ÚTYPE_CHECKING)ÚTypeVarNé   )Úutilé   )Úexc)Ú_IdentityKeyType)ÚInstanceStateÚ_T)ÚboundÚ_Oc                   @  sü   e Zd ZU ded< ded< ded< dCd	d
„ZdCdd„ZdDdd„ZdEdd„ZdFdd„ZdGdd„Z	dHdd„Z
	dIdJd"d#„ZdKd%d&„ZdLd(d)„ZdMd+d,„ZdNd.d/„ZdEd0d1„ZdGd2d3„ZdOd4d5„ZdGd6d7„ZdGd8d9„ZdPd:d;„ZdQd<d=„ZdFd>d?„ZdRdAdB„ZdS )SÚIdentityMapzweakref.ref[IdentityMap]Ú_wrz Dict[_IdentityKeyType[Any], Any]Ú_dictúSet[InstanceState[Any]]Ú	_modifiedÚreturnÚNonec                 C  s   i | _ tƒ | _t | ¡| _d S ©N)r   Úsetr   ÚweakrefÚrefr   ©Úself© r%   úS/var/www/html/flaskapp/venv/lib/python3.10/site-packages/sqlalchemy/orm/identity.pyÚ__init__+   s   zIdentityMap.__init__c                 C  s
   t | _d S r   )Ú_killedÚ_add_unpresentr#   r%   r%   r&   Ú_kill0   ó   
zIdentityMap._killúList[InstanceState[Any]]c                 C  ó   t ƒ ‚r   ©ÚNotImplementedErrorr#   r%   r%   r&   Ú
all_states3   ó   zIdentityMap.all_statesÚstateúInstanceState[Any]Úboolc                 C  r-   r   r.   ©r$   r2   r%   r%   r&   Úcontains_state6   r1   zIdentityMap.contains_stateÚkeyú_IdentityKeyType[Any]c                 C  r-   r   r.   ©r$   r7   r%   r%   r&   Ú__contains__9   r1   zIdentityMap.__contains__c                 C  r-   r   r.   r5   r%   r%   r&   Úsafe_discard<   r1   zIdentityMap.safe_discardú_IdentityKeyType[_O]r   c                 C  r-   r   r.   r9   r%   r%   r&   Ú__getitem__?   r1   zIdentityMap.__getitem__NÚdefaultúOptional[_O]c                 C  r-   r   r.   )r$   r7   r>   r%   r%   r&   ÚgetB   ó   zIdentityMap.getúOptional[InstanceState[_O]]c                 C  r-   r   r.   r9   r%   r%   r&   Úfast_get_stateG   rA   zIdentityMap.fast_get_stateúIterable[_IdentityKeyType[Any]]c                 C  s
   | j  ¡ S r   )r   Úkeysr#   r%   r%   r&   rE   L   r+   zIdentityMap.keysúIterable[object]c                 C  r-   r   r.   r#   r%   r%   r&   ÚvaluesO   r1   zIdentityMap.valuesúInstanceState[_O]c                 C  r-   r   r.   r5   r%   r%   r&   ÚreplaceR   r1   zIdentityMap.replacec                 C  r-   r   r.   r5   r%   r%   r&   ÚaddU   r1   zIdentityMap.addc                 C  r-   r   r.   r5   r%   r%   r&   Ú_fast_discardX   r1   zIdentityMap._fast_discardc                 C  s   |   |¡ dS )zUoptional inlined form of add() which can assume item isn't present
        in the mapN)rJ   ©r$   r2   r7   r%   r%   r&   r)   [   s   zIdentityMap._add_unpresentc                 C  s"   | j |_|jr| j |¡ d S d S r   )r   Ú_instance_dictÚmodifiedr   rJ   r5   r%   r%   r&   Ú_manage_incoming_stateb   s   ÿz"IdentityMap._manage_incoming_statec                 C  s   |` |jr| j |¡ d S d S r   )rM   rN   r   Údiscardr5   r%   r%   r&   Ú_manage_removed_stateh   s   ÿz!IdentityMap._manage_removed_statec                 C  s   | j S r   )r   r#   r%   r%   r&   Ú_dirty_statesm   r1   zIdentityMap._dirty_statesc                 C  ó
   t | jƒS )z[return True if any InstanceStates present have been marked
        as 'modified'.

        )r4   r   r#   r%   r%   r&   Úcheck_modifiedp   s   
zIdentityMap.check_modifiedc                 C  s   || v S r   r%   r9   r%   r%   r&   Úhas_keyw   s   zIdentityMap.has_keyÚintc                 C  rS   r   )Úlenr   r#   r%   r%   r&   Ú__len__z   r+   zIdentityMap.__len__)r   r   ©r   r,   ©r2   r3   r   r4   ©r7   r8   r   r4   ©r2   r3   r   r   ©r7   r<   r   r   r   ©r7   r<   r>   r?   r   r?   ©r7   r<   r   rB   )r   rD   )r   rF   )r2   rH   r   rB   ©r2   r3   r7   r8   r   r   )r   r   )r   r4   )r   rV   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r'   r*   r0   r6   r:   r;   r=   r@   rC   rE   rG   rI   rJ   rK   r)   rO   rQ   rR   rT   rU   rX   r%   r%   r%   r&   r   %   s4   
 






ÿ











r   c                   @  s°   e Zd ZU ded< d3dd„Zd4dd„Zd5dd„Zd6dd„Zd5dd„Zd7dd„Z	d8dd„Z
	d9d:dd „Zd;d"d#„Zd<d%d&„Zd=d(d)„Zd>d+d,„Zd?d-d.„Zd?d/d0„Zd?d1d2„ZdS )@ÚWeakInstanceDictz/Dict[_IdentityKeyType[Any], InstanceState[Any]]r   r7   r<   r   r   c                 C  s,   t d| j| ƒ}| ¡ }|d u rt|ƒ‚|S ©NrH   )r   r   ÚobjÚKeyError©r$   r7   r2   Úor%   r%   r&   r=   �   s
   zWeakInstanceDict.__getitem__r8   r4   c                 C  sD   z|| j v r| j | }| ¡ }nW dS W |d uS  ty!   Y dS w ©NF)r   rg   rh   ri   r%   r%   r&   r:   ˆ   s   


þýÿzWeakInstanceDict.__contains__r2   r3   c                 C  sJ   |j | jv r#tr|j d usJ ‚z	| j|j  |u W S  ty"   Y dS w dS rk   )r7   r   r   rh   r5   r%   r%   r&   r6   ”   s   ÿzWeakInstanceDict.contains_stateúOptional[InstanceState[Any]]c                 C  s|   |j d usJ ‚|j | jv r/z
| j|j   }}W n ty"   d }Y nw ||ur-|  |¡ nd S d }|| j|j < |  |¡ |S r   )r7   r   rh   rQ   rO   )r$   r2   ÚexistingÚexisting_non_noner%   r%   r&   rI   Ÿ   s   þ
zWeakInstanceDict.replacec                 C  sŽ   |j }|d us	J ‚|| jv r;z| j| }W n	 ty   Y nw ||ur9| ¡ }|d ur8t 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)	r7   r   rh   rg   Úsa_excÚInvalidRequestErrorÚorm_utilÚ	state_strrO   )r$   r2   r7   Úexisting_staterj   r%   r%   r&   rJ   µ   s*   
þýÿÿ

zWeakInstanceDict.addr   c                 C  s   || j |< | j|_d S r   )r   r   rM   rL   r%   r%   r&   r)   Ï   s   
zWeakInstanceDict._add_unpresentrB   c                 C  s   | j  |¡S r   )r   r@   r9   r%   r%   r&   rC   Ö   s   zWeakInstanceDict.fast_get_stateNr>   r?   c                 C  sR   || j vr|S z
td| j | ƒ}W n ty   | Y S w | ¡ }|d u r'|S |S rf   )r   r   rh   rg   )r$   r7   r>   r2   rj   r%   r%   r&   r@   Û   s   
þzWeakInstanceDict.getú6List[Tuple[_IdentityKeyType[Any], InstanceState[Any]]]c                 C  sJ   |   ¡ }g }|D ]}| ¡ }|j}|d usJ ‚|d ur"| ||f¡ q|S r   )r0   rg   r7   Úappend)r$   rG   Úresultr2   Úvaluer7   r%   r%   r&   Úitemsë   s   €zWeakInstanceDict.itemsúList[object]c                 C  s4   |   ¡ }g }|D ]}| ¡ }|d ur| |¡ q|S r   )r0   rg   ru   )r$   rG   rv   r2   rw   r%   r%   r&   rG   ö   s   
€zWeakInstanceDict.valuesúIterator[_IdentityKeyType[Any]]c                 C  s   t |  ¡ ƒS r   )ÚiterrE   r#   r%   r%   r&   Ú__iter__   s   zWeakInstanceDict.__iter__r,   c                 C  s   t | j ¡ ƒS r   )Úlistr   rG   r#   r%   r%   r&   r0     ó   zWeakInstanceDict.all_statesc                 C  sT   |j }|d us	J ‚z| j| }W n
 ty   Y d S w ||u r(| j |d ¡ d S d S r   )r7   r   rh   Úpop©r$   r2   r7   Ústr%   r%   r&   rK     s   þÿzWeakInstanceDict._fast_discardc                 C  s   |   |¡ d S r   )r;   r5   r%   r%   r&   rP     r~   zWeakInstanceDict.discardc                 C  sl   |j }|| jv r2|d usJ ‚z| j| }W n
 ty   Y d S w ||u r4| j |d ¡ |  |¡ d S d S d S r   )r7   r   rh   r   rQ   r€   r%   r%   r&   r;     s   
þözWeakInstanceDict.safe_discardr]   r[   rZ   )r2   r3   r   rl   r`   r_   r   r^   )r   rt   )r   ry   )r   rz   rY   r\   )ra   rb   rc   rd   r=   r:   r6   rI   rJ   r)   rC   r@   rx   rG   r|   r0   rK   rP   r;   r%   r%   r%   r&   re   ~   s$   
 






ÿ






re   r2   r3   r7   r8   r   r	   c                 C  s   t jdt | ¡ dd�‚)Nz‚Object %s cannot be converted to 'persistent' state, as this identity map is no longer valid.  Has the owning Session been closed?Úlkrp)Úcode)ro   rp   rq   rr   )r2   r7   r%   r%   r&   r(   &  s   þür(   )r2   r3   r7   r8   r   r	   )Ú
__future__r   Útypingr   r   r   r   r   r   r	   r
   r   r   r   r   r!   Ú r   rq   r   ro   Ú_typingr   r2   r   r   Úobjectr   r   re   r(   r%   r%   r%   r&   Ú<module>   s2   Y )