Source code for permabots.models.response

# -*- coding: utf-8 -*-
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
import logging
from jinja2 import Environment
from permabots.models.base import PermabotsModel
from permabots import validators

logger = logging.getLogger(__name__)

@python_2_unicode_compatible    
[docs]class Response(PermabotsModel): """ Model to generate a response to send in a message. """ text_template = models.TextField(verbose_name=_("Text template"), validators=[validators.validate_template, validators.validate_telegram_text_html], help_text=_("Template to generate text response. In jinja2 format. http://jinja.pocoo.org/")) keyboard_template = models.TextField(null=True, blank=True, verbose_name=_("Keyboard template"), validators=[validators.validate_template, validators.validate_telegram_keyboard], help_text=_("Template to generate keyboard response. In jinja2 format. http://jinja.pocoo.org/")) class Meta: verbose_name = _('Response') verbose_name_plural = _('Responses') def __str__(self): return "(text:%s, keyboard:%s)" % (self.text_template, self.keyboard_template)
[docs] def process(self, **context): """ Render response templates with context :param context: Context generated while processing a conversation handler or a notification hook :returns: Text and keyboard response """ env = Environment(extensions=['jinja2_time.TimeExtension']) response_text_template = env.from_string(self.text_template) response_text = response_text_template.render(**context) logger.debug("Response %s generates text %s" % (self.text_template, response_text)) if self.keyboard_template: response_keyboard_template = env.from_string(self.keyboard_template) response_keyboard = response_keyboard_template.render(**context) else: response_keyboard = None logger.debug("Response %s generates keyboard %s" % (self.keyboard_template, response_keyboard)) return response_text, response_keyboard