B
    @Db                 @   s0   G d d de ZG dd de Ze Ze ZdS )c               @   s.   e Zd Zdd ZdddZdd Zdd	 Zd
S )ZKDispatcherc             C   s   i | _ i | _d S )N)	_registry_weights)self r   1G:\easytimepro\master/mysite/admin\dispatchers.py__init__   s    zZKDispatcher.__init__   c             C   s   t |stdt|tr |g}x~|D ]v}| |}||krDtd| |}|| || ttt||dd d \}}t	|| j
|< t	|| j|< q&W dS )a
  
        Register the plug to publisher, when trigger will run each plugs
        :param publisher_or_iterable: publisher name or list/tuple/set
        :param subscriber: subscriber
        :param weight: weight to define the running order
        :return:
        zInvalid FunctionzDuplicate Functionc             S   s   | d S )N    r   )xr   r   r   <lambda>       z#ZKDispatcher.take.<locals>.<lambda>)keyN)callable	Exception
isinstancestrget_subscribersget_weightsappendzipsortedlistr   r   )r   Zpublisher_or_iterableZ
subscriberZweight	publisherZsubscribersZweightsr   r   r   take   s    





zZKDispatcher.takec             C   s   | j |g S )N)r   get)r   r   r   r   r   r   "   s    zZKDispatcher.get_weightsc             C   s   | j |g S )N)r   r   )r   r   r   r   r   r   %   s    zZKDispatcher.get_subscribersN)r   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r      s   
r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )PermissionDispatcherc             C   s
   g | _ d S )N)r   )r   r   r   r   r   +   s    zPermissionDispatcher.__init__c             C   s,   ddl m} t||s|g}| j| d S )Nr	   )Iterable)collectionsr   r   r   extend)r   Zitem_or_iterabler   r   r   r   register.   s    
zPermissionDispatcher.registerc             C   s   | j S )N)r   )r   r   r   r   get_permissions4   s    z$PermissionDispatcher.get_permissionsN)r   r   r   r   r"   r#   r   r   r   r   r   )   s   r   N)objectr   r   Zno_model_permissionsZzk_dispatcherr   r   r   r   <module>   s   $