Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _canonicalize_variant(self):
"""Canonicalize variant tags."""
variant = self.parts['variant'].lstrip('-')
if variant:
ordered = sorted(variant.split('-'))
variants = set(ordered)
if len(variants) != len(ordered):
raise InvalidSubtagError('Duplicate variants were found')
subtags = set(self.parts['language'].split('-'))
if self.parts['script']:
subtags.add(self.parts['script'].lstrip('-'))
if self.parts['region']:
subtags.add(self.parts['region'].lstrip('-'))
for v in ordered[:]:
index = ordered.index(v)
if v not in registry['variant']:
raise InvalidSubtagError("'{}' is not a registered variant".format(variant))
value = registry['variant'][v]['preferred']
if value is not None:
v = value
prefixes = [p.split('-') for p in registry['variant'][v]['prefix']]
def _canonicalize_language(self):
"""Canonicalize language tags."""
language = self.parts['language']
extlang = None
primary = None
values = language.split('-')
if values[0] == '*':
if len(values) > 1:
if values[1] not in registry['extlang']:
raise InvalidSubtagError("'{}' is not a registered extlang.".format(extlang))
return
if values[0] not in registry['language']:
raise InvalidSubtagError("'{}' is not a registered language.".format(values[0]))
if registry['extlang'].get(values[0]):
extlang = values[0]
else:
value = registry['language'][values[0]]['preferred']
primary = values[0] if value is None else value
if len(values) == 2:
if extlang:
raise InvalidSubtagError("Unexpected extlang following extlang: '{}'".format(values[1]))
extlang = values[1]
if extlang:
if variant:
ordered = sorted(variant.split('-'))
variants = set(ordered)
if len(variants) != len(ordered):
raise InvalidSubtagError('Duplicate variants were found')
subtags = set(self.parts['language'].split('-'))
if self.parts['script']:
subtags.add(self.parts['script'].lstrip('-'))
if self.parts['region']:
subtags.add(self.parts['region'].lstrip('-'))
for v in ordered[:]:
index = ordered.index(v)
if v not in registry['variant']:
raise InvalidSubtagError("'{}' is not a registered variant".format(variant))
value = registry['variant'][v]['preferred']
if value is not None:
v = value
prefixes = [p.split('-') for p in registry['variant'][v]['prefix']]
matched = True if not prefixes else False
if matched:
# No prefixes required, so lets move to the end
del ordered[index]
ordered.insert(len(ordered), v)
index = len(ordered) - 1
for prefix in prefixes:
match = True
for subtag in prefix:
if subtag not in subtags and subtag not in variants:
def _canonicalize_script(self):
"""Canonicalize script tags."""
script = self.parts['script'].lstrip('-')
if script and not RE_PRIVATE_SCRIPT.match(script):
if script not in registry['script']:
raise InvalidSubtagError("'{}' is not a registered script".format(script))
value = registry['script'][script]['preferred']
if value:
self.parts['script'] = '-' + value
def _canonicalize_region(self):
"""Canonicalize region tags."""
region = self.parts['region'].lstrip('-')
if region and not RE_PRIVATE_REGION.match(region):
if region not in registry['region']:
raise InvalidSubtagError("'{}' is not a registered region".format(region))
value = registry['region'][region]['preferred']
if value:
self.parts['region'] = '-' + value
if values[0] not in registry['language']:
raise InvalidSubtagError("'{}' is not a registered language.".format(values[0]))
if registry['extlang'].get(values[0]):
extlang = values[0]
else:
value = registry['language'][values[0]]['preferred']
primary = values[0] if value is None else value
if len(values) == 2:
if extlang:
raise InvalidSubtagError("Unexpected extlang following extlang: '{}'".format(values[1]))
extlang = values[1]
if extlang:
if extlang not in registry['extlang']:
raise InvalidSubtagError("'{}' is not a registered extlang.".format(extlang))
if primary and primary not in registry['extlang'][extlang]['prefix']:
raise InvalidSubtagError("'{}' is an invalid prefix for '{}'".format(primary, extlang))
primary = None
# Do not allow extlang in canonical form
if not primary:
self.parts['language'] = extlang
self.parts['extlang'] = ''
elif not extlang:
self.parts['language'] = primary
self.parts['extlang'] = ''