py.lib.aw_config

Yohn Y. 2024-05-04 Parent:bece3a8a67a5 Child:b76a704f31b1

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)}')