3 ^ @shddlmZddlmZddlmZddlmZmZedddd gZ Gd d d eZ Gd d d eZ dS)) namedtuple)ContextWrapper)DiffResultDescriptor) DifferenceWrapperZmodified_nodeconZruleZ added_contextZremoved_contextc@s8eZdZdZedZedZedZddZddZ dS)NodeconsDifferencez:Determine the difference in nodecons between two policies. diff_nodeconscCs|jjdj||jdd|jjDdd|jjD\|_|_}g|_ x<|D]4\}}t |j t |j krT|j j t ||j |j qTWdS)z9Generate the difference in nodecons between the policies.zGGenerating nodecon differences from {0.left_policy} to {0.right_policy}css|]}t|VqdS)N)NodeconWrapper).0nr /usr/lib64/python3.6/nodecon.py /sz3NodeconsDifference.diff_nodecons..css|]}t|VqdS)N)r )r r r r rr0sN)loginfoformatZ _set_diffZ left_policyZnodeconsZ right_policyadded_nodeconsremoved_nodeconsmodified_nodeconsrcontextappendmodified_nodecon_record)selfZmatched_nodeconsZ left_nodeconZ right_nodeconr r rr (s   z NodeconsDifference.diff_nodeconscCs"|jjdd|_d|_d|_dS)z%Reset diff results on policy changes.zResetting nodecon differencesN)rdebugrrr)rr r r _reset_diff?s zNodeconsDifference._reset_diffN) __name__ __module__ __qualname____doc__rrrrr rr r r rr s rc@s4eZdZdZd ZddZddZdd Zd d Zd S)r z*Wrap nodecon statements for diff purposes. ip_versionnetworkcCs$||_|j|_|j|_t||_dS)N)originr r!hashkey)rZoconr r r__init__MszNodeconWrapper.__init__cCs|jS)N)r$)rr r r__hash__SszNodeconWrapper.__hash__cCs |j|jkS)N)r")rotherr r r__lt__VszNodeconWrapper.__lt__cCs|j|jko|j|jkS)N)r r!)rr'r r r__eq__Ys zNodeconWrapper.__eq__N)r r!) rrrr __slots__r%r&r(r)r r r rr Gs r N) collectionsrrrZ descriptorsr differencerrrrr r r r rs   '