
­­­­­­­­­­­­­­­­­­
<!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   