3
í«„^Ö ã @ sl d dl mZ ddlmZ ddlmZ ddlmZmZ edddd d
dgƒZ G dd
„ d
eƒZ
G dd„ deƒZdS )é )Ú
namedtupleé )ÚContextWrapper)ÚDiffResultDescriptor)Ú
DifferenceÚWrapperZmodified_netifconZruleÚ
added_contextÚremoved_contextÚadded_packetÚremoved_packetc @ s8 e Zd ZdZedƒZedƒZedƒZdd„ Zdd„ Z dS )ÚNetifconsDifferencez;Determine the difference in netifcons between two policies.Údiff_netifconsc C sØ | j jdj| ƒƒ | jdd„ | jjƒ D ƒdd„ | jjƒ D ƒƒ\| _| _}g | _ x„|D ]|\}}t
|jƒt
|jƒkr~|j}|j}nd}d}t
|jƒt
|jƒkr¨|j}|j}nd}d}|s¸|rT| j j
t|||||ƒƒ qTW dS )z:Generate the difference in netifcons between the policies.zHGenerating netifcon differences from {0.left_policy} to {0.right_policy}c s s | ]}t |ƒV qd S )N)ÚNetifconWrapper)Ú.0Ún© r ú /usr/lib64/python3.6/netifcon.pyú 0 s z5NetifconsDifference.diff_netifcons..c s s | ]}t |ƒV qd S )N)r )r r r r r r 1 s N)ÚlogÚinfoÚformatZ _set_diffZleft_policyZ netifconsZright_policyÚadded_netifconsÚremoved_netifconsÚmodified_netifconsr ÚcontextZpacketÚappendÚmodified_netifcon_record)ÚselfZmatched_netifconsZ
left_netifconZright_netifconr r r r
r r r r
) s(
z"NetifconsDifference.diff_netifconsc C s" | j jdƒ d| _d| _d| _dS )z%Reset diff results on policy changes.zResetting netifcon differencesN)r Údebugr r r )r r r r Ú_reset_diffN s zNetifconsDifference._reset_diffN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r r r r r
r r r r r r ! s %r c @ s4 e Zd ZdZdZdd„ Zdd„ Zdd„ Zd d
„ ZdS )r z+Wrap netifcon statements for diff purposes.Únetifc C s || _ |j| _t|ƒ| _d S )N)Úoriginr$ ÚhashÚkey)r Zoconr r r Ú__init__\ s zNetifconWrapper.__init__c C s | j S )N)r' )r r r r Ú__hash__a s zNetifconWrapper.__hash__c C s | j |j k S )N)r$ )r Úotherr r r Ú__lt__d s zNetifconWrapper.__lt__c C s | j |j kS )N)r$ )r r* r r r Ú__eq__g s zNetifconWrapper.__eq__N) r r! r" r# Ú __slots__r( r) r+ r, r r r r r V s r N)Úcollectionsr r r Zdescriptorsr Ú
differencer r r r r r r r r Ú s 5