py.lib.aw_web_tools
2025-10-15
Parent:376688747096
py.lib.aw_web_tools/src/aw_web_tools/simple_template_helper.py
.. 1.202510.1 + Режим фековой авторизации для адаптера authelia. Режим требуется для отладки, поскольку вряд ли на машине разработчика будет развёрнуто это ПО на ранних стадиях разработки (преальфа). Возможно режим будет полезен при поиска проблем в приложении при авторизации.
| awgur@11 | 1 # coding: utf-8 |
| awgur@11 | 2 """\ |
| awgur@11 | 3 Инструментарий, призванный помочь в кодировании генерации страниц, посредством |
| awgur@11 | 4 ``Bottle.SimpleTemplate`` |
| awgur@11 | 5 """ |
| awgur@11 | 6 |
| awgur@13 | 7 from bottle import SimpleTemplate, TemplateError, static_file |
| awgur@11 | 8 from os.path import join as p_join, isdir |
| awgur@11 | 9 from os import getcwd |
| awgur@11 | 10 from threading import RLock |
| awgur@11 | 11 |
| awgur@11 | 12 _SPINLOCK = RLock() |
| awgur@11 | 13 TMPL_ROOT = (getcwd(),) |
| awgur@11 | 14 |
| awgur@11 | 15 |
| awgur@11 | 16 class SimpleTmplWrapper(object): |
| awgur@13 | 17 def __init__(self, file_name: str, **static_params): |
| awgur@11 | 18 """ |
| awgur@11 | 19 :param file_name: Имя файла шаблона, по которому его сможет отыскать класс ``SimpleTemplate`` |
| awgur@11 | 20 :param static_params: Параметры, добавляемые в шаблон страницы при каждой генерации |
| awgur@11 | 21 """ |
| awgur@11 | 22 try: |
| awgur@11 | 23 self.tmpl = SimpleTemplate(name=file_name, lookup=TMPL_ROOT) |
| awgur@11 | 24 |
| awgur@11 | 25 except TemplateError as e: |
| awgur@11 | 26 raise ValueError(f'Ошибка в инициализации шаблона: {e}') |
| awgur@11 | 27 |
| awgur@11 | 28 self.static_params = static_params |
| awgur@11 | 29 |
| awgur@11 | 30 def __call__(self, **params): |
| awgur@11 | 31 """\ |
| awgur@12 | 32 Сгенерировать страницу по шаблону, обёрткой которого является этот класс |
| awgur@11 | 33 |
| awgur@11 | 34 :param params: Параметры шаблона, которые обновляют заданные при инициализации класса параметры и передаются |
| awgur@11 | 35 в метод ``SimpleTemplate.render()`` через параметры ключ-значение. |
| awgur@11 | 36 :return: Результат ``SimpleTemplate.render()`` - сгенерированную страницу |
| awgur@11 | 37 """ |
| awgur@11 | 38 kw_params = self.static_params.copy() |
| awgur@11 | 39 kw_params.update(params) |
| awgur@12 | 40 |
| awgur@11 | 41 return self.tmpl.render(**kw_params) |
| awgur@11 | 42 |
| awgur@13 | 43 @classmethod |
| awgur@13 | 44 def init_devel_factory(cls, file_name: str, **static_params): |
| awgur@13 | 45 """\ |
| awgur@13 | 46 Вместо объекта создаётся фабрика объектов, при кажом вызове которой инициализируется новый объект. |
| awgur@13 | 47 |
| awgur@13 | 48 Помогает в работе над шаблонами |
| awgur@13 | 49 :param file_name: Имя файла шаблона, по которому его сможет отыскать класс ``SimpleTemplate`` |
| awgur@13 | 50 :param static_params: Параметры, добавляемые в шаблон страницы при каждой генерации |
| awgur@13 | 51 """ |
| awgur@13 | 52 |
| awgur@13 | 53 def func(*a, **kwa): |
| awgur@13 | 54 obj = cls(file_name=file_name, **static_params) |
| awgur@13 | 55 |
| awgur@13 | 56 return obj(*a, **kwa) |
| awgur@13 | 57 |
| awgur@13 | 58 return func |
| awgur@13 | 59 |
| awgur@11 | 60 @staticmethod |
| awgur@11 | 61 def set_root(*a): |
| awgur@11 | 62 """\ |
| awgur@11 | 63 Устанавливаем новый корневой каталог, относительного которого будет происходить поиск имён шаблонов |
| awgur@11 | 64 при их инициализации. |
| awgur@11 | 65 |
| awgur@11 | 66 :param *a: Компоненты пути (имена каталогов, его сотавляющих) или имя директории. |
| awgur@11 | 67 """ |
| awgur@11 | 68 global TMPL_ROOT |
| awgur@11 | 69 |
| awgur@11 | 70 new_root = p_join(*a) |
| awgur@11 | 71 if not isdir(new_root): |
| awgur@11 | 72 raise ValueError(f'Директория, устанавлиеемая как новый корневой каталог, не существует: {new_root}') |
| awgur@11 | 73 |
| awgur@11 | 74 with _SPINLOCK: |
| awgur@11 | 75 TMPL_ROOT = (new_root,) |
| awgur@11 | 76 |
| awgur@11 | 77 @staticmethod |
| awgur@11 | 78 def add_root(*a): |
| awgur@11 | 79 """\ |
| awgur@11 | 80 Аналогичнен методу ``set_root()``, за тем исключением, что путь добавляется к имеющемуся корню, |
| awgur@11 | 81 а не заменяет его. |
| awgur@11 | 82 |
| awgur@11 | 83 :param *a: Компоненты пути (имена каталогов, его сотавляющих) или имя директории. |
| awgur@11 | 84 """ |
| awgur@11 | 85 global TMPL_ROOT |
| awgur@11 | 86 |
| awgur@11 | 87 new_root = p_join(*a) |
| awgur@11 | 88 if not isdir(new_root): |
| awgur@11 | 89 raise ValueError(f'Директория, устанавлиеемая как новый корневой каталог, не существует: {new_root}') |
| awgur@11 | 90 |
| awgur@11 | 91 with _SPINLOCK: |
| awgur@11 | 92 TMPL_ROOT += (new_root,) |