py.lib.aw_config
2024-10-30
Parent:b76a704f31b1
py.lib.aw_config/src/aw_config/app_tools.py
.. 0.202410.1
| awgur@1 | 1 # coding: utf-8 |
| awgur@1 | 2 """\ |
| awgur@1 | 3 Различные инструменты, полезные в построении среды исполнения приложений |
| awgur@1 | 4 """ |
| awgur@2 | 5 from os.path import dirname, abspath |
| awgur@1 | 6 from os import listdir |
| awgur@1 | 7 |
| awgur@1 | 8 from .error import Error |
| awgur@1 | 9 |
| awgur@1 | 10 |
| awgur@1 | 11 class ToolsError(Error): |
| awgur@1 | 12 """\ |
| awgur@1 | 13 Базовый класс ошибок инструментария |
| awgur@1 | 14 """ |
| awgur@1 | 15 |
| awgur@1 | 16 |
| awgur@2 | 17 # noinspection GrazieInspection |
| awgur@1 | 18 def get_app_root(file_name) -> str: |
| awgur@1 | 19 """\ |
| awgur@1 | 20 Пытаемся получить по имени файла модуля директорию расположения всего модуля целиком. |
| awgur@1 | 21 Полезно при формировании имён каталогов ресурсов. |
| awgur@2 | 22 :param file_name: При вызове должно быть ``__file__`` |
| awgur@1 | 23 :returns Имя каталога, в котором находится сам модуль, из файла которого произведён вызов функции. |
| awgur@1 | 24 """ |
| awgur@1 | 25 res = abspath(file_name) |
| awgur@1 | 26 res = dirname(res) |
| awgur@1 | 27 |
| awgur@1 | 28 while res: |
| awgur@2 | 29 if '__init__.py' not in list(map(lambda x: x.lower(), listdir(res))): |
| awgur@1 | 30 return res |
| awgur@1 | 31 |
| awgur@1 | 32 else: |
| awgur@1 | 33 res = dirname(res) |
| awgur@1 | 34 |
| awgur@1 | 35 raise ToolsError(f'Не найдена директория размещения для модуля содержащего: {abspath(file_name)}') |
| awgur@2 | 36 |
| awgur@2 | 37 |