
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
í«„^j  ã               @   sx   d dl mZmZ d dlmZ ddlmZ ddlmZ ddl	m
Z
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)Úsuppressé   )ÚNoCommoné   )ÚDiffResultDescriptor)Ú
DifferenceÚSymbolWrapperZmodified_classÚadded_permsÚremoved_permsÚmatched_permsc             C   s>   yt | j |  S  tk
r8   t| ƒ}|t | j | < |S X dS )z|
    Wrap class from the specified policy.

    This caches results to prevent duplicate wrapper
    objects in memory.
    N)Ú_class_cacheZpolicyÚKeyErrorr
   )Zclass_Úc© r   ú /usr/lib64/python3.6/objclass.pyÚclass_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 )ÚObjClassDifferencezN
    Determine the difference in object classes
    between two policies.
    Údiff_classesc       	      C   sâ   | j jdj| ƒƒ | jdd„ | jjƒ D ƒdd„ | jjƒ D ƒƒ\| _| _}t	ƒ | _
xŒ|D ]„\}}|j}ttƒ� ||jjO }W dQ R X |j}ttƒ� ||jjO }W dQ R X | j||dd�\}}}|sÈ|rVt|||ƒ| j
|< qVW dS )z?Generate the difference in object classes between the policies.zEGenerating class differences from {0.left_policy} to {0.right_policy}c             s   s   | ]}t |ƒV  qd S )N)r
   )Ú.0r   r   r   r   ú	<genexpr>F   s    z2ObjClassDifference.diff_classes.<locals>.<genexpr>c             s   s   | ]}t |ƒV  qd S )N)r
   )r   r   r   r   r   r   G   s    NF)Zunwrap)ÚlogÚinfoÚformatZ	_set_diffZleft_policyÚclassesZright_policyÚadded_classesÚremoved_classesÚdictÚmodified_classesZpermsr   r   ÚcommonÚmodified_classes_record)	ÚselfZmatched_classesZ
left_classZright_classZ
left_permsZright_permsr   r   r   r   r   r   r   ?   s(     

zObjClassDifference.diff_classesc             C   s"   | j jdƒ d| _d| _d| _dS )z%Reset diff results on policy changes.z"Resetting object class differencesN)r   Údebugr   r   r   )r"   r   r   r   Ú_reset_diffc   s    zObjClassDifference._reset_diffN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r$   r   r   r   r   r   4   s   $r   N)Úcollectionsr   r   Ú
contextlibr   Z	exceptionr   Zdescriptorsr   Ú
differencer	   r
   r!   r   r   r   r   r   r   r   r   Ú<module>   s   