Source code for kgdata.wikidata.models.multilingual

from typing import Dict, List, Tuple


[docs]class MultiLingualString(str): # two characters language code: en, th, de, fr, etc. lang: str lang2value: Dict[str, str] def __new__(cls, lang2value: Dict[str, str], lang): object = str.__new__(cls, lang2value[lang]) object.lang = lang object.lang2value = lang2value return object
[docs] def as_lang(self, lang: str) -> str: return self.lang2value[lang]
[docs] def as_lang_default(self, lang: str, default: str) -> str: return self.lang2value.get(lang, default)
[docs] def has_lang(self, lang: str) -> bool: return lang in self.lang2value
[docs] @staticmethod def en(label: str): return MultiLingualString(lang2value={"en": label}, lang="en")
[docs] def to_dict(self): return {"lang2value": self.lang2value, "lang": self.lang}
[docs] def to_tuple(self): return self.lang2value, self.lang
def __getnewargs__(self) -> Tuple[Dict[str, str], str]: return self.lang2value, self.lang
[docs]class MultiLingualStringList(List[str]): def __init__(self, lang2values: Dict[str, List[str]], lang): super().__init__(lang2values[lang]) self.lang2values = lang2values self.lang = lang
[docs] def to_dict(self): return {"lang2values": self.lang2values, "lang": self.lang}
[docs] def to_tuple(self): return self.lang2values, self.lang