From 9f6f0aeaf4bb08cbad9f62d6d399568ce2fe1dd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juuso=20K=C3=A4enm=C3=A4ki?= Date: Tue, 30 Aug 2016 00:13:23 +0300 Subject: [PATCH 1/6] =?UTF-8?q?Lis=C3=A4tty=20HSL-bussiaiktaulu.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infoscreen/hsl.html | 129 ++++++++++++++++++++++++++++++++++++++++++++ infoscreen/hsl.py | 16 ++++++ 2 files changed, 145 insertions(+) create mode 100644 infoscreen/hsl.html create mode 100644 infoscreen/hsl.py diff --git a/infoscreen/hsl.html b/infoscreen/hsl.html new file mode 100644 index 0000000..ba6bceb --- /dev/null +++ b/infoscreen/hsl.html @@ -0,0 +1,129 @@ + + + + +
+ + + + + + + + + + + + + + +
+ Aika + + Bussin numero + + Pysäkki + + Päätepysäkki +
+ {{x.time}} + + {{x.bus}} + + {{x.stop}} + + {{x.laststop}} +
+
+ + diff --git a/infoscreen/hsl.py b/infoscreen/hsl.py new file mode 100644 index 0000000..3fa5df9 --- /dev/null +++ b/infoscreen/hsl.py @@ -0,0 +1,16 @@ +import json +import urllib.request + +usernm="hsl-api käyttäjä tähän" +passwd="salasana tähän" +src = urllib.request.urlopen("http://api.reittiopas.fi/hsl/prod/?user="+usernm+"&pass="+passwd+"&request=stops_area¢er_coordinate=2545565,6675319").read().decode("utf-8") +data = json.loads(src); +arr=[] +for element in data: + src = urllib.request.urlopen("http://api.reittiopas.fi/hsl/prod/?user="+usernm+"&pass="+passwd+"&request=stop&code="+element['code']).read().decode("utf-8") + parsed = json.loads(src)[0] + arr.append({"name":parsed['name_fi'],"lines":parsed['lines'],"dist":element['dist'],"departures":parsed['departures']}) +file=open('json','w') +file.write(json.dumps(arr)) +file.close() + From 77612d56754a644e5bd4b1b6fb1e385aecd87442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juuso=20K=C3=A4enm=C3=A4ki?= Date: Tue, 30 Aug 2016 03:06:26 +0300 Subject: [PATCH 2/6] Animoitu viahto infoscreeniin. --- infoscreen/static/css/infoscreen.css | 18 +++++++++++++++++- infoscreen/static/js/infoscreen_controllers.js | 10 +++++----- infoscreen/templates/infoscreen_index.html | 7 +++++-- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/infoscreen/static/css/infoscreen.css b/infoscreen/static/css/infoscreen.css index 1df6617..ef39121 100644 --- a/infoscreen/static/css/infoscreen.css +++ b/infoscreen/static/css/infoscreen.css @@ -18,4 +18,20 @@ display: block; margin-left: auto; margin-right: auto; -} \ No newline at end of file +} + +.swap-animation.ng-enter, .swap-animation.ng-leave { + transition:0.5s linear all; +} +.swap-animation.ng-enter { + opacity:0; +} +.swap-animation.ng-enter-active { + opacity:1; +} +.swap-animation.ng-leave { + opacity:1; +} +.swap-animation.ng-leave-active { + opacity:0; +} diff --git a/infoscreen/static/js/infoscreen_controllers.js b/infoscreen/static/js/infoscreen_controllers.js index 9ecfbc1..75dab24 100644 --- a/infoscreen/static/js/infoscreen_controllers.js +++ b/infoscreen/static/js/infoscreen_controllers.js @@ -1,9 +1,9 @@ -var app = angular.module('infoApp', []); +var app = angular.module('infoApp', ['ngAnimate']); -app.controller('infoscreen_main', function($scope, $http,$timeout){ - var index = -1; +app.controller('infoscreen_main', function($scope,$timeout){ + $scope.index = -1; var templates = [ { template: "/static/html/test1.html?img=siklogo", @@ -17,8 +17,8 @@ app.controller('infoscreen_main', function($scope, $http,$timeout){ }, ]; $scope.next = function(){ - index = (index + 1) % templates.length; - $scope.active = templates[index]; + $scope.index = ($scope.index + 1) % templates.length; + $scope.active = templates[$scope.index]; $timeout($scope.next,5000); } $scope.next() diff --git a/infoscreen/templates/infoscreen_index.html b/infoscreen/templates/infoscreen_index.html index 3ac5a3b..ae55891 100644 --- a/infoscreen/templates/infoscreen_index.html +++ b/infoscreen/templates/infoscreen_index.html @@ -7,6 +7,7 @@ Infoscreen + @@ -15,8 +16,10 @@ -
-
+
+
+
+
From 270ede652ce57578e49f455edae1cef653bed7e7 Mon Sep 17 00:00:00 2001 From: okalintu Date: Thu, 1 Sep 2016 00:28:50 +0300 Subject: [PATCH 3/6] 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), ] From b37bfd289893efa7f5a50500ef2c8684b8be378c Mon Sep 17 00:00:00 2001 From: okalintu Date: Thu, 1 Sep 2016 18:40:45 +0300 Subject: [PATCH 4/6] fixed one missing slash --- infoscreen/management/commands/importabb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infoscreen/management/commands/importabb.py b/infoscreen/management/commands/importabb.py index 9e0a587..3db581c 100644 --- a/infoscreen/management/commands/importabb.py +++ b/infoscreen/management/commands/importabb.py @@ -42,5 +42,5 @@ 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)) + img.save("{}/qr/{}".format(settings.MEDIA_ROOT,imgname)) return imgurl From b56df970b53e5791f677c1d9f34fc153eacc7a22 Mon Sep 17 00:00:00 2001 From: Sika Production Date: Thu, 1 Sep 2016 20:06:46 +0300 Subject: [PATCH 5/6] changed infoscreen rotation time from 5 -> 15s --- infoscreen/static/js/infoscreen_controllers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infoscreen/static/js/infoscreen_controllers.js b/infoscreen/static/js/infoscreen_controllers.js index 322a0ec..a0636e0 100644 --- a/infoscreen/static/js/infoscreen_controllers.js +++ b/infoscreen/static/js/infoscreen_controllers.js @@ -18,7 +18,7 @@ app.controller('infoscreen_main', function($scope,$timeout){ $scope.next = function(){ $scope.index = ($scope.index + 1) % templates.length; $scope.active = templates[$scope.index]; - $timeout($scope.next,5000); + $timeout($scope.next,15000); } $scope.next() }); From ae6340e0c27c4ce01f0933299efc73e9012b7a3e Mon Sep 17 00:00:00 2001 From: okalintu Date: Thu, 1 Sep 2016 22:12:56 +0300 Subject: [PATCH 6/6] added fujitsu logo to rotation --- infoscreen/static/img/fujitsu.png | Bin 0 -> 57095 bytes infoscreen/static/js/infoscreen_controllers.js | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 infoscreen/static/img/fujitsu.png diff --git a/infoscreen/static/img/fujitsu.png b/infoscreen/static/img/fujitsu.png new file mode 100644 index 0000000000000000000000000000000000000000..825db43b62d22fc73b3627e58500fd70edbb23df GIT binary patch literal 57095 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

bO$Gfm;i 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