3 ^@sdddlZddlmZmZddlmZedddgZGdddZGd d d eZGd d d eZ dS) N)ABCabstractmethod) namedtupleZ modified_itemleftrightc@sneZdZdZddZeddZejddZeddZejd dZd d Z e d d Z e dddZ dS) Differencez&Base class for all policy differences.cCstjt|_||_||_dS)N)loggingZ getLogger__name__log left_policy right_policy)selfr r r"/usr/lib64/python3.6/difference.py__init__s zDifference.__init__cCs|jS)N) _left_policy)r rrrr 'szDifference.left_policycCs$|jjdj|||_|jdS)Nz"Policy diff left policy set to {0})r infoformatr _reset_diff)r policyrrrr +scCs|jS)N) _right_policy)r rrrr 1szDifference.right_policycCs$|jjdj|||_|jdS)Nz#Policy diff right policy set to {0})r rrrr)r rrrrr 5scCstdS)z%Reset diff results on policy changes.N)NotImplementedError)r rrrr>szDifference._reset_diffccs.x(|D] }x|jD]}||VqWqWdS)z4Generator that yields a wrapped, expanded rule list.N)expand)Z rule_listWrapperZunexpanded_ruleZ expanded_rulerrr_expand_generatorBs zDifference._expand_generatorNTc Cst|}t|}||}||}t}t|||d} t|||d} x$t| | D]\}}|j||fqRW|rtdd|Dtdd|Dtdd|DfS|||fSdS)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 )keycss|] }|jVqdS)N)origin).0irrr sz'Difference._set_diff..css|] }|jVqdS)N)r)rrrrrrscss|]\}}|j|jfVqdS)N)r)rrrrrrrsN)setsortedzipadd) rrrZunwrapZ left_itemsZ right_itemsZ added_itemsZ removed_itemsZ matched_itemsZleft_matched_itemsZright_matched_itemsrrr _set_diffLszDifference._set_diff)NT) r __module__ __qualname____doc__rpropertyr setterr r staticmethodrr$rrrrrs    rc@sHeZdZdZdZddZeddZedd Zed d Z d d Z dS)rz/Abstract base class for policy object wrappers.rrcCsdj|t|jS)Nz&<{0.__class__.__name__}(Wrapping {1})>)rreprr)r rrr__repr__szWrapper.__repr__cCsdS)Nr)r rrr__hash__szWrapper.__hash__cCsdS)Nr)r otherrrr__eq__szWrapper.__eq__cCsdS)Nr)r r.rrr__lt__szWrapper.__lt__cCs ||k S)Nr)r r.rrr__ne__szWrapper.__ne__N)rr) r r%r&r' __slots__r,rr-r/r0r1rrrrrs   rc@s4eZdZdZdZddZddZddZd d Zd S) SymbolWrapperz General wrapper for policy symbols, e.g. types, roles to provide a diff-specific equality operation based on its name. namecCs ||_t||_t|j|_dS)N)rstrr4hashr)r Zsymbolrrrrs zSymbolWrapper.__init__cCs|jS)N)r)r rrrr-szSymbolWrapper.__hash__cCs |j|jkS)N)r4)r r.rrrr0szSymbolWrapper.__lt__cCs |j|jkS)N)r4)r r.rrrr/szSymbolWrapper.__eq__N) r r%r&r'r2rr-r0r/rrrrr3s r3) rabcrr collectionsrZmodified_item_recordrrr3rrrrs  k