Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
233 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
# -*- coding: utf-8 -*- | ||
# Generated by Django 1.9.4 on 2016-04-04 09:49 | ||
from __future__ import unicode_literals | ||
|
||
from django.db import migrations, models | ||
import microbot.validators | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
dependencies = [ | ||
('microbot', '0014_chatstate_context'), | ||
] | ||
|
||
operations = [ | ||
migrations.AlterField( | ||
model_name='bot', | ||
name='token', | ||
field=models.CharField(db_index=True, help_text='Set token provided by Telegram API.', max_length=100, validators=[microbot.validators.validate_token], verbose_name='Token'), | ||
), | ||
migrations.AlterField( | ||
model_name='handler', | ||
name='pattern', | ||
field=models.CharField(help_text='Regular expression the Handler will be triggered.', max_length=255, validators=[microbot.validators.validate_pattern], verbose_name='Pattern'), | ||
), | ||
migrations.AlterField( | ||
model_name='headerparam', | ||
name='value_template', | ||
field=models.CharField(help_text='Set the value of the parameter. A jinja2 template.', max_length=255, validators=[microbot.validators.validate_template], verbose_name='Value template'), | ||
), | ||
migrations.AlterField( | ||
model_name='request', | ||
name='url_template', | ||
field=models.CharField(help_text='Set the url to request. A jinja2 template.', max_length=255, validators=[microbot.validators.validate_template], verbose_name='Url template'), | ||
), | ||
migrations.AlterField( | ||
model_name='response', | ||
name='keyboard_template', | ||
field=models.TextField(blank=True, help_text='Template to generate keyboard response. In jinja2.', null=True, validators=[microbot.validators.validate_template, microbot.validators.validate_telegram_keyboard], verbose_name='Keyboard template'), | ||
), | ||
migrations.AlterField( | ||
model_name='response', | ||
name='text_template', | ||
field=models.TextField(help_text='Template to generate text response. In jinja2.', validators=[microbot.validators.validate_template, microbot.validators.validate_telegram_text_html], verbose_name='Text template'), | ||
), | ||
migrations.AlterField( | ||
model_name='urlparam', | ||
name='value_template', | ||
field=models.CharField(help_text='Set the value of the parameter. A jinja2 template.', max_length=255, validators=[microbot.validators.validate_template], verbose_name='Value template'), | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,15 @@ | ||
from rest_framework import serializers | ||
from microbot.models import Response | ||
from microbot import validators | ||
|
||
|
||
class ResponseSerializer(serializers.HyperlinkedModelSerializer): | ||
class Meta: | ||
model = Response | ||
fields = ('text_template', 'keyboard_template') | ||
|
||
class ResponseUpdateSerializer(ResponseSerializer): | ||
text_template = serializers.CharField(required=False, max_length=1000) | ||
keyboard_template = serializers.CharField(required=False, max_length=1000) | ||
text_template = serializers.CharField(required=False, max_length=1000, | ||
validators=[validators.validate_template, validators.validate_telegram_text_html]) | ||
keyboard_template = serializers.CharField(required=False, max_length=1000, | ||
validators=[validators.validate_template, validators.validate_telegram_keyboard]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
import re | ||
from django.core.exceptions import ValidationError | ||
from jinja2 import Template | ||
from django.utils.translation import ugettext_lazy as _ | ||
import ast | ||
from HTMLParser import HTMLParser | ||
|
||
def validate_token(value): | ||
if not re.match('[0-9]+:[-_a-zA-Z0-9]+', value): | ||
raise ValidationError(_("%(value)s is not a valid token"), params={'value': value}) | ||
|
||
def validate_template(value): | ||
try: | ||
Template(value) | ||
except: | ||
raise ValidationError(_("Not correct jinja2 template: %(value)s"), params={'value': value}) | ||
|
||
def validate_pattern(value): | ||
try: | ||
re.compile(value) | ||
except: | ||
raise ValidationError(_("Not correct Regex: %(value)s"), params={'value': value}) | ||
|
||
def validate_telegram_keyboard(value): | ||
try: | ||
ast.literal_eval(value) | ||
except: | ||
raise ValidationError(_("Not correct keyboard: %(value)s. Check https://core.telegram.org/bots/api#replykeyboardmarkup"), params={'value': value}) | ||
|
||
def validate_telegram_text_html(value): | ||
tags = ['b', 'i', 'a', 'code', 'pre'] | ||
found = [] | ||
msg = _("Not correct HTML for Telegram message. Check https://core.telegram.org/bots/api#html-style") | ||
|
||
class TelegramHTMLParser(HTMLParser): | ||
def handle_starttag(self, tag, attrs): | ||
tags.index(tag) | ||
found.append(tag) | ||
|
||
def handle_endtag(self, tag): | ||
found.pop(found.index(tag)) | ||
parser = TelegramHTMLParser() | ||
try: | ||
parser.feed(value) | ||
if found: | ||
raise ValidationError(msg) | ||
except: | ||
raise ValidationError(msg) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.