11"""CheckType Implementation."""
22from typing import Mapping , Tuple , List , Dict , Any
3- from .evaluator import diff_generator , parameter_evaluator
3+ from .evaluator import diff_generator , parameter_evaluator , regex_evaluator
44from .runner import extract_values_from_output
55
66
@@ -24,7 +24,8 @@ def init(*args):
2424 return ToleranceType (* args )
2525 if check_type == "parameter_match" :
2626 return ParameterMatchType (* args )
27-
27+ if check_type == "regex" :
28+ return RegexType (* args )
2829 raise NotImplementedError
2930
3031 @staticmethod
@@ -101,10 +102,46 @@ def evaluate(self, reference_value: Mapping, value_to_compare: Mapping) -> Tuple
101102 parameter = value_to_compare [1 ]
102103 except IndexError as error :
103104 raise f"Evaluating parameter must be defined as dict at index 1. You have: { value_to_compare } " from error
105+ if not isinstance (parameter , dict ):
106+ raise TypeError ("check_option must be of type dict()" )
107+
104108 diff = parameter_evaluator (reference_value , parameter )
105109 return diff , not diff
106110
107111
112+ class RegexType (CheckType ):
113+ """Regex Match class implementation."""
114+
115+ def evaluate (self , reference_value : Mapping , value_to_compare : Mapping ) -> Tuple [Mapping , bool ]:
116+ """Regex Match evaluator implementation."""
117+ # Assert that check parameters are at index 1.
118+ try :
119+ parameter = value_to_compare [1 ]
120+ except IndexError as error :
121+ raise IndexError (
122+ f"Evaluating parameter must be defined as dict at index 1. You have: { value_to_compare } "
123+ ) from error
124+
125+ # Assert that check parameters are at index 1.
126+ if not all ([isinstance (parameter , dict )]):
127+ raise TypeError ("check_option must be of type dict()." )
128+
129+ # Assert that check option has 'regex' and 'mode' dict keys.
130+ if "regex" not in parameter and "mode" not in parameter :
131+ raise KeyError (
132+ "Regex check-type requires check-option. Example: dict(regex='.*UNDERLAY.*', mode='no-match')."
133+ )
134+
135+ # Assert that check option has 'regex' and 'mode' dict keys.\
136+ if parameter ["mode" ] not in ["match" , "no-match" ]:
137+ raise ValueError (
138+ "Regex check-type requires check-option. Example: dict(regex='.*UNDERLAY.*', mode='no-match')."
139+ )
140+
141+ diff = regex_evaluator (reference_value , parameter )
142+ return diff , not diff
143+
144+
108145# TODO: compare is no longer the entry point, we should use the libary as:
109146# netcompare_check = CheckType.init(check_type_info, options)
110147# pre_result = netcompare_check.get_value(pre_obj, path)
0 commit comments