py.lib.aw_web_tools

Yohn Y. 2025-03-02 Child:1e2c40d95710

11:f444d9fab8f8 Go to Latest

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

.. 1.202503.3 + Модуль-обёртка над `SimpleTemplate`

History
1 # coding: utf-8
2 """\
3 Инструментарий, призванный помочь в кодировании генерации страниц, посредством
4 ``Bottle.SimpleTemplate``
5 """
7 from bottle import SimpleTemplate, TemplateError
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)
40 return self.tmpl.render(**kw_params)
42 @staticmethod
43 def set_root(*a):
44 """\
45 Устанавливаем новый корневой каталог, относительного которого будет происходить поиск имён шаблонов
46 при их инициализации.
48 :param *a: Компоненты пути (имена каталогов, его сотавляющих) или имя директории.
49 """
50 global TMPL_ROOT
52 new_root = p_join(*a)
53 if not isdir(new_root):
54 raise ValueError(f'Директория, устанавлиеемая как новый корневой каталог, не существует: {new_root}')
56 with _SPINLOCK:
57 TMPL_ROOT = (new_root,)
59 @staticmethod
60 def add_root(*a):
61 """\
62 Аналогичнен методу ``set_root()``, за тем исключением, что путь добавляется к имеющемуся корню,
63 а не заменяет его.
65 :param *a: Компоненты пути (имена каталогов, его сотавляющих) или имя директории.
66 """
67 global TMPL_ROOT
69 new_root = p_join(*a)
70 if not isdir(new_root):
71 raise ValueError(f'Директория, устанавлиеемая как новый корневой каталог, не существует: {new_root}')
73 with _SPINLOCK:
74 TMPL_ROOT += (new_root,)