U
    cc
                     @  s   d dl mZ d dlZd dlZd dlZd dlZd dlm	Z	 d dlm
Z
 d dlmZ ejrbddlmZ e ZedZed	Zd
ddddZddddddZdddddZdddddZdddddZdS )    )annotationsN)current_app)has_app_context)	Namespace   )Sessionzmodels-committedzbefore-models-committedzsa.orm.scoped_sessionNone)sessionreturnc                 C  s\   t jj| dtdd t jj| dtdd t j| dt t j| dt t j| dt d S )NZbefore_flushT)namedZbefore_commitZafter_commitZafter_rollback)saeventlisten_record_ops_before_commit_after_commit_after_rollbackr	    r   H/tmp/pip-unpacked-wheel-q5ixi8hf/flask_sqlalchemy/track_modifications.py_listen    s
    r   r   zt.Any)r	   kwargsr
   c                 K  sx   t  s
d S tjd sd S | jdf| jdf| jdffD ]>\}}|D ]0}t|}|jrZ|j	nt
|}||f| j|< q@q4d S )NSQLALCHEMY_TRACK_MODIFICATIONSinsertupdatedelete)r   r   confignewZdirtyZdeletedr   inspectZhas_identityZidentity_keyid_model_changes)r	   r   targetsZ	operationtargetstatekeyr   r   r   r   (   s    

r   c                 C  sF   t  s
d S t }|jd s d S | jrBt| j }tj||d d S Nr   )changes)	r   r   _get_current_objectr   r    listvaluesbefore_models_committedsendr	   Zappr&   r   r   r   r   :   s    
r   c                 C  sP   t  s
d S t }|jd s d S | jrLt| j }tj||d | j	  d S r%   )
r   r   r'   r   r    r(   r)   models_committedr+   clearr,   r   r   r   r   H   s    
r   c                 C  s   | j   d S )N)r    r.   r   r   r   r   r   W   s    r   )
__future__r   typingtZ
sqlalchemyr   Zsqlalchemy.eventZsqlalchemy.ormZflaskr   r   Zflask.signalsr   TYPE_CHECKINGr	   r   Z_signalssignalr-   r*   r   r   r   r   r   r   r   r   r   <module>   s"   
	
