start lecture mirgrations

This commit is contained in:
Götz 2017-10-24 00:02:17 +02:00
parent ae7370a899
commit 65b95cddfb
4 changed files with 145 additions and 16 deletions

View File

@ -1,4 +1,5 @@
from django.db import models from django.db import models
from django.utils import timezone
MAX_LENGTH = 60 MAX_LENGTH = 60
@ -23,3 +24,20 @@ class VGN_Coords(models.Model):
coords = models.CharField(max_length=MAX_LENGTH, unique=True) coords = models.CharField(max_length=MAX_LENGTH, unique=True)
longitude = models.CharField(max_length=MAX_LENGTH, unique=True) longitude = models.CharField(max_length=MAX_LENGTH, unique=True)
latitude = models.CharField(max_length=MAX_LENGTH, unique=True) latitude = models.CharField(max_length=MAX_LENGTH, unique=True)
class Lecture(models.Model):
id = models.AutoField(primary_key=True)
univis_ref = models.CharField(max_length=MAX_LENGTH, unique=True)
univis_id = models.CharField(max_length=MAX_LENGTH, unique=True)
name = models.CharField(max_length=MAX_LENGTH)
short = models.CharField(max_length=MAX_LENGTH)
type = models.CharField(max_length=MAX_LENGTH)
lecturer_id = models.CharField(max_length=MAX_LENGTH)
term = models.ManyToManyField('Lecture_Terms', blank=False)
class Lecture_Terms(models.Model):
id = models.AutoField(primary_key=True)
starttime = time = models.TimeField(blank=False, default=timezone.now())
room = models.ManyToManyField('Room', blank=False, blank=True, null=True)

View File

@ -1,15 +1,27 @@
import json import json
from pprint import pprint from pprint import pprint
from django.db.utils import IntegrityError from django.db.utils import IntegrityError
from datetime import datetime
from apps.donar.models import Room from apps.donar.models import Room, Lecture_Terms, Lecture
from apps.donar.utils.parser import univis_rooms_parser from apps.donar.utils.parser import univis_rooms_parser
from apps.donar.utils.parser import univis_lectures_parser
# CONFIG # CONFIG Fakultaet
UNIVIS_RPG_GuK = "http://univis.uni-bamberg.de/prg?search=rooms&department=Fakult%E4t%20Geistes-%20und%20Kulturwissenschaften&show=xml" FAKULTAET_GuK = "Fakult%E4t%20Geistes-%20und%20Kulturwissenschaften"
UNIVIS_RPG_SoWi = "http://univis.uni-bamberg.de/prg?search=rooms&department=Fakult%E4t%20Sozial-%20und%20Wirtschaftswissenschaften&show=xml" FAKULTAET_SoWi = "Fakult%E4t%20Sozial-%20und%20Wirtschaftswissenschaften"
UNIVIS_RPG_HuWi = "http://univis.uni-bamberg.de/prg?search=rooms&department=Fakult%E4t%20Humanwissenschaften&show=xml" FAKULTAET_HuWi = "Fakult%E4t%20Humanwissenschaften"
UNIVIS_RPG_WIAI = "http://univis.uni-bamberg.de/prg?search=rooms&department=Fakult%E4t%20Wirtschaftsinformatik&show=xml" FAKULTAET_WIAI = "Fakult%E4t%20Wirtschaftsinformatik"
# CONFIG ROOMS
def univis_rooms(fakultaet):
return "http://univis.uni-bamberg.de/prg?search=rooms&department=" + fakultaet + "&show=xml"
# CONFIG LECTURES
def univis_lectures(fakultaet):
return "http://univis.uni-bamberg.de/prg?search=lectures&department=" + fakultaet + "&show=exml"
def getJsonFromFile(path): def getJsonFromFile(path):
@ -17,7 +29,7 @@ def getJsonFromFile(path):
return json.load(file) return json.load(file)
def writeFekideDataInDB(data): def writeUnivisRoomDataInDB(data):
for room in data: for room in data:
try: try:
key = "" key = ""
@ -53,13 +65,83 @@ def writeFekideDataInDB(data):
break break
def writeUnivisLectureTermsInDB(lecture, lecture_obj):
if 'terms' in lecture:
if type(lecture['terms']['term']) == list:
for term in lecture['terms']['term']:
try:
term_obj = Lecture_Terms.objects.create()
starttime = "00:00"
if 'starttime' in term:
starttime = term['starttime']
term_obj.starttime = datetime.strptime(starttime, "%H%H:%M%M")
if 'room' in term:
room_id = term['room']['UnivISRef']['@key']
term_obj.room = Room.objects.get(key=room_id)
term_obj.save()
lecture_obj.term.add(term_obj)
except IntegrityError as err:
print(err.args)
else:
try:
term_obj = Lecture_Terms.objects.create()
starttime = "00:00"
if 'starttime' in lecture['terms']['term']:
starttime = lecture['terms']['term']['starttime']
term_obj.starttime = datetime.strptime(starttime, "%H%H:%M%M")
if 'room' in lecture['terms']['term']:
room_id = lecture['terms']['term']['room']['UnivISRef']['@key']
term_obj.room = Room.objects.get(key=room_id)
term_obj.save()
lecture_obj.term.add(term_obj)
except IntegrityError as err:
print(err.args)
def writeUnivisLectureDataInDB(data):
for lecture in data:
try:
key = ''
name = ''
orgname = ''
short = ''
lecture_type = ''
lecturer_id = ''
if '@key' in lecture:
key = lecture['@key']
if 'name' in lecture:
# TODO Fix name bug
name = lecture['name']
if 'id' in lecture:
univis_id = lecture['id']
if 'orgname' in lecture:
orgname = lecture['orgname']
if 'short' in lecture:
short = lecture['short']
if 'type' in lecture:
lecture_type = lecture['type']
if 'dozs' in lecture:
lecturer_id = dict(lecture['dozs']['doz']['UnivISRef'])['@key']
lecture_obj = Lecture.objects.create(univis_ref=key, univis_id=univis_id, name=name, short=short,
type=lecture_type, lecturer_id=lecture_type)
writeUnivisLectureTermsInDB(lecture, lecture_obj)
lecture_obj.save()
except IntegrityError as err:
print()
return
def main(): def main():
# get food jsons # get food jsons
writeFekideDataInDB(univis_rooms_parser.parsePage(UNIVIS_RPG_GuK)) # writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms(FAKULTAET_GuK)))
writeFekideDataInDB(univis_rooms_parser.parsePage(UNIVIS_RPG_SoWi)) # writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms(FAKULTAET_SoWi)))
writeFekideDataInDB(univis_rooms_parser.parsePage(UNIVIS_RPG_HuWi)) # writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms(FAKULTAET_HuWi)))
writeFekideDataInDB(univis_rooms_parser.parsePage(UNIVIS_RPG_WIAI)) # writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms(FAKULTAET_WIAI)))
pprint("Room: " + str(Room.objects.count())) pprint("Room: " + str(Room.objects.count()))
writeUnivisLectureDataInDB(univis_lectures_parser.parsePage(univis_lectures(FAKULTAET_WIAI)))
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -0,0 +1,29 @@
import requests
import datetime
import xmltodict
import json
from pprint import pprint
def loadPage(url: str):
return requests.get(url).content
def getDay():
return datetime.datetime.today().strftime("%A, %d.%m.%Y")
def getLectures(dict: dict):
lectures = []
for lecture in dict['UnivIS']['Lecture']:
lectures.append(lecture)
return lectures
def parsePage(url):
page = loadPage(url)
dict = xmltodict.parse(page)
lectures = getLectures(dict)
return lectures
# parsePage( "http://univis.uni-bamberg.de/prg?search=lectures&department=Fakult%E4t%20Geistes-%20und%20Kulturwissenschaften&show=exml")

View File

@ -129,13 +129,13 @@ def main():
# deleteUnivisObjects() # deleteUnivisObjects()
# events, rooms, persons = univis_eventpage_parser.parsePage(UNIVIS_RPG_HuWi) # events, rooms, persons = univis_eventpage_parser.parsePage(UNIVIS_RPG_HuWi)
# writeUnivisDataInDB(events, rooms, persons) # writeUnivisRoomDataInDB(events, rooms, persons)
# events, rooms, persons = univis_eventpage_parser.parsePage(UNIVIS_RPG_SoWi) # events, rooms, persons = univis_eventpage_parser.parsePage(UNIVIS_RPG_SoWi)
# writeUnivisDataInDB(events, rooms, persons) # writeUnivisRoomDataInDB(events, rooms, persons)
# events, rooms, persons = univis_eventpage_parser.parsePage(UNIVIS_RPG_GuK) # events, rooms, persons = univis_eventpage_parser.parsePage(UNIVIS_RPG_GuK)
# writeUnivisDataInDB(events, rooms, persons) # writeUnivisRoomDataInDB(events, rooms, persons)
# events, rooms, persons = univis_eventpage_parser.parsePage(UNIVIS_RPG_WIAI) # events, rooms, persons = univis_eventpage_parser.parsePage(UNIVIS_RPG_WIAI)
# writeUnivisDataInDB(events, rooms, persons) # writeUnivisRoomDataInDB(events, rooms, persons)
writeFekideDataInDB(fekide_eventpage_parser.parsePage()) writeFekideDataInDB(fekide_eventpage_parser.parsePage())