a
    }h                     @   s   d dl Z d dlZd dlmZmZ d dlmZmZ d dlm	Z	m
Z
 e  ZG dd deZG dd deed	Zd
d Zdd ZedejZdS )    N)AbstractUserRoleRolesClassRegister)camelToSnakesnake_to_title)FALSE_NIStatec                       s"   e Zd Zed fddZ  ZS )BaseRoleMetaClass)attrsc           	   	      s  | dt| | dd | dtt|dd | d|d  | dd | d	d
 | dd
 | di  | dttd d  t | |||}|j	 D ]\}}t
||j|< qi  t|D ]b}t|dr|j	 D ]H\}}|d u r
 |d  q|jr|jr*|js*|d
n| |< qqt fdd|j	 D }|rbt||  |j tdd  	 D   |_|S )N	role_nameselectable_roleTverbose_nameZRole verbose_name_shortpropagate_permissionsgrant_all_permissionsFfalse_all_permissionsavailable_permissionsorder
   i  c                 3   s0   | ](\}}|d ur|j r| vr|tfV  qd S N)Zpropagatabler   .0permission_namestater    NC:\Users\Administrator\Downloads\futplus_django\customrolepermissions\roles.py	<genexpr>,   s   z,BaseRoleMetaClass.__new__.<locals>.<genexpr>c                 s   s"   | ]\}}|d ur||fV  qd S r   r   r   r   r   r   r   7   s   )
setdefaultr   r   replacenext_creation_countersuper__new__r   itemsr   	normalizereversedhasattrpopinheritabler   grantZ
with_valuedict#_update_bases_available_permissionsupdate)	mcsnamebasesr	   Znew_clsr   r   base$subclass_extra_available_permissions	__class__r   r   r#      s@    



	zBaseRoleMetaClass.__new__)__name__
__module____qualname__r+   r#   __classcell__r   r   r3   r   r      s   r   c                   @   s    e Zd ZdZdZdZdZi ZdS )BaseRoleFTN)r5   r6   r7   r   r   r   r   r   r   r   r   r   r9   D   s
   r9   )	metaclassc                 C   sx   t | ddsd S | jD ]\}t|dr| D ]:\}}||jvr,|jr\|dd|j|< q,||j|< q,t|| qd S )Nr   Tr   F)	getattr	__bases__r'   r$   r   r   Z
with_grantZwith_inheritabler,   )clsr2   r1   r   r   r   r   r   r,   L   s    


r,   c                 C   sL   t | j| jd| j t| j dd dD ]\}}t d|d| q*t   d S )Nz    c                 S   s(   | d j  | d j | d j | d fS )N   r   )r*   r)   value)itemr   r   r   <lambda>`       z(print_role_permissions.<locals>.<lambda>)key	:)printr5   r
   r   sortedr   r$   )roler   r   r   r   r   print_role_permissions\   s    rI   a  
    ^
        (?P<section>[a-z]+(?:_[a-z0-9]+)*(?<!_read)(?<!_create)(?<!_update))
        (?:__
           (?P<action>create|read|update|delete|manage)
           (?:__
               (?P<relevance>all|rel|own)
           )?  # zero or one
        )?  # zero or one
    $
    )	itertoolsrerolepermissions.rolesr   r   rolepermissions.utilsr   r   customrolepermissions.statesr   r   countr!   r   r9   r,   rI   compileXZpermission_name_rer   r   r   r   <module>   s   6

