now using campus API
This commit is contained in:
@@ -75,7 +75,7 @@ def main():
|
||||
|
||||
wsb = WebSocketBase()
|
||||
print("running websocket...(replaces normal app.run()")
|
||||
wsb.start_websocket(debug=True)
|
||||
wsb.start_websocket(debug=True, host="0.0.0.0")
|
||||
# print("running web app...")
|
||||
# app.run(debug=True, host="0.0.0.0", threaded=True)
|
||||
wsb.send_test_msg()
|
||||
|
||||
Binary file not shown.
@@ -10,7 +10,6 @@ from sqlalchemy.exc import IntegrityError
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from backend import db, app, login_manager
|
||||
from backend.tools.scrape_rooms import scrape_rooms
|
||||
|
||||
metadata = MetaData()
|
||||
|
||||
|
||||
@@ -5,15 +5,15 @@ Models for lecture recorder
|
||||
import json
|
||||
import logging
|
||||
|
||||
from sqlalchemy import MetaData, CheckConstraint
|
||||
from sqlalchemy import MetaData, CheckConstraint, UniqueConstraint
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from backend import db, app, login_manager
|
||||
from backend.tools.scrape_rooms import scrape_rooms
|
||||
from backend.tools.campus_rooms import get_campus_rooms
|
||||
|
||||
logger = logging.getLogger("lrc."+__name__)
|
||||
logger = logging.getLogger("lrc." + __name__)
|
||||
|
||||
metadata = MetaData()
|
||||
|
||||
@@ -23,16 +23,19 @@ class Room(db.Model):
|
||||
created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow())
|
||||
name = db.Column(db.Unicode(127), unique=False, nullable=False)
|
||||
alternate_name = db.Column(db.Unicode(127), unique=False, nullable=True, default=None)
|
||||
external_id = db.Column(db.String, nullable=True, unique=True)
|
||||
coordinates = db.Column(db.String, nullable=True)
|
||||
comment = db.Column(db.Unicode(2047), unique=False, nullable=True, default="")
|
||||
number = db.Column(db.Unicode(63), unique=False, nullable=True)
|
||||
number = db.Column(db.Unicode(63), unique=False, nullable=True, default=None)
|
||||
building_name = db.Column(db.Unicode(63), unique=False, nullable=True)
|
||||
building_number = db.Column(db.Unicode(63), unique=False, nullable=True)
|
||||
building_number = db.Column(db.Unicode(63), unique=False, nullable=True, default=None)
|
||||
|
||||
recorder = db.relationship('Recorder', uselist=False, back_populates='room') # one-to-one relation (uselist=False)
|
||||
|
||||
__table_args__ = (
|
||||
CheckConstraint('length(name) > 2',
|
||||
name='name_min_length'),
|
||||
UniqueConstraint('name', 'number', 'building_number', 'external_id'),
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
@@ -76,13 +79,15 @@ class Room(db.Model):
|
||||
|
||||
|
||||
def pre_fill_table():
|
||||
rooms = scrape_rooms()
|
||||
logger.debug("tada")
|
||||
# Room.query.delete() # drop all rooms
|
||||
rooms = get_campus_rooms()
|
||||
logger.debug("got {} rooms".format(len(rooms)))
|
||||
db_rooms = [Room(name=room['name'], number=room['room_number'],
|
||||
building_name=room['building_name'], building_number=room['building_number']) for room in
|
||||
rooms]
|
||||
db_rooms = [Room(name=room['name'], number=room['room_number'], alternate_name=room.get('alternate_name', None),
|
||||
building_name=room['building_name'], building_number=room['building_number'],
|
||||
coordinates=room.get('coordinates', None), external_id=room.get('external_id', None)
|
||||
|
||||
) for room in
|
||||
rooms]
|
||||
try:
|
||||
db.session.bulk_save_objects(db_rooms)
|
||||
db.session.commit()
|
||||
|
||||
55
backend/tools/campus_rooms.py
Normal file
55
backend/tools/campus_rooms.py
Normal file
@@ -0,0 +1,55 @@
|
||||
import re
|
||||
|
||||
from campus_api_client.campus_management_api_client import CampusManagementApiClient
|
||||
|
||||
from backend import Config
|
||||
|
||||
|
||||
def get_campus_rooms():
|
||||
cac = CampusManagementApiClient(user=Config.CAMPUS_MANAGEMENT_USER, pw=Config.CAMPUS_MANAGEMENT_PW)
|
||||
|
||||
parsed_rooms = []
|
||||
count = 0
|
||||
re_string = r"^(\d\d.\d\d)?\s(.*)"
|
||||
re_exp = re.compile(re_string)
|
||||
for r in cac.get_rooms():
|
||||
name = r.get('name')
|
||||
# print(f"## {r.get('name')}: {r.get('roomNo')}")
|
||||
building_number = r.get('buildingNo', None)
|
||||
building_name = r.get('building')
|
||||
if building_number is None or building_number == '':
|
||||
count += 1
|
||||
# print(r)
|
||||
match = re_exp.match(building_name)
|
||||
if match is not None:
|
||||
building_number, building_name = match.groups()
|
||||
else:
|
||||
try:
|
||||
building_name = building_name.split(building_number)[1].strip()
|
||||
building_name = None if building_name == "" else building_name
|
||||
except IndexError: # ignore index error
|
||||
pass
|
||||
# print(f"Building No {r.get('buildingNo')}: {r.get('building')}")
|
||||
# print(building_name)
|
||||
# print(building_number)
|
||||
|
||||
if building_number is not None and building_number != "" and name.startswith(building_number):
|
||||
name = name.split(building_number, 1)[1].strip()
|
||||
elif building_number is not None and name.startswith(f"Geb. {building_number}"):
|
||||
name = name.split(f"Geb. {building_number}", 1)[1].strip()
|
||||
room = {'name': name,
|
||||
'alternate_name': r.get('internalName'),
|
||||
'external_id': r.get('guid'),
|
||||
'room_number': r.get('roomNo'),
|
||||
'building_name': building_name,
|
||||
'building_number': building_number,
|
||||
'coordinates': r.get('coordinates')}
|
||||
parsed_rooms.append(room)
|
||||
|
||||
print(len(parsed_rooms))
|
||||
return parsed_rooms
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
rooms = get_campus_rooms()
|
||||
print(len(rooms))
|
||||
1
backend/tools/current_rooms_cache.json
Normal file
1
backend/tools/current_rooms_cache.json
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user