509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
í«„^œ  ã            	   @   s�   d dl mZmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZmZ ddlmZ ed	d
ddddddgƒZeeƒZdd„ ZG dd„ deƒZdS )é    )ÚdefaultdictÚ
namedtupleé   )ÚMLSDisabledé   )ÚDiffResultDescriptor)Ú
DifferenceÚSymbolWrapper)ÚLevelWrapperÚRangeWrapper)Úrole_wrapper_factoryZmodified_userÚadded_rolesÚremoved_rolesÚmatched_rolesÚadded_levelÚremoved_levelÚadded_rangeÚremoved_rangec             C   s>   yt | j |  S  tk
r8   t| ƒ}|t | j | < |S X dS )z|
    Wrap users from the specified policy.

    This caches results to prevent duplicate wrapper
    objects in memory.
    N)Ú_users_cacheZpolicyÚKeyErrorr	   )ÚuserÚr© r   ú/usr/lib64/python3.6/users.pyÚuser_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 )ÚUsersDifferencez7Determine the difference in users between two policies.Ú
diff_usersc             C   s’  | j jdj| ƒƒ | jdd„ | jjƒ D ƒdd„ | jjƒ D ƒƒ\| _| _}t	ƒ | _
�x:|D �]0\}}| jdd„ |jD ƒdd„ |jD ƒƒ\}}}y$t|jƒ}t|jƒ}|j}	|j}
W n$ tk
rÔ   d}d}d}	d}
Y nX y$t|jƒ}t|jƒ}|j}|j}W n& tk
�r    d}d}d}d}Y nX ||k�r6|}|	}nd}d}||k�rR|}|
}nd}d}|�sp|�sp|�sp|rXt|||||||ƒ| j
|< qXW dS )	z6Generate the difference in users between the policies.zDGenerating user differences from {0.left_policy} to {0.right_policy}c             s   s   | ]}t |ƒV  qd S )N)r   )Ú.0r   r   r   r   ú	<genexpr>G   s    z-UsersDifference.diff_users.<locals>.<genexpr>c             s   s   | ]}t |ƒV  qd S )N)r   )r   r   r   r   r   r   H   s    c             s   s   | ]}t |ƒV  qd S )N)r   )r   r   r   r   r   r   R   s    c             s   s   | ]}t |ƒV  qd S )N)r   )r   r   r   r   r   r   S   s    NzNone (MLS Disabled))ÚlogÚinfoÚformatZ	_set_diffZleft_policyZusersZright_policyÚadded_usersÚremoved_usersÚdictÚmodified_usersÚrolesr
   Z	mls_levelr   Z	mls_ranger   Úmodified_users_record)ÚselfZmatched_usersZ	left_userZ
right_userr   r   r   Zleft_level_wrapZleft_range_wrapZ
left_levelZ
left_rangeZright_level_wrapZright_range_wrapZright_levelZright_ranger   r   r   r   r   r   r   r   @   s`     









zUsersDifference.diff_usersc             C   s"   | j jdƒ d| _d| _d| _dS )z%Reset diff results on policy changes.zResetting user differencesN)r   Údebugr"   r#   r%   )r(   r   r   r   Ú_reset_diff‡   s    zUsersDifference._reset_diffN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   r#   r%   r   r*   r   r   r   r   r   8   s   Gr   N)Úcollectionsr   r   Z	exceptionr   Zdescriptorsr   Ú
differencer   r	   Zmlsr
   r   r&   r   r'   r$   r   r   r   r   r   r   r   Ú<module>   s   