+
+
+def find_regex_return(match_dict=None, log_name=None, msg='Generic error message'):
+ """
+ :param match_dict: dict: re.search.groupdict() or None
+ :param log_name: str: log name
+ :param msg: str: error description
+ :return: tuple:
+ """
+ return match_dict, log_name, msg
+
+
+def check_req_per_url_pattern(url_pattern):
+ """
+ :param url_pattern: dict: ex. {'dim1': 'pattern1>', 'dim2': '<pattern2>'}
+ :return: list of named tuples or None:
+ We need to make sure all patterns are valid regular expressions
+ """
+ if not is_dict(url_pattern):
+ return None
+
+ result = list()
+
+ def is_valid_pattern(pattern):
+ """
+ :param pattern: str
+ :return: re.compile(pattern) or None
+ """
+ if not isinstance(pattern, str):
+ return False
+ else:
+ try:
+ compile_pattern = re.compile(pattern)
+ except re.error:
+ return False
+ else:
+ return compile_pattern
+
+ for dimension, regex in url_pattern.items():
+ valid_pattern = is_valid_pattern(regex)
+ if isinstance(dimension, str) and valid_pattern:
+ result.append(NAMED_URL_PATTERN(description=dimension, pattern=valid_pattern))
+
+ return result or None
+
+
+def is_dict(obj):
+ """
+ :param obj: dict:
+ :return: True or False
+ obj can be <dict> or <OrderedDict>
+ """
+ try:
+ obj.keys()
+ except AttributeError:
+ return False
+ else:
+ return True