2008-04-03

ng.app.mailfeed.mailtemplate

Andrey Orlov  2008-04-03 13:32

Компонент предоставляющий шаблон письма и выполняющий заполнение его полей.

Краткое описание пакета

Краткое описание пакета

Продукт представляет простой интерфейс темплейтов для генерации писем по шаблону.

Способ реализации

Письмо формируется двухступенчатой заменой в питоновской строке формата. Предполагается, что строка формата используется два раза, для определения полей "формы" (одинаковых для всех экземпляров письма) и для определения полей адреса (уникальных для каждого экземпляра).

ПРИМЕР:

шаблон 1

Этот шаблон хранится в атрибуте темплейта:

"""Уважаемый %%(aname)s!

Поступила заявка на вакансию:

Вакансия: %(vacancy)s

Имя: %(name)s

Опыт работы: %(experience)s

Возраст: %(age)s

Сайт компании."""
шаблон 2

Этот шаблон получается после первого применения к темплейту списка полей формы:

"""Уважаемый %(aname)s!

Поступила заявка на вакансию:

Вакансия: программист

Имя: Иван Иванов

Опыт работы: более четырех лет

Возраст: 29 лет

Сайт компании."""
шаблон 3

Этот шаблон получается премененим шаблона-2 к адресу:

"""Уважаемый Степан Ломов!

Поступила заявка на вакансию:

Вакансия: программист

Имя: Иван Иванов

Опыт работы: более четырех лет

Возраст: 29 лет

Сайт компании."""
Письмо в MIME

В зависимости от параметров рассылки может быть сформировано письмо в формате MIME, для чего могут использоваться конверторы из продукта ng.app.converter (например, конвертор для ST может быть использован для формирования HTML-части письма в формате с альтернативным содержимым)

Интерфейсы

IMailTemplate

Предоставляет первичный шаблон темплейта

subject : TextLine
Тема письма, содержит строку формата текста
body : Text
Тело письма, содержит строку формата текста
charset : TextLine (UTF-8)
Набор символов, используемый письмом
mimetype : TextLine (text/plain)
Тип содержимого шаблона
converter : TextLine select from convertors vocabulary
Конвертор, используемый для конвертирования письма в html
mimeadapter : TextLine select from adapters vocabulary
Конвертор, используемый для конвертирования письма в MIME-письмо.
isadaptive : Bool (True)
В процессе применения шаблона, несуществующие в словаре ключи заменяются на строку "%(" <ключ> ")s", что позволяет не выделятся явно подстановки первого и второго уровня.
apply() : dict -> IMailTemplate
Функция, выполняющая один шаг преобразования письма, на выходе функции получается неперзистент-объект, с выполененной заменой в полях subject и body по словарю, и копией всех остальных полей.
IMailTempleateExt(IMailTemplate)

Расширенный интерфейс темплейта, со встроенными полями адресов. Расширенный интерфейс используется только у не-перзистент класса, для подачи полей на вход адаптера к IMailMessage.

mailfrom : TextLine
Адрес от которого отправляется письмо.
rcptto : TextLine
Адрес на который отправляется письмо.
IMailTemplateAnnotable
Указывает, что данный объект может иметь аннотацию c IMailTemplate
IMailTemplateUtilitable

Указывает, что данный объект может иметь утилиту с IMailTemplate

template : TextLine select from IMailTemplate utilities vocabulary
Имя темплейта, выбираемого из словаря темплейтов.
IMailMessage

Подготовленное сообщение в формате MIME (или другом формате, безразлично), поля:

body
Текст сообщения
rcptto
Кому сообщение (используется коннектором)

Классы

Классы темплейта подразумевают что темплейт используется в двух режимах: как самостоятельная утилита и как аннотация (см. "Аннотации.txt"). Выбор режима осуществляется указанием интерфейса-маркера (IMailTemplateAnnotable или IMailTemplateUtilitable), а поиск темплейта всегда осуществляется от адаптированием контекста к интерфейсу IMailTemplate. Реализация адаптеров описана в статье Адаптация как способ ассоциации компонент.txt.

MailTemplateBase(object)
Базовый класс темплейта, он же темплейт промежуточного преобразования
MailTemplateAnnotation(MailTemplateBase,Persistent)
Темплейт как аннотация
MailTemplate(MailTemplateAnnotation,Contained)
Темплейт как утилита

Адаптеры

IMailMessageAlternative(IMailMessage): IMailTemplateExt -> IMailMessage

Виды

templateselect.html
Вид для интерфейса IMailTemplateUtilitable
mailtemplate.html
Редактор интерфейса IMailTemplate, что бы создать его так, что бы он не зависел от способа связывания темплейта внимательно прочитайте статью Директивы для создания видов и форм.txt, а также посмотрите реализацию редактирования аннотаций в продукте ng.content.annotation.

Ссылки на эту статью:

Astoon ng.app.mailfeed
Официальный сайт Zope3 Московская группа изучения реактивного движения The Dream Bot Site noooxml