py.lib.aw_config
2026-06-23
Parent:34b98b38a9f0
py.lib.aw_config/src/aw_config/app_config_manager.py
.. 0.202606.4 . Исправление неточности с списке экспортов модуля
| awgur@2 | 1 # coding: utf-8 |
| awgur@2 | 2 """\ |
| awgur@2 | 3 Пробуем упростить работу с объектами конфигурации при работе с приложениями. |
| awgur@2 | 4 """ |
| awgur@2 | 5 from threading import Lock |
| awgur@2 | 6 from typing import Optional, Dict |
| awgur@2 | 7 |
| awgur@2 | 8 from .error import Error |
| awgur@2 | 9 |
| awgur@2 | 10 |
| awgur@2 | 11 class AppConfManagerError(Error): |
| awgur@2 | 12 """\ |
| awgur@2 | 13 Базовый класс ошибок работы с хранилищем конфигураций |
| awgur@2 | 14 """ |
| awgur@2 | 15 |
| awgur@2 | 16 |
| awgur@2 | 17 class AppConfNotFound(AppConfManagerError): |
| awgur@2 | 18 """\ |
| awgur@2 | 19 Исключение, возникающее когда в хранилище не найдена нужная конфигурация |
| awgur@2 | 20 """ |
| awgur@2 | 21 |
| awgur@2 | 22 |
| awgur@2 | 23 _CONFIG: Optional[Dict] = None |
| awgur@2 | 24 _CONFIG_GUARD = Lock() |
| awgur@2 | 25 |
| awgur@2 | 26 |
| awgur@2 | 27 def init_configs(): |
| awgur@2 | 28 """\ |
| awgur@2 | 29 Инициализируем хранилище конфигураций |
| awgur@2 | 30 """ |
| awgur@2 | 31 global _CONFIG |
| awgur@2 | 32 with _CONFIG_GUARD: |
| awgur@2 | 33 if _CONFIG is None: |
| awgur@2 | 34 _CONFIG = {} |
| awgur@2 | 35 |
| awgur@2 | 36 |
| awgur@2 | 37 def add_config(conf_selector, conf_obj): |
| awgur@2 | 38 """\ |
| awgur@2 | 39 Добавляет в хранилище объект конфигурации. Затем его можно извлечь по селектору. Удобно указывать |
| awgur@2 | 40 в качестве такого селектора класс, объектом которого является данный объект конфигурации |
| awgur@2 | 41 """ |
| awgur@2 | 42 global _CONFIG |
| awgur@2 | 43 with _CONFIG_GUARD: |
| awgur@2 | 44 if _CONFIG is None: |
| awgur@2 | 45 raise AppConfManagerError(f'При попытке добавить конфигурацию "{conf_selector}" в хранилище ' |
| awgur@2 | 46 f'оказалось, что оно не инициализировано') |
| awgur@2 | 47 |
| awgur@2 | 48 if conf_selector in _CONFIG: |
| awgur@2 | 49 raise AppConfManagerError(f'Селектор "{conf_selector}" дублируется.') |
| awgur@2 | 50 |
| awgur@2 | 51 _CONFIG[conf_selector] = conf_obj |
| awgur@2 | 52 |
| awgur@2 | 53 |
| awgur@2 | 54 def replace_config(conf_selector, conf_obj): |
| awgur@2 | 55 """\ |
| awgur@2 | 56 Заменяем добавленный ранее объект конфигурации |
| awgur@2 | 57 """ |
| awgur@2 | 58 global _CONFIG |
| awgur@2 | 59 with _CONFIG_GUARD: |
| awgur@2 | 60 if _CONFIG is None: |
| awgur@2 | 61 raise AppConfManagerError(f'При попытке заменить конфигурацию "{conf_selector}" в хранилище ' |
| awgur@2 | 62 f'оказалось, что оно не инициализировано') |
| awgur@2 | 63 |
| awgur@2 | 64 elif conf_selector in _CONFIG: |
| awgur@2 | 65 _CONFIG[conf_selector] = conf_obj |
| awgur@2 | 66 |
| awgur@2 | 67 else: |
| awgur@2 | 68 raise AppConfManagerError(f'Не найдена предыдущая конфигурация "{conf_selector}" при попытке её замены') |
| awgur@2 | 69 |
| awgur@2 | 70 |
| awgur@16 | 71 def del_config(conf_selector): |
| awgur@16 | 72 """\ |
| awgur@16 | 73 Удаляет добавленный ранее объект конфигурации |
| awgur@16 | 74 """ |
| awgur@16 | 75 global _CONFIG |
| awgur@16 | 76 with _CONFIG_GUARD: |
| awgur@16 | 77 if _CONFIG is None: |
| awgur@16 | 78 raise AppConfManagerError(f'При попытке заменить конфигурацию "{conf_selector}" в хранилище ' |
| awgur@16 | 79 f'оказалось, что оно не инициализировано') |
| awgur@16 | 80 |
| awgur@16 | 81 elif conf_selector in _CONFIG: |
| awgur@16 | 82 del _CONFIG[conf_selector] |
| awgur@16 | 83 |
| awgur@16 | 84 |
| awgur@2 | 85 def get_config(conf_selector): |
| awgur@2 | 86 """\ |
| awgur@2 | 87 Получаем из хранилища добавленный ранее объект конфигурации по селектору. |
| awgur@2 | 88 """ |
| awgur@2 | 89 if _CONFIG is None: |
| awgur@2 | 90 raise AppConfManagerError('Попытка работать с неинициализированным хранилищем конфигураций') |
| awgur@2 | 91 |
| awgur@2 | 92 else: |
| awgur@2 | 93 try: |
| awgur@2 | 94 return _CONFIG[conf_selector] |
| awgur@2 | 95 |
| awgur@2 | 96 except KeyError: |
| awgur@2 | 97 raise AppConfNotFound(f'Не найдена конфигурация "{conf_selector}" в хранилище') |
| awgur@2 | 98 |
| awgur@2 | 99 except (ValueError, TypeError) as e: |
| awgur@2 | 100 raise AppConfManagerError(f'Ошибка получения конфигурации "{conf_selector}" из хранилища: {e}') |