
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
^4                 @   s   d dl mZmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZ ddlmZ dd	lmZ ed
dddgZG dd deZG dd de	ZdS )    )defaultdict
namedtuple   )MLSRuletype   )DiffResultDescriptor)
DifferenceWrapper)RangeWrapper)class_wrapper_factory)type_or_attr_wrapper_factoryZmodified_mlsruleruleZadded_defaultZremoved_defaultc               @   sP   e Zd ZdZedZedZedZee	Z
ee	Zdd Zdd Zdd Zd	S )
MLSRulesDifferencez;Determine the difference in MLS rules between two policies.diff_range_transitionsc             C   s   | j jdj|  | j s"| j r*| j  | j| j| jtj	 t
| j| jtj	 t
\}}}g }x:|D ]2\}}t|jt|jkrf|jt||j|j qfW || _|| _|| _dS )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format_left_mls_rules_right_mls_rules_create_mls_rule_listsZ	_set_diffZ_expand_generatorr   Zrange_transitionMLSRuleWrapperr
   defaultappendmodified_mlsrule_recordadded_range_transitionsremoved_range_transitionsmodified_range_transitions)selfZaddedZremovedZmatchedZmodifiedZ	left_ruleZ
right_rule r    /usr/lib64/python3.6/mlsrules.pyr   /   s&    z)MLSRulesDifference.diff_range_transitionsc             C   s   | j jdj|  x$| jj D ]}| j|j j| qW | j jdj|  x$| jj D ]}| j	|j j| qVW | j jd dS )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   debugr   Zleft_policyZmlsrulesr   ruletyper   Zright_policyr   )r   r   r   r   r   r   P   s    z)MLSRulesDifference._create_mls_rule_listsc             C   s6   | j jd d| _d| _d| _| jj  | jj  dS )z%Reset diff results on policy changes.zResetting MLS rule differencesN)r   r    r   r   r   r   clearr   )r   r   r   r   _reset_diff^   s    
zMLSRulesDifference._reset_diffN)__name__
__module____qualname____doc__r   r   r   r   r   listr   r   r   r   r#   r   r   r   r   r   #   s   !r   c               @   s4   e Zd ZdZdZdd Zdd	 Zd
d Zdd ZdS )r   z'Wrap MLS rules to allow set operations.r!   sourcetargettclassc             C   s8   || _ t|j| _t|j| _t|j| _t|| _d S )N)originr   r)   r*   r   r+   hashkey)r   r   r   r   r   __init__p   s
    zMLSRuleWrapper.__init__c             C   s   | j S )N)r.   )r   r   r   r   __hash__w   s    zMLSRuleWrapper.__hash__c             C   s   | j |j k S )N)r.   )r   otherr   r   r   __lt__z   s    zMLSRuleWrapper.__lt__c             C   s$   | j |j ko"| j|jko"| j|jkS )N)r)   r*   r+   )r   r1   r   r   r   __eq__}   s    zMLSRuleWrapper.__eq__N)r!   r)   r*   r+   )	r$   r%   r&   r'   	__slots__r/   r0   r2   r3   r   r   r   r   r   j   s   r   N)collectionsr   r    r   Zdescriptorsr   
differencer   r	   Zmlsr
   Zobjclassr   typesr   r   r   r   r   r   r   r   <module>   s   G