diff --git a/src/zimscraperlib/i18n.py b/src/zimscraperlib/i18n.py index 53343191..333739d4 100644 --- a/src/zimscraperlib/i18n.py +++ b/src/zimscraperlib/i18n.py @@ -65,75 +65,57 @@ def setlocale(root_dir: pathlib.Path, locale_name: str): ) from exc -class Lang: - def __init__(self, lang_data: dict): - self._lang_data = lang_data +class Lang(dict): @property def iso_639_1(self) -> str | None: """ISO-639-1 language code""" - return self._lang_data["iso-639-1"] + return self["iso-639-1"] @property def iso_639_2b(self) -> str | None: """ISO-639-2b language code""" - return self._lang_data["iso-639-2b"] + return self["iso-639-2b"] @property def iso_639_2t(self) -> str | None: """ISO-639-2t language code""" - return self._lang_data["iso-639-2t"] + return self["iso-639-2t"] @property def iso_639_3(self) -> str | None: """ISO-639-3 language code""" - return self._lang_data["iso-639-3"] + return self["iso-639-3"] @property def iso_639_5(self) -> str | None: """ISO-639-5 language code""" - return self._lang_data["iso-639-5"] + return self["iso-639-5"] @property def english(self) -> str: """language name in English""" - return self._lang_data["english"] + return self["english"] @property def native(self) -> str: """language name in native language""" - return self._lang_data["native"] + return self["native"] @property def iso_types(self) -> list[str]: """list of supported iso types""" - return self._lang_data["iso_types"] + return self["iso_types"] @property def query(self) -> list[str]: """Query issued for these language details""" - return self._lang_data["query"] + return self["query"] @property def querytype(self) -> list[str]: """Type of query issued to retrieve language details""" - return self._lang_data["querytype"] - - def get(self, attribute: str) -> str | None: - """Return language code for given ISO code""" - return self._lang_data.get(attribute) - - def __eq__(self, value: object) -> bool: - """Compare with another value, either Lang or dict supported""" - if isinstance(value, Lang): - return self._lang_data == value._lang_data - if isinstance(value, dict): - return self._lang_data == value - return False - - def __iter__(self): - """Iterate over dict properties""" - return self._lang_data.__iter__() + return self["querytype"] def get_iso_lang_data(lang: str) -> tuple[Lang, Lang | None]: @@ -173,17 +155,17 @@ def replace_types(new_type: str) -> str: if str(getattr(isolang, code_type)).lower() == lang.lower(): iso_types.append(replace_types(code_type)) - lang_data = { - f"iso-639-{lang_}": getattr(isolang, f"pt{lang_}") for lang_ in ISO_LEVELS - } + lang_data = Lang( + **{f"iso-639-{lang_}": getattr(isolang, f"pt{lang_}") for lang_ in ISO_LEVELS} + ) lang_data.update({"english": isolang.name, "iso_types": iso_types}) if isolang.macro(): return ( - Lang(lang_data), + lang_data, get_iso_lang_data(isolang.macro().name)[0], ) # first item in the returned tuple - return Lang(lang_data), None + return lang_data, None def find_language_names(query: str, lang_data: Lang | None = None) -> tuple[str, str]: @@ -219,9 +201,9 @@ def find_language_names(query: str, lang_data: Lang | None = None) -> tuple[str, def update_with_macro(lang_data: Lang, macro_data: Lang | None): """update empty keys from lang_data with ones of macro_data""" if macro_data: - for key, value in macro_data._lang_data.items(): + for key, value in macro_data.items(): if key in lang_data and not lang_data.get(key): - lang_data._lang_data[key] = value + lang_data[key] = value return lang_data @@ -261,7 +243,7 @@ def get_language_details( iso_data = update_with_macro(lang_data, macro_data) native_name, english_name = find_language_names(native_query, iso_data) - iso_data._lang_data.update( + iso_data.update( { "english": english_name, "native": native_name,