py.lib.aw_web_tools
11:f444d9fab8f8 Browse Files
.. 1.202503.3 + Модуль-обёртка над `SimpleTemplate`
setup.py src/aw_web_tools/simple_template_helper.py
1.1 --- a/setup.py Sat Nov 09 17:01:04 2024 +0300 1.2 +++ b/setup.py Sun Mar 02 15:58:06 2025 +0300 1.3 @@ -2,7 +2,7 @@ 1.4 1.5 setup( 1.6 name='aw_web_tools', 1.7 - version='1.202411.2', 1.8 + version='1.202503.3', 1.9 packages=['aw_web_tools'], 1.10 package_dir={'aw_web_tools': 'src/aw_web_tools'}, 1.11 description='Инструментарий для Web-разработки'
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/src/aw_web_tools/simple_template_helper.py Sun Mar 02 15:58:06 2025 +0300 2.3 @@ -0,0 +1,74 @@ 2.4 +# coding: utf-8 2.5 +"""\ 2.6 +Инструментарий, призванный помочь в кодировании генерации страниц, посредством 2.7 +``Bottle.SimpleTemplate`` 2.8 +""" 2.9 + 2.10 +from bottle import SimpleTemplate, TemplateError 2.11 +from os.path import join as p_join, isdir 2.12 +from os import getcwd 2.13 +from threading import RLock 2.14 + 2.15 +_SPINLOCK = RLock() 2.16 +TMPL_ROOT = (getcwd(),) 2.17 + 2.18 + 2.19 +class SimpleTmplWrapper(object): 2.20 + def __init__(self, file_name: str, **static_params): 2.21 + """ 2.22 + :param file_name: Имя файла шаблона, по которому его сможет отыскать класс ``SimpleTemplate`` 2.23 + :param static_params: Параметры, добавляемые в шаблон страницы при каждой генерации 2.24 + """ 2.25 + try: 2.26 + self.tmpl = SimpleTemplate(name=file_name, lookup=TMPL_ROOT) 2.27 + 2.28 + except TemplateError as e: 2.29 + raise ValueError(f'Ошибка в инициализации шаблона: {e}') 2.30 + 2.31 + self.static_params = static_params 2.32 + 2.33 + def __call__(self, **params): 2.34 + """\ 2.35 + Сгенерировать страницу по шаблону, обёткой которого является этот класс 2.36 + 2.37 + :param params: Параметры шаблона, которые обновляют заданные при инициализации класса параметры и передаются 2.38 + в метод ``SimpleTemplate.render()`` через параметры ключ-значение. 2.39 + :return: Результат ``SimpleTemplate.render()`` - сгенерированную страницу 2.40 + """ 2.41 + kw_params = self.static_params.copy() 2.42 + kw_params.update(params) 2.43 + return self.tmpl.render(**kw_params) 2.44 + 2.45 + @staticmethod 2.46 + def set_root(*a): 2.47 + """\ 2.48 + Устанавливаем новый корневой каталог, относительного которого будет происходить поиск имён шаблонов 2.49 + при их инициализации. 2.50 + 2.51 + :param *a: Компоненты пути (имена каталогов, его сотавляющих) или имя директории. 2.52 + """ 2.53 + global TMPL_ROOT 2.54 + 2.55 + new_root = p_join(*a) 2.56 + if not isdir(new_root): 2.57 + raise ValueError(f'Директория, устанавлиеемая как новый корневой каталог, не существует: {new_root}') 2.58 + 2.59 + with _SPINLOCK: 2.60 + TMPL_ROOT = (new_root,) 2.61 + 2.62 + @staticmethod 2.63 + def add_root(*a): 2.64 + """\ 2.65 + Аналогичнен методу ``set_root()``, за тем исключением, что путь добавляется к имеющемуся корню, 2.66 + а не заменяет его. 2.67 + 2.68 + :param *a: Компоненты пути (имена каталогов, его сотавляющих) или имя директории. 2.69 + """ 2.70 + global TMPL_ROOT 2.71 + 2.72 + new_root = p_join(*a) 2.73 + if not isdir(new_root): 2.74 + raise ValueError(f'Директория, устанавлиеемая как новый корневой каталог, не существует: {new_root}') 2.75 + 2.76 + with _SPINLOCK: 2.77 + TMPL_ROOT += (new_root,)