py.lib.aw_config
2024-05-04
Child:b76a704f31b1
py.lib.aw_config/src/aw_config/app_tools.py
+ Модуль получения имени директории размещения приложения
| awgur@1 | 1 # coding: utf-8 |
| awgur@1 | 2 """\ |
| awgur@1 | 3 Различные инструменты, полезные в построении среды исполнения приложений |
| awgur@1 | 4 """ |
| awgur@1 | 5 from os.path import dirname, abspath, exists, join as join_p |
| 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@1 | 17 def get_app_root(file_name) -> str: |
| awgur@1 | 18 """\ |
| awgur@1 | 19 Пытаемся получить по имени файла модуля директорию расположения всего модуля целиком. |
| awgur@1 | 20 Полезно при формировании имён каталогов ресурсов. |
| awgur@1 | 21 :param file_name: при вызове должно быть ``__file__`` |
| awgur@1 | 22 :returns Имя каталога, в котором находится сам модуль, из файла которого произведён вызов функции. |
| awgur@1 | 23 """ |
| awgur@1 | 24 res = abspath(file_name) |
| awgur@1 | 25 res = dirname(res) |
| awgur@1 | 26 |
| awgur@1 | 27 while res: |
| awgur@1 | 28 if not '__init__.py' in list(map(lambda x: x.lover(), dirname(res))): |
| awgur@1 | 29 return res |
| awgur@1 | 30 |
| awgur@1 | 31 else: |
| awgur@1 | 32 res = dirname(res) |
| awgur@1 | 33 |
| awgur@1 | 34 raise ToolsError(f'Не найдена директория размещения для модуля содержащего: {abspath(file_name)}') |