py.lib.aw_config

Yohn Y. 2024-05-04 Child:b76a704f31b1

1:81fc92335324 Go to Latest

py.lib.aw_config/src/aw_config/app_tools.py

+ Модуль получения имени директории размещения приложения

History
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/aw_config/app_tools.py	Sat May 04 18:58:50 2024 +0300
     1.3 @@ -0,0 +1,34 @@
     1.4 +# coding: utf-8
     1.5 +"""\
     1.6 +Различные инструменты, полезные в построении среды исполнения приложений
     1.7 +"""
     1.8 +from os.path import dirname, abspath, exists, join as join_p
     1.9 +from os import listdir
    1.10 +
    1.11 +from .error import Error
    1.12 +
    1.13 +
    1.14 +class ToolsError(Error):
    1.15 +    """\
    1.16 +    Базовый класс ошибок инструментария
    1.17 +    """
    1.18 +
    1.19 +
    1.20 +def get_app_root(file_name) -> str:
    1.21 +    """\
    1.22 +    Пытаемся получить по имени файла модуля директорию расположения всего модуля целиком.
    1.23 +    Полезно при формировании имён каталогов ресурсов.
    1.24 +    :param file_name: при вызове должно быть ``__file__``
    1.25 +    :returns Имя каталога, в котором находится сам модуль, из файла которого произведён вызов функции.
    1.26 +    """
    1.27 +    res = abspath(file_name)
    1.28 +    res = dirname(res)
    1.29 +
    1.30 +    while res:
    1.31 +        if not '__init__.py' in list(map(lambda x: x.lover(), dirname(res))):
    1.32 +            return res
    1.33 +
    1.34 +        else:
    1.35 +            res = dirname(res)
    1.36 +
    1.37 +    raise ToolsError(f'Не найдена директория размещения для модуля содержащего: {abspath(file_name)}')