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