py.lib.aw_web_tools

Yohn Y. 2025-03-02 Parent:74f5377d83ab Child:1e2c40d95710

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