This repository has been archived on 2019-10-12. You can view files and clone it, but cannot push or open issues or pull requests.
roofis2/roofis2/roomservice/utils/migrate_data_rooms.py
2018-06-18 23:54:43 +02:00

170 lines
7.1 KiB
Python

import json
from pprint import pprint
from django.db.utils import IntegrityError
from roomservice.models import Room, Building, RoomType, OrgUnit, Equipment
from .parser import univis_rooms_parser
from .parser import univis_lectures_parser
import ast
import logging
logger = logging.getLogger(__name__)
# CONFIG Fakultaet
FAKULTAET_GuK = "Fakult%E4t%20Geistes-%20und%20Kulturwissenschaften"
FAKULTAET_SoWi = "Fakult%E4t%20Sozial-%20und%20Wirtschaftswissenschaften"
FAKULTAET_HuWi = "Fakult%E4t%20Humanwissenschaften"
FAKULTAET_WIAI = "Fakult%E4t%20Wirtschaftsinformatik"
# CONFIG Locations
RZ = "http://univis.uni-bamberg.de/prg?search=rooms&name=rz&show=xml"
WEBEREI = "http://univis.uni-bamberg.de/prg?search=rooms&name=we&show=xml"
FEKI = "http://univis.uni-bamberg.de/prg?search=rooms&name=f&show=xml"
MARKUSHAUS = "http://univis.uni-bamberg.de/prg?search=rooms&name=m&show=xml"
UNIVERSITAET = "http://univis.uni-bamberg.de/prg?search=rooms&name=u&show=xml"
KAPUZINERSTR = "http://univis.uni-bamberg.de/prg?search=rooms&name=k&show=xml"
ZWINGER = "http://univis.uni-bamberg.de/prg?search=rooms&name=z&show=xml"
AULA = "http://univis.uni-bamberg.de/prg?search=rooms&name=a&show=xml"
# 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 univis_rooms_loc(kuerzel):
return "http://univis.uni-bamberg.de/prg?search=rooms&name=" + kuerzel + "&show=xml"
def getJsonFromFile(path):
with open(path, "r") as file:
return json.load(file)
def writeUnivisRoomDataInDB(rooms):
for room in rooms:
try:
building = None
if 'address' in room and 'buildingkey' in room:
building_address = room['address']
building_key = room['buildingkey']
building, _ = Building.objects.get_or_create(key=building_key, address=building_address)
short = str(room['short']).split(sep='/')[-1]
univis_id = room['id']
univis_key = room['@key']
capacity = None
if 'size' in room:
capacity = room['size']
floor = None
if 'floor' in room:
floor = room['floor']
room_type = None
if 'name' in room:
room_type, _ = RoomType.objects.get_or_create(type=room['name'])
description = None
if 'description' in room:
description = room['description']
orgname = None
if 'orgname' in room:
orgname, _ = OrgUnit.objects.get_or_create(title=room['orgname'])
room_db_obj, _ = Room.objects.update_or_create(building=building,
room_number=short,
capacity=capacity,
floor=floor,
univis_id=univis_id,
univis_key=univis_key,
room_type=room_type,
description=description,
orgname=orgname)
equipment_options = Equipment.objects.all()
for equipment in equipment_options:
univis_id = equipment.univis_id.lower()
if univis_id in room and room[univis_id] == 'ja':
room_db_obj.equipment.add(equipment)
orgunits = None
if 'orgunits' in room:
for orgunit in room['orgunits']:
if len(orgunit) > 0:
for orgunit in str(room['orgunits']['orgunit']).strip("[]").split(','):
cleaned_orgunit = orgunit.strip().strip("'").strip("'")
orgunit, _ = OrgUnit.objects.get_or_create(title=cleaned_orgunit)
room_db_obj.orgunits.add(orgunit)
# TODO: Check xml syntax #orgunit problem
pass
else:
orgunit, _ = OrgUnit.objects.get_or_create(title=orgunit)
room_db_obj.orgunits.add(orgunit)
# room_db_obj.save()
logger.info('ROOM: {}'.format(room_db_obj.room_number))
except IntegrityError as err:
logger.warning(err)
logger.warning('Room already exists')
def delete():
rooms = Room.objects.all()
logger.info("Deleted following Rooms:")
for room in rooms:
logger.info("Room: {name}".format(
name=room.short)
)
room.delete()
def main():
# get food jsons
logger.info("\nStart:\nRoom: {}\nOrgunits: {}\nBuildings: {}\nRoomTypes: {}"
.format(Room.objects.count(),
OrgUnit.objects.count(),
Building.objects.count(),
RoomType.objects.count()))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms(FAKULTAET_GuK)))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms(FAKULTAET_SoWi)))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms(FAKULTAET_HuWi)))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms(FAKULTAET_WIAI)))
writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("k")))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("z")))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("u")))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("w")))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("f")))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("r")))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("h")))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("l")))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("m")))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("o")))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("p")))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("v")))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("w")))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("d")))
# writeUnivisRoomDataInDB(univis_rooms_parser.parsePage(univis_rooms_loc("x")))
logger.info("\nFinished:\nRoom: {}\nOrgunits: {}\nBuildings: {}\nRoomTypes: {}"
.format(Room.objects.count(),
OrgUnit.objects.count(),
Building.objects.count(),
RoomType.objects.count()))
if __name__ == '__main__':
main()