144 lines
4.3 KiB
Python
144 lines
4.3 KiB
Python
import json
|
|
from pprint import pprint
|
|
import datetime
|
|
|
|
|
|
def loadJson(path: str):
|
|
with open(path, 'r') as file:
|
|
return json.load(file)
|
|
|
|
|
|
def deleteNotCalendarElements(data):
|
|
events = []
|
|
for event in data['UnivIS']['Event']:
|
|
if 'calendar' in event:
|
|
if not event['calendar'] == 'nein':
|
|
events.append(event)
|
|
data['UnivIS']['Event'] = events
|
|
# pprint(data['UnivIS']['Event'])
|
|
|
|
|
|
def getRoom(data, id: str):
|
|
for room in data['UnivIS']['Room']:
|
|
if room['@key'] == id:
|
|
return room
|
|
|
|
|
|
def resolveRoomRefs(data):
|
|
for event in data['UnivIS']['Event']:
|
|
if 'rooms' in event:
|
|
rooms = []
|
|
# pprint(event['rooms']['room'])
|
|
if not isinstance(event['rooms']['room'], list):
|
|
single_room = {}
|
|
single_room['room'] = getRoom(data, event['rooms']['room']['UnivISRef']['@key'])['short']
|
|
rooms.append(single_room)
|
|
|
|
else:
|
|
for room_item in event['rooms']['room']:
|
|
single_room = {}
|
|
single_room['room'] = getRoom(data, room_item['UnivISRef']['@key'])['short']
|
|
rooms.append(single_room)
|
|
event['rooms'] = rooms
|
|
else:
|
|
event['rooms'] = None
|
|
|
|
|
|
def getContact(data, id: str):
|
|
for contact in data['UnivIS']['Person']:
|
|
if contact['@key'] == id:
|
|
person = {}
|
|
person['atitle'] = None
|
|
if 'atitle' in contact:
|
|
person['atitle'] = contact['atitle']
|
|
|
|
person['firstname'] = contact['firstname']
|
|
person['lastname'] = contact['lastname']
|
|
person['email'] = None
|
|
if 'email' in contact['locations']['location']:
|
|
person['email'] = contact['locations']['location']['email']
|
|
|
|
person['tel'] = None
|
|
if 'tel' in contact['locations']['location']:
|
|
person['tel'] = contact['locations']['location']['tel']
|
|
|
|
person['office'] = None
|
|
if 'office' in contact['locations']['location']:
|
|
person['office'] = contact['locations']['location']['office']
|
|
|
|
person['url'] = None
|
|
if 'url' in contact['locations']['location']:
|
|
person['url'] = contact['locations']['location']['url']
|
|
return person
|
|
|
|
|
|
def resolveContactRefs(data):
|
|
for event in data['UnivIS']['Event']:
|
|
key = event['contact']['UnivISRef']['@key']
|
|
event['contact'] = getContact(data, key)
|
|
|
|
|
|
def initalDateBoard(days: int, dateformat: str):
|
|
dates = {}
|
|
dates_arr = []
|
|
now = datetime.datetime.now()
|
|
i = 0
|
|
while i < days:
|
|
date = {}
|
|
day = now + datetime.timedelta(days=i)
|
|
date['date'] = day.strftime(dateformat)
|
|
date['events'] = []
|
|
dates_arr.append(date)
|
|
i += 1
|
|
|
|
dates['dates'] = dates_arr
|
|
return dates
|
|
|
|
|
|
def getNewEvent(event):
|
|
new_event = {}
|
|
new_event['title'] = event['title']
|
|
new_event['time'] = event['starttime']
|
|
new_event['endtime'] = event['endtime']
|
|
new_event['category'] = None
|
|
new_event['link'] = None
|
|
locations = []
|
|
if event['rooms']:
|
|
for room in event['rooms']:
|
|
location = {}
|
|
location['location'] = room
|
|
locations.append(location)
|
|
new_event['locations'] = locations
|
|
new_event['description'] = None
|
|
if 'description' in event:
|
|
new_event['description'] = event['description']
|
|
return new_event
|
|
|
|
|
|
def getDateBasedJson(data):
|
|
dateformat = "%d.%m.%Y"
|
|
dates = initalDateBoard(180, dateformat)
|
|
|
|
for event in data['UnivIS']['Event']:
|
|
startdate = datetime.datetime.strptime(event['startdate'], "%d.%m.%Y")
|
|
enddate = datetime.datetime.strptime(event['enddate'], "%d.%m.%Y")
|
|
new_event = getNewEvent(event)
|
|
|
|
while startdate <= enddate:
|
|
for date in dates['dates']:
|
|
if date['date'] == startdate.strftime(dateformat):
|
|
date['events'].append(new_event)
|
|
|
|
startdate = startdate + datetime.timedelta(days=1)
|
|
return dates
|
|
|
|
|
|
def prettify(json_path: str):
|
|
data = loadJson(json_path)
|
|
deleteNotCalendarElements(data)
|
|
resolveRoomRefs(data)
|
|
resolveContactRefs(data)
|
|
return json.dumps(getDateBasedJson(data))
|
|
|
|
# prettify("../../../static/html/events/json/events-univis.jason")
|