a qéqeT ã@s¶UddlmZddlmZddlmZmZddlmZddl m Z ddl m Z dd l mZmZdd lmZeeƒZee ed <Gd d „d eƒZe ee dœdd„ZGdd„deƒZdS)é)Ú defaultdict)Úsuppress)Ú NamedTupleÚSeté)ÚNoCommon)ÚObjClassé)ÚDiffResultDescriptor)Ú DifferenceÚ SymbolWrapper)Ú SymbolCacheÚ _class_cachec@s6eZdZUdZeeed<eeed<eeed<dS)ÚModifiedObjClassz/Difference details for a modified object class.Ú added_permsÚ removed_permsÚ matched_permsN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rÚstrÚ__annotations__©rrú;/usr/lib64/python3.9/site-packages/setools/diff/objclass.pyrs   r)Úclass_ÚreturncCsBzt|j|WSty<t|ƒ}|t|j|<|YS0dS)z| Wrap class from the specified policy. This caches results to prevent duplicate wrapper objects in memory. N)rZpolicyÚKeyErrorr )rÚcrrrÚclass_wrapper_factorys  rc@sDeZdZdZedƒZedƒZedƒZddœdd„Zddœdd„Z dS) ÚObjClassDifferencezN Determine the difference in object classes between two policies. Ú diff_classesN)rc Cs|j d |¡¡| dd„|j ¡Dƒdd„|j ¡Dƒ¡\|_|_}t ƒ|_ |D]¬\}}|j }t t ƒ�||jj O}Wdƒn1sŒ0Y|j }t t ƒ�||jj O}Wdƒn1sÆ0Y|j||dd�\}}}|sî|rTt|||ƒ|j |<qTdS)z?Generate the difference in object classes between the policies.zEGenerating class differences from {0.left_policy} to {0.right_policy}css|]}t|ƒVqdS©N©r ©Ú.0rrrrÚ ?óz2ObjClassDifference.diff_classes..css|]}t|ƒVqdSr"r#r$rrrr&@r'NF)Úunwrap)ÚlogÚinfoÚformatZ _set_diffZ left_policyÚclassesZ right_policyÚ added_classesÚremoved_classesÚdictÚmodified_classesZpermsrrÚcommonr) ÚselfZmatched_classesZ left_classZ right_classZ left_permsZ right_permsrrrrrrr!8s0ÿþ  * *þ þzObjClassDifference.diff_classescCs"|j d¡d|_d|_d|_dS)z%Reset diff results on policy changes.z"Resetting object class differencesN)r)Údebugr-r.r0)r2rrrÚ _reset_diff\s zObjClassDifference._reset_diff) rrrrr r-r.r0r!r4rrrrr -s $r N)Ú collectionsrÚ contextlibrÚtypingrrÚ exceptionrZ policyreprZ descriptorsr Ú differencer r r r/rrrrr rrrrÚs