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
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,)