a
    }h                     @   s   i Z G d d deZedddZedddZeddddZedZedZedZ	e
dZe
dZe
dZe	
dZdS )c                       s   e Zd ZdZddddeeeed fddZddddeeeed fdd	Zd
d Zdd Zdd Z	dd Z
dd Zdd Zedd Zedd Zedd Zedd Zed ddZ  ZS )!State)Z__valueZ__grantZ__inheritableZ__propagatableFT)grantinheritablepropagatablevaluer   r   r   c          	         sH   ||||f}t |}|d u rDtt| j| g|R i |}|t |< |S N)_STATE_REGISTRYgetsuperr   __new__)	clsr   r   r   r   argskwargskeyinstance	__class__ OC:\Users\Administrator\Downloads\futplus_django\customrolepermissions\states.pyr   	   s    
zState.__new__c                   s>   t  j|i | |r"|s"td|| _|| _|| _|| _d S )Nz#grant is True but value is not True)r
   __init__
ValueError_State__value_State__grant_State__inheritable_State__propagatable)selfr   r   r   r   r   r   r   r   r   r      s    zState.__init__c                 C   s   | j S r   r   r   r   r   r   __bool__   s    zState.__bool__c                 C   sH   | j rd}n| jrd}nd}| jr&dnd| jr2dnd }d| | d	S )
NGRANTTrueFalsez+Iz-Iz+Pz-P[])r   r   r   r   )r   textflagsr   r   r   __repr__!   s    zState.__repr__c                 C   s   | j || jo|| j| jdS Nr   )r   r   r   r   )r   r   r   r   r   
with_value+   s    zState.with_valuec                 C   s   | j | jp||| j| jdS r'   )r   r   r   r   )r   r   r   r   r   
with_grant3   s    zState.with_grantc                 C   s   | j | j| j|| jdS r'   )r   r   r   r   )r   r   r   r   r   with_inheritable;   s    zState.with_inheritablec                 C   s   | j | j| j| j|dS r'   )r   r   r   r   )r   r   r   r   r   with_propagatableC   s    zState.with_propagatablec                 C   s   | j S r   r   r   r   r   r   r   K   s    zState.valuec                 C   s   | j S r   )r   r   r   r   r   r   O   s    zState.grantc                 C   s   | j S r   )r   r   r   r   r   r   S   s    zState.inheritablec                 C   s   | j S r   )r   r   r   r   r   r   W   s    zState.propagatablec                 C   sF   t || r |du r|dS |S |d u r,d S t |trB| ||dS d S )NFr   )
isinstancer*   bool)r   r   r   r   r   r   	normalize[   s    


zState.normalize)T)__name__
__module____qualname__	__slots__r.   r   r   r   r&   r(   r)   r*   r+   propertyr   r   r   r   classmethodr/   __classcell__r   r   r   r   r      s2   




r   Tr,   F)r   r   N)r   objectr   TRUEFALSEr   r*   TRUE_NIFALSE_NIZGRANT_NIr+   ZTRUE_NPZFALSE_NPZGRANT_NP
GRANT_NINPr   r   r   r   <module>   s   c





