py.lib.aw_web_tools

Yohn Y. 2025-10-15 Parent:376688747096

14:0920ae304dfd Go to Latest

py.lib.aw_web_tools/src/aw_web_tools/simple_template_helper.py

.. 1.202510.1 + Режим фековой авторизации для адаптера authelia. Режим требуется для отладки, поскольку вряд ли на машине разработчика будет развёрнуто это ПО на ранних стадиях разработки (преальфа). Возможно режим будет полезен при поиска проблем в приложении при авторизации.

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