3 ^4 @ s d dl mZmZ ddlmZ ddlmZ ddlmZm Z ddl mZ ddlm Z dd lmZ ed ddd gZG dd deZG dd de ZdS ) )defaultdict namedtuple )MLSRuletype )DiffResultDescriptor) DifferenceWrapper)RangeWrapper)class_wrapper_factory)type_or_attr_wrapper_factoryZmodified_mlsruleruleZ added_defaultZremoved_defaultc @ sP e Zd ZdZedZedZedZee Z ee Zdd Zdd Z dd Zd S ) MLSRulesDifferencez;Determine the difference in MLS rules between two policies.diff_range_transitionsc C s | j jdj| | j s"| j r*| j | j| j| jtj t | j| jtj t \}}}g }x:|D ]2\}}t|jt|jkrf|j t||j|j qfW || _|| _|| _dS )zGGenerate the difference in range_transition rules between the policies.zPGenerating range_transition differences from {0.left_policy} to {0.right_policy}N)loginfoformat_left_mls_rules_right_mls_rules_create_mls_rule_listsZ _set_diffZ_expand_generatorr Zrange_transitionMLSRuleWrapperr defaultappendmodified_mlsrule_recordadded_range_transitionsremoved_range_transitionsmodified_range_transitions)selfZaddedZremovedZmatchedZmodifiedZ left_ruleZ right_rule r /usr/lib64/python3.6/mlsrules.pyr / s&