From 81db0b2381299fe12a707c479c69b6619ad3340e Mon Sep 17 00:00:00 2001 From: michigg Date: Wed, 4 Oct 2017 01:53:08 +0200 Subject: [PATCH] donar first model --- .../donar/management/commands/__init__.py | 0 .../donar/management/commands/import_rooms.py | 14 ++++ ofu_app/apps/donar/migrations/0001_initial.py | 29 ++++++++ .../migrations/0002_auto_20171004_0016.py | 20 ++++++ ofu_app/apps/donar/models.py | 2 +- ofu_app/apps/donar/urls.py | 22 ++++++ ofu_app/apps/donar/utils/migrate_data.py | 63 ++++++++++++++++++ .../donar/utils/parser/univis_rooms_parser.py | 35 ++++++++++ ofu_app/apps/donar/views.py | 6 ++ .../__pycache__/settings.cpython-35.pyc | Bin 2873 -> 2890 bytes .../ofu_app/__pycache__/urls.cpython-35.pyc | Bin 1151 -> 1197 bytes ofu_app/ofu_app/settings.py | 1 + ofu_app/ofu_app/settings.pyc | Bin 3392 -> 3593 bytes ofu_app/ofu_app/urls.py | 1 + ofu_app/templates/donar/home.jinja | 18 +++++ 15 files changed, 210 insertions(+), 1 deletion(-) create mode 100644 ofu_app/apps/donar/management/commands/__init__.py create mode 100644 ofu_app/apps/donar/management/commands/import_rooms.py create mode 100644 ofu_app/apps/donar/migrations/0001_initial.py create mode 100644 ofu_app/apps/donar/migrations/0002_auto_20171004_0016.py create mode 100644 ofu_app/apps/donar/urls.py create mode 100644 ofu_app/apps/donar/utils/migrate_data.py create mode 100644 ofu_app/apps/donar/utils/parser/univis_rooms_parser.py create mode 100644 ofu_app/templates/donar/home.jinja diff --git a/ofu_app/apps/donar/management/commands/__init__.py b/ofu_app/apps/donar/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ofu_app/apps/donar/management/commands/import_rooms.py b/ofu_app/apps/donar/management/commands/import_rooms.py new file mode 100644 index 0000000..36e5371 --- /dev/null +++ b/ofu_app/apps/donar/management/commands/import_rooms.py @@ -0,0 +1,14 @@ +from django.core.management.base import BaseCommand, CommandError +from apps.donar.models import Room +from apps.donar.utils import migrate_data + + +class Command(BaseCommand): + help = "Imports Rooms from Univis PRG" + + def add_arguments(self, parser): + pass + + def handle(self, *args, **options): + migrate_data.main() + self.stdout.write(self.style.SUCCESS('Successfully migrate data')) diff --git a/ofu_app/apps/donar/migrations/0001_initial.py b/ofu_app/apps/donar/migrations/0001_initial.py new file mode 100644 index 0000000..3a6711c --- /dev/null +++ b/ofu_app/apps/donar/migrations/0001_initial.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.2 on 2017-10-03 22:01 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Room', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('key', models.CharField(max_length=60)), + ('address', models.CharField(max_length=60)), + ('building_key', models.CharField(max_length=60)), + ('floor', models.CharField(max_length=60)), + ('name', models.CharField(max_length=60)), + ('orgname', models.CharField(max_length=60)), + ('short', models.CharField(max_length=60)), + ], + ), + ] diff --git a/ofu_app/apps/donar/migrations/0002_auto_20171004_0016.py b/ofu_app/apps/donar/migrations/0002_auto_20171004_0016.py new file mode 100644 index 0000000..522314d --- /dev/null +++ b/ofu_app/apps/donar/migrations/0002_auto_20171004_0016.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.2 on 2017-10-03 22:16 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('donar', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='room', + name='short', + field=models.CharField(max_length=60, unique=True), + ), + ] diff --git a/ofu_app/apps/donar/models.py b/ofu_app/apps/donar/models.py index bf50e3f..1fc2a58 100644 --- a/ofu_app/apps/donar/models.py +++ b/ofu_app/apps/donar/models.py @@ -12,4 +12,4 @@ class Room(models.Model): floor = models.CharField(max_length=MAX_LENGTH) name = models.CharField(max_length=MAX_LENGTH) orgname = models.CharField(max_length=MAX_LENGTH) - short = models.CharField(max_length=MAX_LENGTH) + short = models.CharField(unique=True, max_length=MAX_LENGTH) diff --git a/ofu_app/apps/donar/urls.py b/ofu_app/apps/donar/urls.py new file mode 100644 index 0000000..916e1d0 --- /dev/null +++ b/ofu_app/apps/donar/urls.py @@ -0,0 +1,22 @@ +"""ofu_app URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url + +from apps.donar import views + +urlpatterns = [ + url(r'^$', views.home, name='donar-main'), +] diff --git a/ofu_app/apps/donar/utils/migrate_data.py b/ofu_app/apps/donar/utils/migrate_data.py new file mode 100644 index 0000000..86efda2 --- /dev/null +++ b/ofu_app/apps/donar/utils/migrate_data.py @@ -0,0 +1,63 @@ +import json +from pprint import pprint +from django.db.utils import IntegrityError + +from apps.donar.models import Room +from apps.donar.utils.parser import univis_rooms_parser + +# CONFIG +UNIVIS_RPG_GuK = "http://univis.uni-bamberg.de/prg?search=rooms&department=Fakult%E4t%20Geistes-%20und%20Kulturwissenschaften&show=xml" +UNIVIS_RPG_SoWi = "http://univis.uni-bamberg.de/prg?search=rooms&department=Fakult%E4t%20Sozial-%20und%20Wirtschaftswissenschaften&show=xml" +UNIVIS_RPG_HuWi = "http://univis.uni-bamberg.de/prg?search=rooms&department=Fakult%E4t%20Humanwissenschaften&show=xml" +UNIVIS_RPG_WIAI = "http://univis.uni-bamberg.de/prg?search=rooms&department=Fakult%E4t%20Wirtschaftsinformatik&show=xml" + + +def getJsonFromFile(path): + with open(path, "r") as file: + return json.load(file) + + +def writeFekideDataInDB(data): + + for room in data: + try: + key = "" + address = "" + building_key = "" + floor = "" + name = "" + orgname = "" + short = "" + if '@key' in room: + key = room['@key'] + + if 'address' in room: + address = room['address'] + + if 'buildingkey' in room: + building_key = room['buildingkey'] + if 'floor' in room: + floor = room['floor'] + if 'name' in room: + name = room['name'] + if 'short' in room: + short = room['short'] + + Room.objects.create(key=key, address=address, building_key=building_key, floor=floor, name=name, + orgname=orgname, short=short) + except IntegrityError: + # ignored + break + + +def main(): + # get food jsons + writeFekideDataInDB(univis_rooms_parser.parsePage(UNIVIS_RPG_GuK)) + writeFekideDataInDB(univis_rooms_parser.parsePage(UNIVIS_RPG_SoWi)) + writeFekideDataInDB(univis_rooms_parser.parsePage(UNIVIS_RPG_HuWi)) + writeFekideDataInDB(univis_rooms_parser.parsePage(UNIVIS_RPG_WIAI)) + pprint("Room: " + str(Room.objects.count())) + + +if __name__ == '__main__': + main() diff --git a/ofu_app/apps/donar/utils/parser/univis_rooms_parser.py b/ofu_app/apps/donar/utils/parser/univis_rooms_parser.py new file mode 100644 index 0000000..6e82ee5 --- /dev/null +++ b/ofu_app/apps/donar/utils/parser/univis_rooms_parser.py @@ -0,0 +1,35 @@ +import requests +import datetime +import xmltodict +import json +from pprint import pprint + +# CONFIG +UNIVIS_RPG_GuK = "http://univis.uni-bamberg.de/prg?search=rooms&department=Fakult%E4t%20Geistes-%20und%20Kulturwissenschaften&show=xml" +UNIVIS_RPG_SoWi = "http://univis.uni-bamberg.de/prg?search=rooms&department=Fakult%E4t%20Sozial-%20und%20Wirtschaftswissenschaften&show=xml" +UNIVIS_RPG_HuWi = "http://www.config.de/cgi-bin/prg-wizard.pl" +UNIVIS_RPG_WIAI = "http://univis.uni-bamberg.de/prg?search=rooms&department=Fakult%E4t%20Wirtschaftsinformatik&show=xml" + + +def loadPage(url: str): + return requests.get(url).content + + +def getDay(): + return datetime.datetime.today().strftime("%A, %d.%m.%Y") + + +def getRoom(dict: dict): + rooms = [] + for room in dict['UnivIS']['Room']: + rooms.append(room) + return rooms + + +def parsePage(url): + page = loadPage(url) + dict = xmltodict.parse(page) + rooms = getRoom(dict) + return rooms + +# parsePage() diff --git a/ofu_app/apps/donar/views.py b/ofu_app/apps/donar/views.py index 91ea44a..ad03459 100644 --- a/ofu_app/apps/donar/views.py +++ b/ofu_app/apps/donar/views.py @@ -1,3 +1,9 @@ from django.shortcuts import render +from apps.donar.models import Room + + # Create your views here. +def home(request): + rooms = Room.objects.all() + return render(request, 'donar/home.jinja', {'rooms': rooms}) diff --git a/ofu_app/ofu_app/__pycache__/settings.cpython-35.pyc b/ofu_app/ofu_app/__pycache__/settings.cpython-35.pyc index 762742448880404171a6e8b6b7c942a6fe3089ae..a6bf0ccb1f2a87aaa02be153cc98f3fcdbdb28ec 100644 GIT binary patch delta 364 zcmYk1yGjE=6o$WDmPFRXTQnDAj2dt861;=4@g2m%!6xvBB`Gu*1hGkBZ6SFN3)5(4 zZEb7ii+ENDWH>W?%$(tT|3~&KTgj!<;p^Dp=Gp!Drl7`pykmD;vSbqYq$xtjyBLH zs?zjm`?M!%CQxsSC!dy;bx+05+KxGfogwTFp%#M;aMS1%XU2OtlitUfx80li0nY4= zEx;iz|9=+H5zYb}pL|Km&&;~Y*HqjQ^MoroQ z-H`4K?Hp>+?}c>yc=v4fteuQA*d4>(81^&p56oT9G1oo7-1rc4X}@>xBh1yEOXwIY ykE*MmU~YekRsI{CRq2N#+3IM_*Sf%bt&r>1Ohf=^3>%{uqX44- Nvk;RglMtg2BLGi28F~N! delta 83 zcmZ3>`JY2soR^pDQ{v^wJYuW6g_VSUIC#{T0R6?t+k3(u%J?1X(MAuG@+S+w0$lJ>77hzDiCIL+eBAx zObjcR{sA}qf&PIeE?l_r2e>dX@eg=sG)+1$bKkl5oO|DSGpB|3rK0{P5&IJPwts;C zPmK2`{JNh$7N4I`2owfMI671eGzW@+q9DeXKygq4G!IIGQgC8WTwDO9L5rXzPzIC* z<>1Ugu{aNvz<_671{KhtA{+rKp<(mXWi$qyt$?n8u7XzKoUrs7>(*b;OT@0cia%Pln2g0G~Fpx~q1=jhHksszXhL9yvADE569imh)# zWx8NvDhoRYl@Bl*uR#@pSOnFfN}zjC%edgq>vFUsZP(Lw+CaO8TfpVjJH)lFWtX-5B^^8ZhNJa(%z8ulk{ zW%@Xpnf{FYn*9#_(AT{z)2&Wtr?=O8);4#y&8E@p?U?OO+Y2*w=y_vzb{07mDUDMz z;fHw+<<;4T*qM0XEpgJdj0^p(w$<@+OjyR#u4(x5_V#<0^`h4@wws1IeHpjYZ<&`` dT;GsVmm(R~#q?{uzo^N7OGqKZGL#QV@fYPheHs7& delta 421 zcmY+AyH3L}6ox-1G&IoAmTRG<<$k|QWM&2?m^d5aL{U2-AvPq0m>5ySlVoD!1(4X7 zcnV&ClL{f>Biq02{~UkzQ|oP}>3>HbI*69h z5Vg%=v_cvpCL(kMt)exwj*g;Zq=QHW9Y-R%R$&62B-SZXhc<{4t29mAwbcyTL|f=A zsX5zb>ky~z9NENenJ#-#juvACSqgNv_rbQm@V99cpiKSjRb)~;isMSBU_NUhS z%5D+^-ABgIO=KM1LMAXSnIxG)8riigA8sSYXQLtRAV#^1%<_+6uVAouNgMSzUpvTO z-L1Alle Räume an der OFU +{% endblock %} +{% block content %} +
+
+ {% for room in rooms %} +
+
+

{{ room.name }}

+

Short: {{ room.short }}

+
+
+ {% endfor %} +
+
+{% endblock %} \ No newline at end of file