X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/62828fc5c11a1c332e18206b181b84928980319b..c2bdda8895963cece639a9e93ceff31465b518b5:/nominatim/tokenizer/icu_variants.py?ds=sidebyside diff --git a/nominatim/tokenizer/icu_variants.py b/nominatim/tokenizer/icu_variants.py index e4348eab..9ebe3684 100644 --- a/nominatim/tokenizer/icu_variants.py +++ b/nominatim/tokenizer/icu_variants.py @@ -4,51 +4,28 @@ Data structures for saving variant expansions for ICU tokenizer. from collections import namedtuple import json -from nominatim.errors import UsageError - _ICU_VARIANT_PORPERTY_FIELDS = ['lang'] -def _get_strtuple_prop(rules, field): - """ Return the given field of the rules dictionary as a list. - - If the field is not defined or empty, returns None. If the field is - a singe string, it is converted into a tuple with a single element. - If the field is a list of strings, return as a string tuple. - Raise a usage error in all other cases. - """ - value = rules.get(field) - - if not value: - return None - - if isinstance(value, str): - return (value,) - if not isinstance(value, list) or any(not isinstance(x, str) for x in value): - raise UsageError("YAML variant property '{}' should be a list.".format(field)) - - return tuple(value) - - -class ICUVariantProperties(namedtuple('_ICUVariantProperties', _ICU_VARIANT_PORPERTY_FIELDS, - defaults=(None, )*len(_ICU_VARIANT_PORPERTY_FIELDS))): +class ICUVariantProperties(namedtuple('_ICUVariantProperties', _ICU_VARIANT_PORPERTY_FIELDS)): """ Data container for saving properties that describe when a variant should be applied. - Porperty instances are hashable. + Property instances are hashable. """ @classmethod - def from_rules(cls, rules): + def from_rules(cls, _): """ Create a new property type from a generic dictionary. The function only takes into account the properties that are understood presently and ignores all others. """ - return cls(lang=_get_strtuple_prop(rules, 'lang')) + return cls(lang=None) ICUVariant = namedtuple('ICUVariant', ['source', 'replacement', 'properties']) + def pickle_variant_set(variants): """ Serializes an iterable of variant rules to a string. """ @@ -74,7 +51,7 @@ def unpickle_variant_set(variant_string): """ data = json.loads(variant_string) - properties = {int(k): ICUVariantProperties(**v) for k, v in data['properties'].items()} - print(properties) + properties = {int(k): ICUVariantProperties.from_rules(v) + for k, v in data['properties'].items()} return set((ICUVariant(src, repl, properties[pid]) for src, repl, pid in data['variants']))