a qqep@sddlZddlmZmZddlmZmZmZddlm Z m Z m Z GdddZ ede d Z Gd d d eee Zed e d ZGd ddeeZdS)N)ABCabstractmethod)GenericIterableTypeVar) PolicyObject PolicySymbol SELinuxPolicyc@seZdZdZeeddddZeddZejddZed d Z e jd d Z dd d dZ e e e dddZ e dddZdS) Differencez&Base class for all policy differences.N) left_policy right_policyreturncCstt|_||_||_dSN)loggingZ getLogger__name__logr r )selfr r r=/usr/lib64/python3.9/site-packages/setools/diff/difference.py__init__s zDifference.__init__cCs|jSr) _left_policyrrrrr szDifference.left_policycCs$|jd|||_|dS)Nz"Policy diff left policy set to {0})rinfoformatr _reset_diffrZpolicyrrrr scCs|jSr) _right_policyrrrrr #szDifference.right_policycCs$|jd|||_|dS)Nz#Policy diff right policy set to {0})rrrrrrrrrr 's)rcCstdS)z%Reset diff results on policy changes.N)NotImplementedErrorrrrrr0szDifference._reset_diff) rule_listrccs&|D]}|D]}||VqqdS)z4Generator that yields a wrapped, expanded rule list.N)expand)rZ wrapper_classZunexpanded_ruleZ expanded_rulerrr_expand_generator4s zDifference._expand_generatorTc Cst|}t|}||}||}t}t|||d} t|||d} t| | D]\}}|||fqP|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|] }|jVqdSrorigin.0irrr qz'Difference._set_diff..css|] }|jVqdSrr$r&rrrr)rr*css|]\}}|j|jfVqdSrr$)r'leftrightrrrr)sr*N)setsortedzipadd) r+r,r#unwrapZ left_itemsZ right_itemsZ added_itemsZ removed_itemsZ matched_itemsZleft_matched_itemsZright_matched_itemsrrr _set_diff>szDifference._set_diff)NT)r __module__ __qualname____doc__r rpropertyr setterr r staticmethodrr!r2rrrrr s     r T)boundc@sleZdZUdZeed<eed<dZeeddddZd d Z e d d Z e d dZ e ddZ ddZdS)Wrapperz/Abstract base class for policy object wrappers.r%r#r%r#N)r%r#rcCs||_||_dSrr<)rr%r#rrrrszWrapper.__init__cCsd|t|jS)Nz&<{0.__class__.__name__}(Wrapping {1})>)rreprr%rrrr__repr__szWrapper.__repr__cCsdSrrrrrr__hash__szWrapper.__hash__cCsdSrrrotherrrr__eq__szWrapper.__eq__cCsdSrrr@rrr__lt__szWrapper.__lt__cCs ||k Srrr@rrr__ne__szWrapper.__ne__)rr3r4r5r9__annotations__int __slots__rr>rr?rBrCrDrrrrr;{s    r;ScsNeZdZUdZeed<dZeddfdd Zdd Z d d Z d d Z Z S) SymbolWrapperz General wrapper for policy symbols, e.g. types, roles to provide a diff-specific equality operation based on its name. namerJN)symbolrcs t|t|j|j|_dSr)superrhashrJ)rrL __class__rrrszSymbolWrapper.__init__cCs|jSrr"rrrrr?szSymbolWrapper.__hash__cCs |j|jkSrrKr@rrrrCszSymbolWrapper.__lt__cCs |j|jkSrrKr@rrrrBszSymbolWrapper.__eq__) rr3r4r5strrErGrHrr?rCrB __classcell__rrrOrrIs rI)rabcrrtypingrrrZ policyreprr r r r9r;rHrIrrrrsk !