More general refactoring

This commit is contained in:
Davte 2019-07-19 17:25:47 +02:00
parent 4dd88a0b2c
commit cab54806a7

View File

@ -3,9 +3,6 @@
# Standard library modules # Standard library modules
import logging import logging
# Project modules
from .utilities import extract
class MultiLanguageObject(object): class MultiLanguageObject(object):
"""Make bot inherit from this class to make it support multiple languages. """Make bot inherit from this class to make it support multiple languages.
@ -20,20 +17,26 @@ class MultiLanguageObject(object):
def __init__(self): def __init__(self):
"""Instantiate MultiLanguage object, setting self.messages.""" """Instantiate MultiLanguage object, setting self.messages."""
self.messages = dict() self.messages = dict()
self._default_language = 'en'
def get_message(self, *fields, update=dict(), user_record=dict(), @property
language=None, **format_kwargs): def default_language(self):
"""Given a list of strings (`fields`), return proper message. """Return default language."""
return self._default_language
Language will be selected in this order: def set_default_language(self, language):
"""Set default language."""
self._default_language = language
def get_language(self, update=dict(), user_record=dict(), language=None):
"""Get language.
Language will be the first non-null value of this list:
- `language` parameter - `language` parameter
- `user_record['selected_language_code']`: language selected by user - `user_record['selected_language_code']`: language selected by user
- `update['language_code']`: language of incoming telegram update - `update['language_code']`: language of incoming telegram update
- Fallback to English if none of the above fits - Fallback to default language if none of the above fits
`format_kwargs` will be passed to format function on the result.
""" """
# Choose language
if ( if (
language is None language is None
and 'selected_language_code' in user_record and 'selected_language_code' in user_record
@ -45,8 +48,21 @@ class MultiLanguageObject(object):
and 'language_code' in update['from'] and 'language_code' in update['from']
): ):
language = update['from']['language_code'] language = update['from']['language_code']
if language is None: return language or self.default_language
language = 'en'
def get_message(self, *fields, update=dict(), user_record=dict(),
language=None, **format_kwargs):
"""Given a list of strings (`fields`), return proper message.
Language will be determined by `get_language` method.
`format_kwargs` will be passed to format function on the result.
"""
# Choose language
language = self.get_language(
update=update,
user_record=user_record,
language=language
)
# Find result for `language` # Find result for `language`
result = self.messages result = self.messages
for field in fields: for field in fields:
@ -65,10 +81,7 @@ class MultiLanguageObject(object):
result = result[field] result = result[field]
if language not in result: if language not in result:
# For specific languages, try generic ones # For specific languages, try generic ones
language = extract( language = language.partition('-')[0]
language,
ender='-'
)
if language not in result: if language not in result:
language = 'en' language = 'en'
if language not in result: if language not in result: