From eb23d3e9b6361993865fc7be536729db147729a5 Mon Sep 17 00:00:00 2001 From: profitroll Date: Fri, 30 Jun 2023 10:31:49 +0200 Subject: [PATCH] No more locations.locale in config --- libbot/i18n/__init__.py | 49 ++++++++++++++++--------------- libbot/i18n/classes/bot_locale.py | 19 ++++++------ libbot/i18n/sync/__init__.py | 46 ++++++++++++++++------------- libbot/pyrogram/classes/client.py | 6 +--- 4 files changed, 62 insertions(+), 58 deletions(-) diff --git a/libbot/i18n/__init__.py b/libbot/i18n/__init__.py index fc8ed34..00c7121 100644 --- a/libbot/i18n/__init__.py +++ b/libbot/i18n/__init__.py @@ -1,35 +1,36 @@ from os import listdir from pathlib import Path -from typing import Any, Dict +from typing import Any, Dict, Union from libbot import config_get, json_read, sync from libbot.i18n.classes.bot_locale import BotLocale -async def _(key: str, *args: str, locale: str = sync.config_get("locale")) -> Any: +async def _( + key: str, + *args: str, + locale: str = sync.config_get("locale"), + locales_root: Union[str, Path] = Path("locale"), +) -> Any: """Get value of locale string ### Args: - * key (`str`): The last key of the locale's keys path - * *args (`list`): Path to key like: `dict[args][key]` - * locale (`str`): Locale to looked up in. Defaults to config's `"locale"` value + * key (`str`): The last key of the locale's keys path. + * *args (`list`): Path to key like: `dict[args][key]`. + * locale (`str`): Locale to looked up in. Defaults to config's `"locale"` value. + * locales_root (`Union[str, Path]`, *optional*): Folder where locales are located. Defaults to `Path("locale")`. ### Returns: * `Any`: Value of provided locale key. Is usually `str`, `dict` or `list` """ - if locale is None: - locale = sync.config_get("locale") + locale = sync.config_get("locale") if locale is None else locale try: - this_dict = await json_read( - Path(f'{await config_get("locale", "locations")}/{locale}.json') - ) + this_dict = await json_read(Path(f"{locales_root}/{locale}.json")) except FileNotFoundError: try: this_dict = await json_read( - Path( - f'{await config_get("locale", "locations")}/{await config_get("locale")}.json' - ) + Path(f'{locales_root}/{await config_get("locale")}.json') ) except FileNotFoundError: return f'⚠️ Locale in config is invalid: could not get "{key}" in {args} from locale "{locale}"' @@ -44,26 +45,27 @@ async def _(key: str, *args: str, locale: str = sync.config_get("locale")) -> An return f'⚠️ Locale in config is invalid: could not get "{key}" in {args} from locale "{locale}"' -async def in_all_locales(key: str, *args: str) -> list: +async def in_all_locales( + key: str, *args: str, locales_root: Union[str, Path] = Path("locale") +) -> list: """Get value of the provided key and path in all available locales ### Args: * key (`str`): The last key of the locale's keys path. * *args (`list`): Path to key like: `dict[args][key]`. + * locales_root (`Union[str, Path]`, *optional*): Folder where locales are located. Defaults to `Path("locale")`. ### Returns: * `list`: List of values in all locales """ output = [] - files_locales = listdir(await config_get("locale", "locations")) + files_locales = listdir(locales_root) valid_locales = [".".join(entry.split(".")[:-1]) for entry in files_locales] for lc in valid_locales: try: - this_dict = await json_read( - Path(f'{await config_get("locale", "locations")}/{lc}.json') - ) + this_dict = await json_read(Path(f"{locales_root}/{lc}.json")) except FileNotFoundError: continue @@ -79,26 +81,27 @@ async def in_all_locales(key: str, *args: str) -> list: return output -async def in_every_locale(key: str, *args: str) -> Dict[str, Any]: +async def in_every_locale( + key: str, *args: str, locales_root: Union[str, Path] = Path("locale") +) -> Dict[str, Any]: """Get value of the provided key and path in every available locale with locale tag ### Args: * key (`str`): The last key of the locale's keys path. * *args (`list`): Path to key like: `dict[args][key]`. + * locales_root (`Union[str, Path]`, *optional*): Folder where locales are located. Defaults to `Path("locale")`. ### Returns: * `Dict[str, Any]`: Locale is a key and it's value from locale file is a value """ output = {} - files_locales = listdir(await config_get("locale", "locations")) + files_locales = listdir(locales_root) valid_locales = [".".join(entry.split(".")[:-1]) for entry in files_locales] for lc in valid_locales: try: - this_dict = await json_read( - Path(f'{await config_get("locale", "locations")}/{lc}.json') - ) + this_dict = await json_read(Path(f"{locales_root}/{lc}.json")) except FileNotFoundError: continue diff --git a/libbot/i18n/classes/bot_locale.py b/libbot/i18n/classes/bot_locale.py index 4df1397..e4c5660 100644 --- a/libbot/i18n/classes/bot_locale.py +++ b/libbot/i18n/classes/bot_locale.py @@ -8,15 +8,16 @@ from libbot import sync class BotLocale: """Small addon that can be used by bot clients' classes in order to minimize I/O""" - def __init__(self, locales_folder: Union[str, Path, None] = None) -> None: - if locales_folder is None: - locales_folder = Path(sync.config_get("locale", "locations")) - elif isinstance(locales_folder, str): - locales_folder = Path(locales_folder) - elif not isinstance(locales_folder, Path): - raise TypeError("'locales_folder' must be a valid path or path-like object") + def __init__( + self, + locales_root: Union[str, Path] = Path("locale"), + ) -> None: + if isinstance(locales_root, str): + locales_root = Path(locales_root) + elif not isinstance(locales_root, Path): + raise TypeError("'locales_root' must be a valid path or path-like object") - files_locales: list = listdir(locales_folder) + files_locales: list = listdir(locales_root) valid_locales: list = [ ".".join(entry.split(".")[:-1]) for entry in files_locales @@ -26,7 +27,7 @@ class BotLocale: self.locales: dict = {} for lc in valid_locales: - self.locales[lc] = sync.json_read(Path(f"{locales_folder}/{lc}.json")) + self.locales[lc] = sync.json_read(Path(f"{locales_root}/{lc}.json")) def _(self, key: str, *args: str, locale: Union[str, None] = None) -> Any: """Get value of locale string diff --git a/libbot/i18n/sync/__init__.py b/libbot/i18n/sync/__init__.py index bdd031f..dbdbf59 100644 --- a/libbot/i18n/sync/__init__.py +++ b/libbot/i18n/sync/__init__.py @@ -1,18 +1,24 @@ from os import listdir from pathlib import Path -from typing import Any, Dict +from typing import Any, Dict, Union from libbot import sync from libbot.sync import config_get, json_read -def _(key: str, *args: str, locale: str = sync.config_get("locale")) -> Any: +def _( + key: str, + *args: str, + locale: str = sync.config_get("locale"), + locales_root: Union[str, Path] = Path("locale"), +) -> Any: """Get value of locale string ### Args: - * key (`str`): The last key of the locale's keys path - * *args (`list`): Path to key like: `dict[args][key]` - * locale (`str`): Locale to looked up in. Defaults to config's `"locale"` value + * key (`str`): The last key of the locale's keys path. + * *args (`list`): Path to key like: `dict[args][key]`. + * locale (`str`): Locale to looked up in. Defaults to config's `"locale"` value. + * locales_root (`Union[str, Path]`, *optional*): Folder where locales are located. Defaults to `Path("locale")`. ### Returns: * `Any`: Value of provided locale key. Is usually `str`, `dict` or `list` @@ -21,14 +27,10 @@ def _(key: str, *args: str, locale: str = sync.config_get("locale")) -> Any: locale = sync.config_get("locale") try: - this_dict = json_read( - Path(f'{config_get("locale", "locations")}/{locale}.json') - ) + this_dict = json_read(Path(f"{locales_root}/{locale}.json")) except FileNotFoundError: try: - this_dict = json_read( - Path(f'{config_get("locale", "locations")}/{config_get("locale")}.json') - ) + this_dict = json_read(Path(f'{locales_root}/{config_get("locale")}.json')) except FileNotFoundError: return f'⚠️ Locale in config is invalid: could not get "{key}" in {args} from locale "{locale}"' @@ -42,26 +44,27 @@ def _(key: str, *args: str, locale: str = sync.config_get("locale")) -> Any: return f'⚠️ Locale in config is invalid: could not get "{key}" in {args} from locale "{locale}"' -def in_all_locales(key: str, *args: str) -> list: +def in_all_locales( + key: str, *args: str, locales_root: Union[str, Path] = Path("locale") +) -> list: """Get value of the provided key and path in all available locales ### Args: * key (`str`): The last key of the locale's keys path. * *args (`list`): Path to key like: `dict[args][key]`. + * locales_root (`Union[str, Path]`, *optional*): Folder where locales are located. Defaults to `Path("locale")`. ### Returns: * `list`: List of values in all locales """ output = [] - files_locales = listdir(config_get("locale", "locations")) + files_locales = listdir(locales_root) valid_locales = [".".join(entry.split(".")[:-1]) for entry in files_locales] for lc in valid_locales: try: - this_dict = json_read( - Path(f'{config_get("locale", "locations")}/{lc}.json') - ) + this_dict = json_read(Path(f"{locales_root}/{lc}.json")) except FileNotFoundError: continue @@ -77,26 +80,27 @@ def in_all_locales(key: str, *args: str) -> list: return output -def in_every_locale(key: str, *args: str) -> Dict[str, Any]: +def in_every_locale( + key: str, *args: str, locales_root: Union[str, Path] = Path("locale") +) -> Dict[str, Any]: """Get value of the provided key and path in every available locale with locale tag ### Args: * key (`str`): The last key of the locale's keys path. * *args (`list`): Path to key like: `dict[args][key]`. + * locales_root (`Union[str, Path]`, *optional*): Folder where locales are located. Defaults to `Path("locale")`. ### Returns: * `Dict[str, Any]`: Locale is a key and it's value from locale file is a value """ output = {} - files_locales = listdir(config_get("locale", "locations")) + files_locales = listdir(locales_root) valid_locales = [".".join(entry.split(".")[:-1]) for entry in files_locales] for lc in valid_locales: try: - this_dict = json_read( - Path(f'{config_get("locale", "locations")}/{lc}.json') - ) + this_dict = json_read(Path(f"{locales_root}/{lc}.json")) except FileNotFoundError: continue diff --git a/libbot/pyrogram/classes/client.py b/libbot/pyrogram/classes/client.py index d9d16a3..a33b46b 100644 --- a/libbot/pyrogram/classes/client.py +++ b/libbot/pyrogram/classes/client.py @@ -100,11 +100,7 @@ class PyroClient(Client): self.start_time: float = 0 self.bot_locale: BotLocale = BotLocale( - ( - Path(self.config["locations"]["locale"]) - if locales_root is None - else locales_root - ) + (Path("locale") if locales_root is None else locales_root) ) self.default_locale: str = self.bot_locale.default self.locales: dict = self.bot_locale.locales