3
^ @ sd d dl Z d dlmZmZ d dlmZ edddgZG dd dZG d d
d
eZG dd deZ dS )
N)ABCabstractmethod)
namedtupleZ
modified_itemleftrightc @ sn e Zd ZdZdd Zedd Zejdd Zedd Zejd d Zd
d Z e
dd
Ze
dddZdS )
Differencez&Base class for all policy differences.c C s t jt| _|| _|| _d S )N)loggingZ getLogger__name__logleft_policyright_policy)selfr r r "/usr/lib64/python3.6/difference.py__init__ s zDifference.__init__c C s | j S )N)_left_policy)r
r r r r ' s zDifference.left_policyc C s$ | j jdj| || _| j d S )Nz"Policy diff left policy set to {0})r
infoformatr _reset_diff)r
policyr r r r + s c C s | j S )N)
_right_policy)r
r r r r 1 s zDifference.right_policyc C s$ | j jdj| || _| j d S )Nz#Policy diff right policy set to {0})r
r r r r )r
r r r r r 5 s c C s t dS )z%Reset diff results on policy changes.N)NotImplementedError)r
r r r r > s zDifference._reset_diffc c s. x(| D ] }x|j D ]}||V qW qW dS )z4Generator that yields a wrapped, expanded rule list.N)expand)Z rule_listWrapperZunexpanded_ruleZ
expanded_ruler r r _expand_generatorB s
zDifference._expand_generatorNTc C s t | }t |}|| }|| }t }t|| |d} t|| |d}
x$t| |
D ]\} }|j| |f qRW |rt dd |D t dd |D t dd |D fS |||fS dS )a
Standard diff of two sets.
Parameters:
left An iterable
right An iterable
Return:
tuple (added, removed, matched)
added Set of items in right but not left
removed Set of items in left but not right
matched Set of items in both left and right. This is
in the form of tuples with the matching item
from left and right
)keyc s s | ]}|j V qd S )N)origin).0ir r r