def _keys_from_definition(cls, definition, template_name, keys): """Extracts Template Keys from a definition. :param definition: Template definition as string :param template_name: Name of template. :param keys: Mapping of key names to keys as dict :returns: Mapping of key names to keys and collection of keys ordered as they appear in the definition. :rtype: List of Dictionaries, List of lists """ names_keys = {} ordered_keys = [] # regular expression to find key names regex = r"(?<={)%s(?=})" % constants.TEMPLATE_KEY_NAME_REGEX key_names = re.findall(regex, definition) for key_name in key_names: key = keys.get(key_name) if key is None: msg = "Template definition for template %s refers to key {%s}, which does not appear in supplied keys." raise TankError(msg % (template_name, key_name)) else: if names_keys.get(key.name, key) != key: # Different keys using same name msg = ( "Template definition for template %s uses two keys" + " which use the name '%s'.") raise TankError(msg % (template_name, key.name)) names_keys[key.name] = key ordered_keys.append(key) return names_keys, ordered_keys
def test_unicode_override(self): """ Ensure that the unicode flag overrides the flag insertion behavior. """ char = u"a漢字" expr = r"a\w+" # test all wrapped methods self.assertTrue(bool(sgre.compile(expr, flags=re.U).match(char))) self.assertEqual(len(sgre.findall(expr, char, flags=re.U)), 1) self.assertTrue(bool(sgre.match(expr, char, flags=re.U))) self.assertTrue(bool(sgre.search(expr, char, flags=re.U))) self.assertEqual(len(sgre.split(expr, "$ %s @" % char, flags=re.U)), 2) self.assertEqual(sgre.sub(expr, "@", char, flags=re.U), "@")
def test_wrap(self): r""" Ensure that sgre injects the re.ASCII flag appropriately, and that unicode characters do not match `\w` in Python 2 or 3. """ char = u"漢字" expr = r"\w+" # test all wrapped methods self.assertFalse(bool(sgre.compile(expr).match(char))) self.assertEqual(len(sgre.findall(expr, char)), 0) self.assertFalse(bool(sgre.match(expr, char))) self.assertFalse(bool(sgre.search(expr, char))) self.assertEqual(len(sgre.split(expr, "$ %s @" % char)), 1) self.assertEqual(sgre.sub(expr, "@", char), char)
def test_wrap_kwarg(self): r""" Ensure that sgre injects the re.ASCII flag appropriately when flags are also passed as keyword arguments, and that unicode characters do not match `\w` in Python 2 or 3. """ char = u"a漢字" expr = r"a\w+" # test all wrapped methods self.assertFalse(bool(sgre.compile(expr, flags=re.I).match(char))) self.assertEqual(len(sgre.findall(expr, char, flags=re.I)), 0) self.assertFalse(bool(sgre.match(expr, char, flags=re.I))) self.assertFalse(bool(sgre.search(expr, char, flags=re.I))) self.assertEqual(len(sgre.split(expr, "$ %s @" % char, flags=re.I)), 1) self.assertEqual(sgre.sub(expr, "@", char, flags=re.I), char)