
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    SW                     @   sX   d Z ddlmZ G dd deZe Ze Ze Ze Z	e Z
e ZG dd deZdS )z.
Provide django-style hooks for model events.
    )Modelc                   @   sB   e Zd Zdd ZdddZdddZddd	Zd
d Zdd ZdS )Signalc                 C   s   |    d S N)_flushself r   D/opt/alt/python38/lib64/python3.8/site-packages/playhouse/signals.py__init__   s    zSignal.__init__Nc                 C   s@   |p|j }|| jkr0||f| j|< | j| ntd| d S )Nz#receiver named %s already connected)__name__
_receivers_receiver_listappend
ValueError)r   receivernamesenderr   r   r	   connect   s
    

zSignal.connectc                 C   s0   |r
|j }|r$| j|= | j| ntdd S )Nz%a receiver or a name must be provided)r   r   r   remover   )r   r   r   r   r   r	   
disconnect   s    zSignal.disconnectc                    s    fdd}|S )Nc                    s    |   | S r   )r   )fnr   r   r   r   r	   	decorator   s    z"Signal.__call__.<locals>.decoratorr   )r   r   r   r   r   r   r	   __call__   s    zSignal.__call__c           	      O   sX   t |}g }| jD ]@}| j| \}}|d ks6t||r|||||f||f q|S r   )typer   r   
isinstancer   )	r   instanceargskwargsr   Z	responsesr   rsr   r   r	   send"   s    
zSignal.sendc                 C   s   i | _ g | _d S r   )r   r   r   r   r   r	   r   +   s    zSignal._flush)NN)NN)NN)	r   
__module____qualname__r
   r   r   r   r!   r   r   r   r   r	   r      s   

	
	r   c                       s@   e Zd Z fddZ fddZ fddZ fddZ  ZS )	r   c                    s    t t| j|| t|  d S r   )superr   r
   pre_initr!   )r   r   r   	__class__r   r	   r
   9   s    zModel.__init__c                    s   t t|   t|  d S r   )r$   r   prepared	post_initr!   r   r&   r   r	   r(   =   s    zModel.preparedc                    sP   |   }|ddpt| }tj| |d tt| j||}tj| |d |S )NZforce_insertF)created)	Z_get_pk_valuegetboolpre_saver!   r$   r   save	post_save)r   r   r   Zpk_valuer*   retr&   r   r	   r.   A   s    z
Model.savec                    s*   t |  tt| j||}t|  |S r   )
pre_deleter!   r$   r   delete_instancepost_delete)r   r   r   r0   r&   r   r	   r2   I   s    

zModel.delete_instance)r   r"   r#   r
   r(   r.   r2   __classcell__r   r   r&   r	   r   8   s   r   N)__doc__Zpeeweer   Z_Modelobjectr   r-   r/   r1   r3   r%   r)   r   r   r   r	   <module>   s   )