automatically adding recorders, models and rooms and association of those

This commit is contained in:
2019-11-22 14:26:16 +01:00
parent 7700b4381f
commit c4b54357f7
9 changed files with 114 additions and 46 deletions

View File

@@ -60,11 +60,11 @@ class RecorderModel(db.Model):
return RecorderModel.query.filter(RecorderModel.checksum == md5_sum).first()
@hybrid_property
def requires_user(self):
def requires_username(self):
return self._requires_user > 0
@requires_user.setter
def requires_user(self, val: bool):
@requires_username.setter
def requires_username(self, val: bool):
self._requires_user = 1 if val else 0
@hybrid_property
@@ -87,10 +87,9 @@ class Recorder(db.Model):
name = db.Column(db.Unicode(63), unique=True, nullable=False)
model_name = db.Column(db.Unicode(63), unique=False, nullable=False)
serial_number = db.Column(db.Unicode(63), unique=True, nullable=True)
locked = db.Column(db.Boolean, default=False)
locked = db.Column(db.Boolean, default=False) # no modifications allowed
lock_message = db.Column(db.String, nullable=True, default=None)
in_maintenance = db.Column(db.Boolean, default=False)
offline = db.Column(db.Boolean, default=False)
offline = db.Column(db.Boolean, default=False) # maintenance, etc.
description = db.Column(db.Unicode(255), unique=False, nullable=True, default="")
_mac = db.Column(db.String(17), unique=True, nullable=True)
_ip = db.Column(db.String(15), unique=True, nullable=True, default=None)
@@ -122,6 +121,13 @@ class Recorder(db.Model):
def get_by_identifier(identifier):
return Recorder.query.filter(Recorder.id == identifier).first()
@staticmethod
def get_by_mac(mac: str):
if mac is None or mac == '':
return None
mac = mac.replace('-', ':').lower()
return Recorder.query.filter(Recorder._mac == mac).first()
@staticmethod
def get_all():
return Recorder.query.all()

View File

@@ -3,6 +3,7 @@
Models for lecture recorder
"""
import json
import logging
from sqlalchemy import MetaData, CheckConstraint
from sqlalchemy.exc import IntegrityError
@@ -12,6 +13,8 @@ from datetime import datetime, timedelta
from backend import db, app, login_manager
from backend.tools.scrape_rooms import scrape_rooms
logger = logging.getLogger("lrc."+__name__)
metadata = MetaData()
@@ -74,12 +77,16 @@ class Room(db.Model):
def pre_fill_table():
rooms = scrape_rooms()
i_tunes_u_mappings = [Room(name=room['name'], number=room['room_number'],
logger.debug("tada")
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]
try:
db.session.bulk_save_objects(i_tunes_u_mappings)
db.session.bulk_save_objects(db_rooms)
db.session.commit()
logger.debug("rooms commited to DB!")
except IntegrityError as e:
logger.error("Could not add rooms! ({})".format(e))
db.session.rollback()