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 7627424..a6bf0cc 100644 Binary files a/ofu_app/ofu_app/__pycache__/settings.cpython-35.pyc and b/ofu_app/ofu_app/__pycache__/settings.cpython-35.pyc differ diff --git a/ofu_app/ofu_app/__pycache__/urls.cpython-35.pyc b/ofu_app/ofu_app/__pycache__/urls.cpython-35.pyc index a7782e4..f36e903 100644 Binary files a/ofu_app/ofu_app/__pycache__/urls.cpython-35.pyc and b/ofu_app/ofu_app/__pycache__/urls.cpython-35.pyc differ diff --git a/ofu_app/ofu_app/settings.py b/ofu_app/ofu_app/settings.py index 249d803..ec63abd 100644 --- a/ofu_app/ofu_app/settings.py +++ b/ofu_app/ofu_app/settings.py @@ -37,6 +37,7 @@ INSTALLED_APPS = [ 'django_jinja', 'apps.food', 'apps.events', + 'apps.donar', ] MIDDLEWARE = [ diff --git a/ofu_app/ofu_app/settings.pyc b/ofu_app/ofu_app/settings.pyc index cb2a794..5b0b564 100644 Binary files a/ofu_app/ofu_app/settings.pyc and b/ofu_app/ofu_app/settings.pyc differ diff --git a/ofu_app/ofu_app/urls.py b/ofu_app/ofu_app/urls.py index 1fd08dd..5582fb5 100644 --- a/ofu_app/ofu_app/urls.py +++ b/ofu_app/ofu_app/urls.py @@ -24,4 +24,5 @@ urlpatterns = [ # -- Apps -- url(r'^food/', include('apps.food.urls')), url(r'^events/', include('apps.events.urls')), + url(r'^donar/', include('apps.donar.urls')), ] diff --git a/ofu_app/templates/donar/home.jinja b/ofu_app/templates/donar/home.jinja new file mode 100644 index 0000000..a4f7aaf --- /dev/null +++ b/ofu_app/templates/donar/home.jinja @@ -0,0 +1,18 @@ +{% extends 'base.jinja' %} +{% block headline %} +

Alle 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