a qéqe0ã@s°ddlmZddlmZddlmZmZmZddlm Z ddl m Z m Z ddl mZdd lmZdd lmZdd lmZGd d „d eƒZGdd„de ƒZGdd„de eƒZdS)é)Ú defaultdict)Ú NamedTupleé)ÚMLSRuleÚ MLSRuletypeÚRangeé)ÚDiffResultDescriptor)Ú DifferenceÚWrapper)Ú RangeWrapper)Úclass_wrapper_factory)Útype_or_attr_wrapper_factory)ÚRuleListc@s*eZdZUdZeed<eed<eed<dS)ÚModifiedMLSRulez+Difference details for a modified MLS rule.ÚruleZ added_defaultZremoved_defaultN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rÚ__annotations__r©rrú;/usr/lib64/python3.9/site-packages/setools/diff/mlsrules.pyrs rc@s|eZdZUdZedƒZedƒZedƒZdZe e e fe d<dZ e e e fe d<ddœdd„Zddœd d „Zddœd d „ZdS) ÚMLSRulesDifferencez;Determine the difference in MLS rules between two policies.Údiff_range_transitionsNÚ_left_mls_rulesÚ_right_mls_rules)ÚreturncCs²|j d |¡¡|jdus&|jdur.| ¡| | |jtj t ¡| |jtj t ¡¡\}}}g}|D]2\}}t |j ƒt |j ƒkrh|  t||j |j ƒ¡qh||_||_||_dS)zGGenerate the difference in range_transition rules between the policies.zPGenerating range_transition differences from {0.left_policy} to {0.right_policy}N)ÚlogÚinfoÚformatrrÚ_create_mls_rule_listsZ _set_diffZ_expand_generatorrZrange_transitionÚMLSRuleWrapperr ÚdefaultÚappendrÚadded_range_transitionsÚremoved_range_transitionsÚmodified_range_transitions)ÚselfZaddedZremovedZmatchedZmodifiedZ left_ruleZ right_rulerrrr(s2ÿÿÿÿý  þz)MLSRulesDifference.diff_range_transitionscCsŒttƒ|_|j d |¡¡|j ¡D]}|j|j  |¡q&ttƒ|_ |j d |¡¡|j  ¡D]}|j |j  |¡qd|j d¡dS)z$Create rule lists for both policies.z,Building MLS rule lists from {0.left_policy}z-Building MLS rule lists from {0.right_policy}z"Completed building MLS rule lists.N) rÚlistrrÚdebugr Z left_policyZmlsrulesÚruletyper$rZ right_policy©r(rrrrr!Ls  z)MLSRulesDifference._create_mls_rule_listscCs.|j d¡d|_d|_d|_d|_d|_dS)z%Reset diff results on policy changes.zResetting MLS rule differencesN)rr*r%r&r'rr©r(rrrÚ _reset_diff\s  zMLSRulesDifference._reset_diff)rrrrr r%r&r'rrrrrrrr!r.rrrrrs $rc@s<eZdZdZdZeddœdd„Zdd„Zd d „Zd d „Z dS) r"z'Wrap MLS rules to allow set operations.)r+ÚsourceÚtargetÚtclassN)rrcCs8||_t|jƒ|_t|jƒ|_t|jƒ|_t|ƒ|_dS©N)Úoriginrr/r0r r1ÚhashÚkeyr,rrrÚ__init__ns    zMLSRuleWrapper.__init__cCs|jSr2©r5r-rrrÚ__hash__uszMLSRuleWrapper.__hash__cCs |j|jkSr2r7©r(ÚotherrrrÚ__lt__xszMLSRuleWrapper.__lt__cCs$|j|jko"|j|jko"|j|jkSr2)r/r0r1r9rrrÚ__eq__{s   ÿ þzMLSRuleWrapper.__eq__) rrrrÚ __slots__rr6r8r;r<rrrrr"hs r"N)Ú collectionsrÚtypingrZ policyreprrrZ descriptorsr Ú differencer r Zmlsr Zobjclassr Útypesrrrrr"rrrrÚs        L