From 169f73cb360579bbcc8c7d3a642c85efb4c2d023 Mon Sep 17 00:00:00 2001 From: "Brian S. Stephan" Date: Sat, 5 Apr 2014 14:53:05 -0500 Subject: [PATCH] Markov: view/form/etc for teaching lines --- markov/forms.py | 8 ++++++++ markov/models.py | 1 + markov/urls.py | 1 + markov/views.py | 18 +++++++++++++++++- templates/markov/teach_line.html | 16 ++++++++++++++++ 5 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 templates/markov/teach_line.html diff --git a/markov/forms.py b/markov/forms.py index 6aca9b9..c18935c 100644 --- a/markov/forms.py +++ b/markov/forms.py @@ -21,4 +21,12 @@ class LogUploadForm(Form): ignore = CharField(help_text="Comma-separated list of nicks to ignore.", required=False) + +class TeachLineForm(Form): + + """Accept a line that will be imported into Markov stuff.""" + + context = ModelChoiceField(queryset=MarkovContext.objects.all()) + line = CharField() + # vi:tabstop=4:expandtab:autoindent diff --git a/markov/models.py b/markov/models.py index 1e38219..480d4e9 100644 --- a/markov/models.py +++ b/markov/models.py @@ -51,6 +51,7 @@ class MarkovState(models.Model): class Meta: permissions = { ('import_log_file', "Can import states from a log file"), + ('teach_line', "Can teach lines"), } unique_together = ('context', 'k1', 'k2', 'v') diff --git a/markov/urls.py b/markov/urls.py index 7d3ad75..1daf766 100644 --- a/markov/urls.py +++ b/markov/urls.py @@ -9,6 +9,7 @@ urlpatterns = patterns('markov.views', url(r'^$', 'index', name='markov_index'), url(r'^context/(?P\d+)/$', 'context_index', name='markov_context_index'), url(r'^import/$', 'import_file', name='markov_import_file'), + url(r'^teach/$', 'teach_line', name='markov_teach_line'), ) # vi:tabstop=4:expandtab:autoindent diff --git a/markov/views.py b/markov/views.py index da442fc..320e112 100644 --- a/markov/views.py +++ b/markov/views.py @@ -11,7 +11,7 @@ from django.contrib.auth.decorators import permission_required from django.http import HttpResponse from django.shortcuts import get_object_or_404, render -from markov.forms import LogUploadForm +from markov.forms import LogUploadForm, TeachLineForm from markov.models import MarkovContext, MarkovTarget, MarkovState @@ -75,6 +75,22 @@ def import_file(request): return render(request, 'markov/import_file.html', {'form': form}) +@permission_required('teach_line', raise_exception=True) +def teach_line(request): + """Teach one line directly.""" + + if request.method == 'POST': + form = TeachLineForm(request.POST) + if form.is_valid(): + line = form.cleaned_data['line'] + context = form.cleaned_data['context'] + _learn_line(line.rstrip(), context) + else: + form = TeachLineForm() + + return render(request, 'markov/teach_line.html', {'form': form}) + + def _generate_line(context, topics=None, max_words=30): """Generate a Markov chain.""" diff --git a/templates/markov/teach_line.html b/templates/markov/teach_line.html new file mode 100644 index 0000000..e1164e4 --- /dev/null +++ b/templates/markov/teach_line.html @@ -0,0 +1,16 @@ +{% extends 'base.html' %} + +{% block title %}markov teach{% endblock %} + +{% block content %} +
+ {% csrf_token %} + + {{ form }} +
+ +
+{% endblock %} +