509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
í«„^Ë  ã               @   sl   d dl mZmZ ddlmZ ddlmZmZ ddlm	Z	 edddd	gƒZ
eeƒZd
d„ ZG dd„ deƒZdS )é    )ÚdefaultdictÚ
namedtupleé   )ÚDiffResultDescriptor)Ú
DifferenceÚSymbolWrapper)Útype_wrapper_factoryZmodified_roleÚadded_typesÚremoved_typesÚmatched_typesc             C   s>   yt | j |  S  tk
r8   t| ƒ}|t | j | < |S X dS )z|
    Wrap roles from the specified policy.

    This caches results to prevent duplicate wrapper
    objects in memory.
    N)Ú_roles_cacheZpolicyÚKeyErrorr   )ZroleÚr© r   ú/usr/lib64/python3.6/roles.pyÚrole_wrapper_factory"   s    r   c               @   s8   e Zd ZdZedƒZedƒZedƒZdd„ Zdd„ Z	dS )ÚRolesDifferencez7Determine the difference in roles between two policies.Ú
diff_rolesc             C   s®   | j jdj| ƒƒ | jdd„ | jjƒ D ƒdd„ | jjƒ D ƒƒ\| _| _}t	ƒ | _
xX|D ]P\}}| jdd„ |jƒ D ƒdd„ |jƒ D ƒƒ\}}}|s”|rVt|||ƒ| j
|< qVW dS )z6Generate the difference in roles between the policies.zDGenerating role differences from {0.left_policy} to {0.right_policy}c             s   s   | ]}t |ƒV  qd S )N)r   )Ú.0r   r   r   r   ú	<genexpr>@   s    z-RolesDifference.diff_roles.<locals>.<genexpr>c             s   s   | ]}t |ƒV  qd S )N)r   )r   r   r   r   r   r   A   s    c             s   s   | ]}t |ƒV  qd S )N)r   )r   Útr   r   r   r   J   s    c             s   s   | ]}t |ƒV  qd S )N)r   )r   r   r   r   r   r   K   s    N)ÚlogÚinfoÚformatZ	_set_diffZleft_policyZrolesZright_policyÚadded_rolesÚremoved_rolesÚdictÚmodified_rolesÚtypesÚmodified_roles_record)ÚselfZmatched_rolesZ	left_roleZ
right_roler	   r
   r   r   r   r   r   9   s     zRolesDifference.diff_rolesc             C   s"   | j jdƒ d| _d| _d| _dS )z%Reset diff results on policy changes.zResetting role differencesN)r   Údebugr   r   r   )r    r   r   r   Ú_reset_diffU   s    zRolesDifference._reset_diffN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r"   r   r   r   r   r   1   s   r   N)Úcollectionsr   r   Zdescriptorsr   Ú
differencer   r   r   r   r   r   r   r   r   r   r   r   r   Ú<module>   s   