
    >Tf                     f    d dl mZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 dZd Zd Zd	 Zd
 ZddZdS )    )settings)apps)Q)gettext_lazy)CONSTRAINT_TOKEN_USER)get_permission_for_modelpermission_is_exemptqs_filter_from_constraintsresolve_permissionresolve_permission_typec                 V    | j         j        } | j         j         d| d| j         j         S )z
    Resolve the named permission for a given model (or instance) and action (e.g. view or add).

    :param model: A model or instance
    :param action: View, add, change, or delete (string)
    ._)_metaconcrete_model	app_label
model_name)modelactions     :/var/www/html/netbox-4.1.3/netbox/utilities/permissions.pyr   r      s4     K&Ek#GGfGGu{/EGGG    c                     	 |                      d          \  }}|                    dd          \  }}n># t          $ r1 t          t          d                              |                     w xY w|||fS )z
    Given a permission name, return the app_label, action, and model_name components. For example, "dcim.view_site"
    returns ("dcim", "view", "site").

    :param name: Permission name in the format <app_label>.<action>_<model>
    r   r      zSInvalid permission name: {name}. Must be in the format <app_label>.<action>_<model>name)splitrsplit
ValueErrorr   format)r   r   codenamer   r   s        r   r   r      s    
"jjoo	8%__S!44

 
 
 
cddkkqukvv
 
 	


 fj((s	   14 ;A/c                     ddl m} t          |           \  }}}	 |j                            ||          }n># |j        $ r1 t          t          d                              |                     w xY w||fS )z
    Given a permission name, return the relevant ObjectType and action. For example, "dcim.view_site" returns
    (Site, "view").

    :param name: Permission name in the format <app_label>.<action>_<model>
    r   )
ObjectType)r   r   z'Unknown app_label/model_name for {name}r   )	core.modelsr"   r   objectsget_by_natural_keyDoesNotExistr   r   r   )r   r"   r   r   r   object_types         r   r   r   0   s     '&&&&&$6t$<$<!IvzY (;;iWa;bb" Y Y YDEELLRVLWWXXXY s	   8 ;A3c                     t          |           \  }}}|dk    r3dt          j        v r||ft          j        vs| d| t          j        v rdS dS )z
    Determine whether a specified permission is exempt from evaluation.

    :param name: Permission name in the format <app_label>.<action>_<model>
    view*r   TF)r   r   EXEMPT_VIEW_PERMISSIONSEXEMPT_EXCLUDE_MODELS)r   r   r   r   s       r   r	   r	   A   sn     %7t$<$<!Ivz 8333J8OW_Wu8u8u '':''8+KKK45r   Nc           	      d   i t          j        d          }                                D ]*\  }}|t          k    rt	          ||          r
|j        |<   +d t                      }| D ]B}|r/|t          di fd|                                D             z  }3t                      c S |S )z
    Construct a Q filter object from an iterable of ObjectPermission constraints.

    Args:
        tokens: A dictionary mapping string tokens to be replaced with a value.
    Nz
users.Userc                     t          |           t          u r t          t          fd|                     S                     | |           S )Nc                 0                         | |           S N)get)vtokenss    r   <lambda>zEqs_filter_from_constraints.<locals>._replace_tokens.<locals>.<lambda>g   s    fjjA&6&6 r   )typelistmapr1   )valuer3   s    `r   _replace_tokensz3qs_filter_from_constraints.<locals>._replace_tokense   sJ    ;;$6666>>???zz%'''r   c                 0    i | ]\  }}| |          S  r;   ).0kr2   r9   r3   s      r   
<dictcomp>z.qs_filter_from_constraints.<locals>.<dictcomp>m   s+    XXXTQ1ooa88XXXr   r;   )r   	get_modelitemsr   
isinstanceidr   )constraintsr3   Usertokenr8   params
constraintr9   s    `     @r   r
   r
   V   s     ~>,''D % %u)))j.E.E)!HF5M( ( (
 SSF!  
 	aYYXXXXXZEUEUEWEWXXXYYYFF 33JJJMr   r0   )django.confr   django.appsr   django.db.modelsr   django.utils.translationr   r   users.constantsr   __all__r   r   r   r	   r
   r;   r   r   <module>rN      s                            6 6 6 6 6 6 1 1 1 1 1 1
H 
H 
H) ) )$  "  *     r   