From 65a03ced0361eb0ae7070822421d0e6a840cc2f1 Mon Sep 17 00:00:00 2001 From: "Brian S. Stephan" Date: Sat, 13 Jun 2015 12:20:10 -0500 Subject: [PATCH] use adminplus to add admin views move the markov learning views into the admin --- dr_botzo/dr_botzo/settings.py | 3 +- dr_botzo/dr_botzo/urls.py | 5 +- dr_botzo/markov/admin.py | 78 +++++++++++++++++++++- dr_botzo/markov/templates/context.html | 3 - dr_botzo/markov/templates/import_file.html | 23 +++---- dr_botzo/markov/templates/teach_line.html | 23 +++---- dr_botzo/markov/urls.py | 2 - dr_botzo/markov/views.py | 60 ----------------- requirements.txt | 1 + 9 files changed, 106 insertions(+), 92 deletions(-) diff --git a/dr_botzo/dr_botzo/settings.py b/dr_botzo/dr_botzo/settings.py index 830c822..2a6c8cb 100644 --- a/dr_botzo/dr_botzo/settings.py +++ b/dr_botzo/dr_botzo/settings.py @@ -29,13 +29,14 @@ ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = ( - 'django.contrib.admin', + 'django.contrib.admin.apps.SimpleAdminConfig', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django_extensions', + 'adminplus', 'facts', 'ircbot', 'karma', diff --git a/dr_botzo/dr_botzo/urls.py b/dr_botzo/dr_botzo/urls.py index 5a96da8..baef8e8 100644 --- a/dr_botzo/dr_botzo/urls.py +++ b/dr_botzo/dr_botzo/urls.py @@ -1,6 +1,9 @@ from django.conf.urls import patterns, include, url - from django.contrib import admin + +from adminplus.sites import AdminSitePlus + +admin.site = AdminSitePlus() admin.autodiscover() urlpatterns = patterns('', diff --git a/dr_botzo/markov/admin.py b/dr_botzo/markov/admin.py index 3ad7b83..bafbeb6 100644 --- a/dr_botzo/markov/admin.py +++ b/dr_botzo/markov/admin.py @@ -1,7 +1,83 @@ -from django.contrib import admin +"""Manage Markov models and administrative commands.""" +import logging + +from django.contrib import admin +from django.contrib.auth.decorators import permission_required +from django.shortcuts import render + +from markov.forms import LogUploadForm, TeachLineForm +import markov.lib as markovlib from markov.models import MarkovContext, MarkovTarget, MarkovState + +log = logging.getLogger('markov.admin') + + admin.site.register(MarkovContext) admin.site.register(MarkovTarget) admin.site.register(MarkovState) + + +@permission_required('import_log_file', raise_exception=True) +def import_file(request): + """Accept a file upload and turn it into markov stuff. + + Current file formats supported: + * weechat + """ + + if request.method == 'POST': + form = LogUploadForm(request.POST, request.FILES) + if form.is_valid(): + log_file = request.FILES['log_file'] + context = form.cleaned_data['context'] + ignores = form.cleaned_data['ignore_nicks'].split(',') + strips = form.cleaned_data['strip_prefixes'].split(' ') + + whos = [] + for line in log_file: + (timestamp, who, what) = line.decode('utf-8').split('\t', 2) + + if who in ('-->', '<--', '--', ' *'): + continue + + if who in ignores: + continue + + whos.append(who) + + # this is a line we probably care about now + what = [x for x in what.rstrip().split(' ') if x not in strips] + markovlib.learn_line(' '.join(what), context) + + log.debug(set(whos)) + form = LogUploadForm() + else: + form = LogUploadForm() + + return render(request, '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'] + strips = form.cleaned_data['strip_prefixes'].split(' ') + what = [x for x in line.rstrip().split(' ') if x not in strips] + markovlib.learn_line(' '.join(what), context) + form = TeachLineForm() + else: + form = TeachLineForm() + + return render(request, 'teach_line.html', {'form': form}) + + +admin.site.register_view('markovimportfile/', "Markov - Import log file", view=import_file, + urlname='markov_import_file') +admin.site.register_view('markovteach/', "Markov - Teach line", view=teach_line, urlname='markov_teach_line') diff --git a/dr_botzo/markov/templates/context.html b/dr_botzo/markov/templates/context.html index 5112050..44bb774 100644 --- a/dr_botzo/markov/templates/context.html +++ b/dr_botzo/markov/templates/context.html @@ -6,6 +6,3 @@

{{ chain }}

in: {{ elapsed }}s

{% endblock %} - diff --git a/dr_botzo/markov/templates/import_file.html b/dr_botzo/markov/templates/import_file.html index 4d07627..70bd456 100644 --- a/dr_botzo/markov/templates/import_file.html +++ b/dr_botzo/markov/templates/import_file.html @@ -1,16 +1,15 @@ -{% extends 'base.html' %} +{% extends 'adminplus/index.html' %} -{% block title %}markov import{% endblock %} +{% block title %}Markov - Import log file{% endblock %} {% block content %} -
- {% csrf_token %} - - {{ form }} -
- -
+
+
+ {% csrf_token %} + + {{ form }} +
+ +
+
{% endblock %} - diff --git a/dr_botzo/markov/templates/teach_line.html b/dr_botzo/markov/templates/teach_line.html index e1164e4..8353010 100644 --- a/dr_botzo/markov/templates/teach_line.html +++ b/dr_botzo/markov/templates/teach_line.html @@ -1,16 +1,15 @@ -{% extends 'base.html' %} +{% extends 'adminplus/index.html' %} -{% block title %}markov teach{% endblock %} +{% block title %}Markov - Teach line{% endblock %} {% block content %} -
- {% csrf_token %} - - {{ form }} -
- -
+
+
+ {% csrf_token %} + + {{ form }} +
+ +
+
{% endblock %} - diff --git a/dr_botzo/markov/urls.py b/dr_botzo/markov/urls.py index b936ae1..a1d0fd2 100644 --- a/dr_botzo/markov/urls.py +++ b/dr_botzo/markov/urls.py @@ -5,6 +5,4 @@ from django.conf.urls import patterns, url 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'), ) diff --git a/dr_botzo/markov/views.py b/dr_botzo/markov/views.py index 66417d0..47c8ee1 100644 --- a/dr_botzo/markov/views.py +++ b/dr_botzo/markov/views.py @@ -3,11 +3,9 @@ import logging import time -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, TeachLineForm import markov.lib as markovlib from markov.models import MarkovContext @@ -32,61 +30,3 @@ def context_index(request, context_id): return render(request, 'context.html', {'chain': chain, 'context': context, 'elapsed': end_t - start_t}) - - -@permission_required('import_log_file', raise_exception=True) -def import_file(request): - """Accept a file upload and turn it into markov stuff. - - Current file formats supported: - * weechat - - """ - - if request.method == 'POST': - form = LogUploadForm(request.POST, request.FILES) - if form.is_valid(): - log_file = request.FILES['log_file'] - context = form.cleaned_data['context'] - ignores = form.cleaned_data['ignore_nicks'].split(',') - strips = form.cleaned_data['strip_prefixes'].split(' ') - - whos = [] - for line in log_file: - (timestamp, who, what) = line.decode('utf-8').split('\t', 2) - - if who in ('-->', '<--', '--', ' *'): - continue - - if who in ignores: - continue - - whos.append(who) - - # this is a line we probably care about now - what = [x for x in what.rstrip().split(' ') if x not in strips] - markovlib.learn_line(' '.join(what), context) - - log.debug(set(whos)) - else: - form = LogUploadForm() - - return render(request, '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'] - strips = form.cleaned_data['strip_prefixes'].split(' ') - what = [x for x in line.rstrip().split(' ') if x not in strips] - markovlib.learn_line(' '.join(what), context) - else: - form = TeachLineForm() - - return render(request, 'teach_line.html', {'form': form}) diff --git a/requirements.txt b/requirements.txt index 96d4923..c760540 100644 --- a/requirements.txt +++ b/requirements.txt @@ -29,3 +29,4 @@ tempora==1.3 twython==3.0.0 yg.lockfile==2.0 zc.lockfile==1.1.0 +django-adminplus==0.3