add: изменение настроек типографа через defaults.py
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
# Общие функции для типографа etpgrf
|
||||
from etpgrf.config import MODE_UNICODE, MODE_MNEMONIC, MODE_MIXED, DEFAULT_MODE, DEFAULT_LANGS, SUPPORTED_LANGS
|
||||
from etpgrf.config import MODE_UNICODE, MODE_MNEMONIC, MODE_MIXED, SUPPORTED_LANGS
|
||||
from etpgrf.defaults import etpgrf_settings
|
||||
import os
|
||||
import regex
|
||||
|
||||
@@ -18,7 +19,7 @@ def parse_and_validate_mode(
|
||||
"""
|
||||
if mode_input is None:
|
||||
# Если mode_input не предоставлен явно, используем режим по умолчанию
|
||||
_mode_input = DEFAULT_MODE
|
||||
_mode_input = etpgrf_settings.MODE
|
||||
else:
|
||||
_mode_input = str(mode_input).lower()
|
||||
|
||||
@@ -31,44 +32,44 @@ def parse_and_validate_mode(
|
||||
|
||||
|
||||
def parse_and_validate_langs(
|
||||
langs_input: str | list[str] | tuple[str, ...] | frozenset[str] | None = None,
|
||||
langs: str | list[str] | tuple[str, ...] | frozenset[str] | None = None,
|
||||
) -> frozenset[str]:
|
||||
"""
|
||||
Обрабатывает и валидирует входной параметр языков.
|
||||
Если langs_input не предоставлен (None), используются языки по умолчанию
|
||||
(сначала из переменной окружения ETPGRF_DEFAULT_LANGS, затем внутренний дефолт).
|
||||
|
||||
:param langs_input: Язык(и) для обработки. Может быть строкой (например, "ru+en"),
|
||||
:param langs: Язык(и) для обработки. Может быть строкой (например, "ru+en"),
|
||||
списком, кортежем или frozenset.
|
||||
:return: Frozenset валидированных кодов языков в нижнем регистре.
|
||||
:raises TypeError: Если langs_input имеет неожиданный тип.
|
||||
:raises ValueError: Если langs_input пуст после обработки или содержит неподдерживаемые коды.
|
||||
"""
|
||||
_langs_input = langs_input
|
||||
_langs = langs
|
||||
|
||||
if _langs_input is None:
|
||||
# Если langs_input не предоставлен явно, будем выкручиваться и искать в разных местах
|
||||
if _langs is None:
|
||||
# Если langs не предоставлен явно, будем выкручиваться и искать в разных местах
|
||||
# 1. Попытка получить языки из переменной окружения системы
|
||||
env_default_langs = os.environ.get('ETPGRF_DEFAULT_LANGS')
|
||||
if env_default_langs:
|
||||
# Нашли язык для библиотеки в переменных окружения
|
||||
_langs_input = env_default_langs
|
||||
_langs = env_default_langs
|
||||
# print(f"Using ETPGRF_DEFAULT_LANGS from environment: {env_default_langs}") # Для отладки
|
||||
else:
|
||||
# Если в переменной окружения нет, используем то что есть в конфиге `etpgrf/config.py`
|
||||
_langs_input = DEFAULT_LANGS
|
||||
_langs = etpgrf_settings.DEFAULT_LANGS
|
||||
# print(f"Using library internal default langs: {DEFAULT_LANGS}") # Для отладки
|
||||
|
||||
if isinstance(_langs_input, str):
|
||||
if isinstance(_langs, str):
|
||||
# Разделяем строку по любым небуквенным символам, приводим к нижнему регистру
|
||||
# и фильтруем пустые строки
|
||||
parsed_lang_codes_list = [lang.lower() for lang in regex.split(r'[^a-zA-Z]+', _langs_input) if lang]
|
||||
elif isinstance(_langs_input, (list, tuple, frozenset)): # frozenset тоже итерируемый
|
||||
parsed_lang_codes_list = [lang.lower() for lang in regex.split(r'[^a-zA-Z]+', _langs) if lang]
|
||||
elif isinstance(_langs, (list, tuple, frozenset)): # frozenset тоже итерируемый
|
||||
# Приводим к строке, нижнему регистру и проверяем, что строка не пустая
|
||||
parsed_lang_codes_list = [str(lang).lower() for lang in _langs_input if str(lang).strip()]
|
||||
parsed_lang_codes_list = [str(lang).lower() for lang in _langs if str(lang).strip()]
|
||||
else:
|
||||
raise TypeError(
|
||||
f"etpgrf: параметр 'langs' должен быть строкой, списком, кортежем или frozenset. Получен: {type(_langs_input)}"
|
||||
f"etpgrf: параметр 'langs' должен быть строкой, списком, кортежем или frozenset. Получен: {type(_langs)}"
|
||||
)
|
||||
|
||||
if not parsed_lang_codes_list:
|
||||
@@ -84,7 +85,7 @@ def parse_and_validate_langs(
|
||||
)
|
||||
validated_langs_set.add(code)
|
||||
|
||||
# Эта проверка на случай, если parsed_lang_codes_list был не пуст, но все коды оказались невалидными
|
||||
# Эта проверка на случай если parsed_lang_codes_list был не пуст, но все коды оказались невалидными
|
||||
# (хотя предыдущее исключение должно было сработать раньше для каждого невалидного кода).
|
||||
if not validated_langs_set:
|
||||
raise ValueError("etpgrf: не предоставлено ни одного валидного кода языка.")
|
||||
|
Reference in New Issue
Block a user