From 270ede652ce57578e49f455edae1cef653bed7e7 Mon Sep 17 00:00:00 2001 From: okalintu Date: Thu, 1 Sep 2016 00:28:50 +0300 Subject: [PATCH] implemented abb jobs to infoscreen --- infoscreen/management/commands/importabb.py | 46 ++++++++++++++++++ infoscreen/migrations/0001_initial.py | 27 ++++++++++ .../migrations/0002_auto_20160831_1757.py | 21 ++++++++ infoscreen/models.py | 13 ++++- infoscreen/static/html/abb.html | 11 +++++ infoscreen/static/img/ABB_logo.png | Bin 0 -> 8341 bytes .../static/js/infoscreen_controllers.js | 9 +++- infoscreen/views.py | 15 ++++++ requirements.txt | 3 ++ sikweb/urls.py | 3 ++ 10 files changed, 145 insertions(+), 3 deletions(-) create mode 100644 infoscreen/management/commands/importabb.py create mode 100644 infoscreen/migrations/0001_initial.py create mode 100644 infoscreen/migrations/0002_auto_20160831_1757.py create mode 100644 infoscreen/static/html/abb.html create mode 100644 infoscreen/static/img/ABB_logo.png diff --git a/infoscreen/management/commands/importabb.py b/infoscreen/management/commands/importabb.py new file mode 100644 index 0000000..9e0a587 --- /dev/null +++ b/infoscreen/management/commands/importabb.py @@ -0,0 +1,46 @@ +from django.core.management.base import BaseCommand, CommandError +from django.db.models import Max +from django.conf import settings +from datetime import datetime, timedelta +from pytz import utc +from paramiko.client import SSHClient, AutoAddPolicy, RSAKey +from infoscreen.models import ABBJob +import qrcode + +class Command(BaseCommand): + help = 'import new abbjobs from oldish sikweb' + + def add_arguments(self, parser): + parser.add_argument('keypath') + + def handle(self, *args, **options): + last_id = ABBJob.objects.aggregate(Max('sw_id'))['sw_id__max'] or 0 + client = SSHClient() + client.set_missing_host_key_policy(AutoAddPolicy()) + key = RSAKey.from_private_key_file(options.get("keypath")) + client.connect("otax.ayy.fi", username="sik", pkey=key) + stdin, stdout, stderr = client.exec_command("./abbjobexport.sh {}".format(last_id)) + errors = stderr.read() + if len(errors) > 0: + print(errors) + client.close() + return + data = stdout.read().decode("latin1").strip().split("\n") # shame on latin1 otax!!! + for row in data: + if not row: + continue + cols = row.split('\t',maxsplit=2) + qr_url = gen_qr(cols[0]) + created = datetime.strptime(cols[1], "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc) # todo parse to right timezone + ABBJob.objects.create( + sw_id=int(cols[0]), + created=created, + title=cols[2], + QR=qr_url) + +def gen_qr(sw_id): + img = qrcode.make("http://sahkoinsinoorikilta.fi/news/{}".format(sw_id)) + imgname = "abbjobs_{}.png".format(sw_id) + imgurl = "{}qr/{}".format(settings.MEDIA_URL,imgname) + img.save("{}qr/{}".format(settings.MEDIA_ROOT,imgname)) + return imgurl diff --git a/infoscreen/migrations/0001_initial.py b/infoscreen/migrations/0001_initial.py new file mode 100644 index 0000000..5254f3b --- /dev/null +++ b/infoscreen/migrations/0001_initial.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-08-31 17:54 +from __future__ import unicode_literals + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='ABBJob', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('sw_id', models.IntegerField(default=-1)), + ('title', models.CharField(max_length=255)), + ('QR', models.CharField(default='', max_length=255)), + ('created', models.DateTimeField(default=datetime.datetime.now)), + ], + ), + ] diff --git a/infoscreen/migrations/0002_auto_20160831_1757.py b/infoscreen/migrations/0002_auto_20160831_1757.py new file mode 100644 index 0000000..b21b61d --- /dev/null +++ b/infoscreen/migrations/0002_auto_20160831_1757.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-08-31 17:57 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('infoscreen', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='abbjob', + name='created', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + ] diff --git a/infoscreen/models.py b/infoscreen/models.py index 71a8362..2d4d93a 100644 --- a/infoscreen/models.py +++ b/infoscreen/models.py @@ -1,3 +1,14 @@ from django.db import models +from django.utils import timezone -# Create your models here. +class ABBJob(models.Model): + sw_id = models.IntegerField(default=-1) + title = models.CharField(max_length=255) + QR = models.CharField(max_length=255, default="") + created = models.DateTimeField(default=timezone.now) + + def get_dict(self): + return { + "title": self.title, + "QR": self.QR, + } diff --git a/infoscreen/static/html/abb.html b/infoscreen/static/html/abb.html new file mode 100644 index 0000000..bf65a06 --- /dev/null +++ b/infoscreen/static/html/abb.html @@ -0,0 +1,11 @@ +
+
+
+
TYƖPAIKAT
+
+ +
+
{{ job.title }}
+
+
+
diff --git a/infoscreen/static/img/ABB_logo.png b/infoscreen/static/img/ABB_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..697de6071989d1fe5637a96633c074dff83794c4 GIT binary patch literal 8341 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 literal 0 HcmV?d00001 diff --git a/infoscreen/static/js/infoscreen_controllers.js b/infoscreen/static/js/infoscreen_controllers.js index 75dab24..322a0ec 100644 --- a/infoscreen/static/js/infoscreen_controllers.js +++ b/infoscreen/static/js/infoscreen_controllers.js @@ -9,8 +9,7 @@ app.controller('infoscreen_main', function($scope,$timeout){ template: "/static/html/test1.html?img=siklogo", onload: function(){$scope.imagepath = "/static/img/siklogo.jpg";} },{ - template: "/static/html/test1.html?img=teekkaribileet", - onload: function(){$scope.imagepath = "/static/img/teekkaribileet.jpg";} + template: "/static/html/abb.html" },{ template: "/static/html/test1.html?img=kaukkarit", onload: function(){$scope.imagepath = "/static/img/kaukkarit.jpg";} @@ -23,3 +22,9 @@ app.controller('infoscreen_main', function($scope,$timeout){ } $scope.next() }); +app.controller('ABBController', function($scope, $http){ + $scope.jobs = []; + $http.get("/infoscreen/abbjobs").then(function(response){ + $scope.jobs = response.data; + }) +}); diff --git a/infoscreen/views.py b/infoscreen/views.py index 8e41add..f76bd92 100644 --- a/infoscreen/views.py +++ b/infoscreen/views.py @@ -1,4 +1,19 @@ from django.shortcuts import render +from django.http import HttpResponse +from django.views.decorators.http import require_http_methods +from infoscreen.models import ABBJob +from django.utils import timezone +from datetime import datetime, timedelta +import json def index(request , *args, **kwargs): return render(request, 'infoscreen_index.html',{}) + + +# send abb jobs which have been created less than month ago +@require_http_methods(["GET"]) +def abb_job_list(request, *args, **kwargs): + limit = timezone.now() - timedelta(days=30) + jobs = ABBJob.objects.filter(created__gt=limit) + joblist = list(map(lambda j:j.get_dict(), jobs)) + return HttpResponse(json.dumps(joblist)) diff --git a/requirements.txt b/requirements.txt index ae5ad41..43e0785 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,3 +10,6 @@ ptyprocess==0.5.1 pytz==2016.4 simplegeneric==0.8.1 traitlets==4.2.1 +paramiko==2.0.2 +qrcode==5.3 +Pillow==3.3.1 diff --git a/sikweb/urls.py b/sikweb/urls.py index 51ba699..ad7017e 100644 --- a/sikweb/urls.py +++ b/sikweb/urls.py @@ -31,6 +31,8 @@ from members.views import new_member_request from members.views import member_requests #infoscreen from infoscreen.views import index as infoindex +from infoscreen.views import abb_job_list + urlpatterns = [ # main @@ -51,4 +53,5 @@ urlpatterns = [ url(r'^members/api/request/(?P\d+)$', handle_mem_request), #infoscreen url(r'^infoscreen/$', infoindex), + url(r'^infoscreen/abbjobs$', abb_job_list), ]