HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/env/lib/python3.10/site-packages/bouncer/__pycache__/models.cpython-310.pyc
o

7
<S��@stddlTddlZddlZejddkZerefZnefZdd�ZGdd�de	�Z
Gdd	�d	e�ZGd
d�de	�Z
dS)�)�*N�cCst|ttf�r	|S|gS�N)�
isinstance�list�tuple)�list_or_single�r	�G/home/arjun/projects/env/lib/python3.10/site-packages/bouncer/models.py�listify
src@sxeZdZddd�Zdd�Zdd�Zedd	��Zejd
d	��Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�RuleNcKsh||_t|�|_t|�|_d|_|durt|�dkrtd��|dur'||_dSt|�dkr2||_dSdS)Nrz;cannot provide both a condition method and hash -- pick one)�
base_behaviorr�actions�subjects�
conditions�len�	TypeError)�selfr
�action�subjectr�conditions_hashr	r	r
�__init__s



�z
Rule.__init__cC�d|j|jfS�Nz%s(%r)��	__class__�__dict__�rr	r	r
�__repr__"�z
Rule.__repr__cCs|�|�o	|�|�Sr)�matches_action�matches_subject�rrrr	r	r
�is_relavant&szRule.is_relavantcC�|jSr��_expanded_actionsrr	r	r
�expanded_actions+�zRule.expanded_actionscC�
||_dSrr%�r�valuer	r	r
r'/�
cCst|jvp	||jvSr)�MANAGEr')rrr	r	r
r 3szRule.matches_actioncCst|jvp||jvp|�|�Sr)�ALLr�matches_subject_class�rrr	r	r
r!6szRule.matches_subjectcCs@|jdurdSt�|�rdSt|jt�r|�||�S|�||�S)NT)r�inspect�isclassr�dict�matches_dict_conditions�matches_function_conditionsr"r	r	r
�matches_conditions:s

zRule.matches_conditionscst��fdd��jD��S)Nc3s$�|]
}���|�j|�VqdSr)�matches_hash_conditionr)�.0�keyr0r	r
�	<genexpr>Gs�"z/Rule.matches_dict_conditions.<locals>.<genexpr>)�allrr"r	r0r
r4FszRule.matches_dict_conditionscCst||�|kSr)�getattr)rrr9r+r	r	r
r7I�zRule.matches_hash_conditioncCs
|�|�Sr)rr"r	r	r
r5Ls
z Rule.matches_function_conditionscCsr|jD]3}t�|�rt�|�rt||�St||�St|t�r6t�|�r.|j|kS|jj|kSqdS)z}
        subject can be either Classes or instances of classes
        self.subjects can either be string or Classes
        F)rr1r2�
issubclassr�string_types�__name__r)rr�subr	r	r
r/Os




�zRule.matches_subject_classr)r@�
__module__�__qualname__rrr#�propertyr'�setterr r!r6r4r7r5r/r	r	r	r
rs



rcs,eZdZ�fdd�ZeZ�fdd�Z�ZS)�RuleListc�`t|�dkrt|dt�r|d}tt|��|�dStdg|�Ri|��}tt|��|�dS)N�rT�rrr�superrF�append�r�item_description_or_rule�kwargs�item�rr	r
rKd�
zRuleList.appendcrG)NrHrFrIrLrPr	r
�cannot�rQzRuleList.cannot)r@rBrCrK�canrR�
__classcell__r	r	rPr
rFcsrFc@s~eZdZddd�Zdd�Zedd��Zejdd��Zd	d
�Zdd�Z	d
d�Z
dd�Zedd��Zejdd��Zedd��Z
dS)�AbilityNcCs@ddlm}t�|_||_|j|_|dur||_dS|�|_dS)NrH)�get_authorization_method)�rVrF�rules�user�default_alias_actions�_aliased_actions�authorization_method)rrYr\rVr	r	r
r�s
zAbility.__init__cCrrrrr	r	r
r�rzAbility.__repr__cCr$r)�_authorization_methodrr	r	r
r\�r(zAbility.authorization_methodcCs(||_|jdur|�|j|j�dSdSr)r]rYrXr*r	r	r
r\�s
�cs2��fdd�|����D�}|r|d}|jSdS)Ncsg|]
}|����r|�qSr	)r6)r8�rule�rrr	r
�
<listcomp>�szAbility.can.<locals>.<listcomp>rF)�relevant_rules_for_matchr
)rrr�matches�matchr	r_r
rS�s
zAbility.cancCs|�||�Sr)rSr"r	r	r
rR�r=zAbility.cannotcCsBg}|jD]}|�|j�|_|�||�r|�|�q|ddd�S)N���)rX�expand_actionsrr'r#rK)rrr�matching_rulesr^r	r	r
ra�s

�z Ability.relevant_rules_for_matchcCsTt�}|D]"}||jvr"|�|�|�|j|�D]}|�|�qq|�|�q|S)z�Accepts an array of actions and returns an array of actions which match.
        This should be called before "matches?" and other checking methods since they
        rely on the actions to be expanded.)r�aliased_actionsrKre)rr�resultsrrOr	r	r
re�s

�zAbility.expand_actionscCr$r�r[rr	r	r
rg�r(zAbility.aliased_actionscCr)rrir*r	r	r
rg�r,cCstttgttgttgiSr)�READ�INDEX�SHOW�CREATE�NEW�UPDATE�EDITrr	r	r
rZ�s�zAbility.default_alias_actionsr)r@rBrCrrrDr\rErSrRrarergrZr	r	r	r
rU�s"




rU)�bouncer.constantsr1�sys�version_info�PY3�strr?�
basestringr�objectrrrFrUr	r	r	r
�<module>sO)