Source code for tof.utils

from django.conf import settings

from . import get_language


[docs] class TranslatableText(str): """Class like a string but returns values depends on get_language.""" def __setattr__(self, attr, value): vars(self)[attr] = str(value) if value else '' if not value and len(attr) == 2: delattr(self, attr) def __setitem__(self, attr, value): if isinstance(attr, str): setattr(self, attr, value) def __delattr__(self, attr): vars(self).pop(attr, None) def __delitem__(self, attr): if isinstance(attr, str): delattr(self, attr) def __getitem__(self, key): return getattr(self, key, None) if isinstance(key, str) else f'{self}'[key] def __str__(self): __, value = next(self.iter, (None, None)) return f'{value or self["_origin"] or str()}' def __repr__(self): return f'{self} {vars(self).keys()}' def __eq__(self, other): return f'{self}' == f'{other}' def __add__(self, other): return f'{self}{other}' def __radd__(self, other): return f'{other}{self}' def __len__(self): return len(f'{self}') def __bool__(self): return bool(next(self.iter, None) or self['_origin'])
[docs] def update(self, **kwargs): for attr, value in kwargs.items(): setattr(self, attr, value) return self
def __iter__(self): yield from str(self) @property def iter(self): langs = dict.fromkeys((self.get_lang(), self.DEFAULT, *(lang for lang in vars(self).keys() if len(lang) == 2)), ) yield from ((lang, value) for lang, value in ((lang, getattr(self, lang, None)) for lang in langs) if value) @property def current(self): return getattr(self, self.get_lang(), None)
[docs] def update_current(self, value): setattr(self, self.get_lang(), value) return self
# TODO: make staticmethod a property
[docs] @staticmethod def get_lang(): lang = get_language() or 'en' return lang[:2]
@property def DEFAULT(self): response = vars(self)['DEFAULT'] = getattr(settings, 'DEFAULT_LANGUAGE', None) or 'en' return response