donar first model

This commit is contained in:
Götz 2017-10-04 01:53:08 +02:00
parent 5332a4ac4d
commit 81db0b2381
15 changed files with 210 additions and 1 deletions

View File

@ -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'))

View File

@ -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)),
],
),
]

View File

@ -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),
),
]

View File

@ -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)

View File

@ -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'),
]

View File

@ -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()

View File

@ -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()

View File

@ -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})

View File

@ -37,6 +37,7 @@ INSTALLED_APPS = [
'django_jinja',
'apps.food',
'apps.events',
'apps.donar',
]
MIDDLEWARE = [

Binary file not shown.

View File

@ -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')),
]

View File

@ -0,0 +1,18 @@
{% extends 'base.jinja' %}
{% block headline %}
<h1 class="text-center">Alle Räume an der OFU </h1>
{% endblock %}
{% block content %}
<div class="container">
<div class="row">
{% for room in rooms %}
<div class="col-6 p-3">
<div class="p-3 border border-dark roundep-3 border border-dark rounded bg-light text-dark">
<h3>{{ room.name }}</h3>
<p>Short: {{ room.short }}</p>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock %}