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