py.lib.aw_config
1:81fc92335324 Browse Files
+ Модуль получения имени директории размещения приложения
pyproject.toml setup.py src/aw_config/__init__.py src/aw_config/app_tools.py
1.1 --- a/pyproject.toml Sat May 04 18:23:23 2024 +0300 1.2 +++ b/pyproject.toml Sat May 04 18:58:50 2024 +0300 1.3 @@ -4,7 +4,7 @@ 1.4 1.5 [project] 1.6 name = "aw_config" 1.7 -version = "0.202405.1" 1.8 +version = "0.202405.2" 1.9 description = "Модуль поддержки процесса конфигурирования приложения" 1.10 #readme = "README.md" 1.11 requires-python = ">=3.9"
2.1 --- a/setup.py Sat May 04 18:23:23 2024 +0300 2.2 +++ b/setup.py Sat May 04 18:58:50 2024 +0300 2.3 @@ -3,7 +3,7 @@ 2.4 2.5 setup( 2.6 name='aw_config', 2.7 - version='0.202405.1', 2.8 + version='0.202405.2', 2.9 packages=['aw_config'], 2.10 package_dir={'aw_config': 'src/aw_config'}, 2.11 url='https://devel.a0fs.ru/py.lib.aw_config',
3.1 --- a/src/aw_config/__init__.py Sat May 04 18:23:23 2024 +0300 3.2 +++ b/src/aw_config/__init__.py Sat May 04 18:58:50 2024 +0300 3.3 @@ -2,10 +2,12 @@ 3.4 from .env import get_env 3.5 from .type_helpers import ANY, DICT, LIST 3.6 from .file import ConfigFile, ConfigSectionNotFound, ConfigFileError 3.7 +from .app_tools import get_app_root 3.8 3.9 3.10 __all__ = [ 3.11 'get_env', 3.12 'ANY', 'DICT', 'LIST', 3.13 'ConfigFile', 'ConfigSectionNotFound', 'ConfigFileError', 3.14 + 'get_app_root', 3.15 ]
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/src/aw_config/app_tools.py Sat May 04 18:58:50 2024 +0300 4.3 @@ -0,0 +1,34 @@ 4.4 +# coding: utf-8 4.5 +"""\ 4.6 +Различные инструменты, полезные в построении среды исполнения приложений 4.7 +""" 4.8 +from os.path import dirname, abspath, exists, join as join_p 4.9 +from os import listdir 4.10 + 4.11 +from .error import Error 4.12 + 4.13 + 4.14 +class ToolsError(Error): 4.15 + """\ 4.16 + Базовый класс ошибок инструментария 4.17 + """ 4.18 + 4.19 + 4.20 +def get_app_root(file_name) -> str: 4.21 + """\ 4.22 + Пытаемся получить по имени файла модуля директорию расположения всего модуля целиком. 4.23 + Полезно при формировании имён каталогов ресурсов. 4.24 + :param file_name: при вызове должно быть ``__file__`` 4.25 + :returns Имя каталога, в котором находится сам модуль, из файла которого произведён вызов функции. 4.26 + """ 4.27 + res = abspath(file_name) 4.28 + res = dirname(res) 4.29 + 4.30 + while res: 4.31 + if not '__init__.py' in list(map(lambda x: x.lover(), dirname(res))): 4.32 + return res 4.33 + 4.34 + else: 4.35 + res = dirname(res) 4.36 + 4.37 + raise ToolsError(f'Не найдена директория размещения для модуля содержащего: {abspath(file_name)}')