a qéqe] ã@s|ddlmZddlmZmZddlmZddlmZddl m Z m Z Gdd „d eƒZ Gd d „d e ƒZ Gd d „d e eƒZdS)é)Ú NamedTupleé)ÚContextÚNodeconé)ÚContextWrapper)ÚDiffResultDescriptor)Ú DifferenceÚWrapperc@s*eZdZUdZeed<eed<eed<dS)ÚModifiedNodeconz+Difference details for a modified netifcon.ZruleZ added_contextZremoved_contextN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rÚ__annotations__r©rrú:/usr/lib64/python3.9/site-packages/setools/diff/nodecon.pyr s r c@sDeZdZdZedƒZedƒZedƒZddœdd„Zddœdd„Z dS) ÚNodeconsDifferencez:Determine the difference in nodecons between two policies.Ú diff_nodeconsN)ÚreturncCsŒ|j d |¡¡| dd„|j ¡Dƒdd„|j ¡Dƒ¡\|_|_}g|_ |D]4\}}t |j ƒt |j ƒkrR|j   t ||j |j ƒ¡qRdS)z9Generate the difference in nodecons between the policies.zGGenerating nodecon differences from {0.left_policy} to {0.right_policy}css|]}t|ƒVqdS©N©ÚNodeconWrapper©Ú.0ÚnrrrÚ 'óz3NodeconsDifference.diff_nodecons..css|]}t|ƒVqdSrrrrrrr(rN)ÚlogÚinfoÚformatZ _set_diffZ left_policyZnodeconsZ right_policyÚadded_nodeconsÚremoved_nodeconsÚmodified_nodeconsrÚcontextÚappendr )ÚselfZmatched_nodeconsZ left_nodeconZ right_nodeconrrrr s ÿþ  þz NodeconsDifference.diff_nodeconscCs"|j d¡d|_d|_d|_dS)z%Reset diff results on policy changes.zResetting nodecon differencesN)rÚdebugr!r"r#©r&rrrÚ _reset_diff7s zNodeconsDifference._reset_diff) r r rrrr!r"r#rr)rrrrrs rc@s<eZdZdZdZeddœdd„Zdd„Zd d „Zd d „Z dS) rz*Wrap nodecon statements for diff purposes.©Ú ip_versionÚnetworkN)ÚoconrcCs$||_|j|_|j|_t|ƒ|_dSr)Úoriginr+r,ÚhashÚkey)r&r-rrrÚ__init__EszNodeconWrapper.__init__cCs|jSr)r0r(rrrÚ__hash__KszNodeconWrapper.__hash__cCs |j|jkSr)r.©r&ÚotherrrrÚ__lt__NszNodeconWrapper.__lt__cCs|j|jko|j|jkSrr*r3rrrÚ__eq__Qs  ÿzNodeconWrapper.__eq__) r r rrÚ __slots__rr1r2r5r6rrrrr?s rN)ÚtypingrZ policyreprrr$rZ descriptorsrÚ differencer r r rrrrrrÚs    '