race-attendance/models.py

72 lines
2.2 KiB
Python

from flask_sqlalchemy import SQLAlchemy
from flask_security import UserMixin, RoleMixin
from enum import Enum, unique
from datetime import datetime
db = SQLAlchemy()
roles_users = db.Table('roles_users',
db.Column('user_id',
db.Integer(), db.ForeignKey('user.id')),
db.Column('role_id',
db.Integer(), db.ForeignKey('role.id')))
class Role(db.Model, RoleMixin):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), unique=True)
description = db.Column(db.String(255))
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(255), unique=True)
password = db.Column(db.String(255))
active = db.Column(db.Boolean())
confirmed_at = db.Column(db.DateTime())
roles = db.relationship(
'Role',
secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
@unique
class Presence(Enum):
"""docstring for ResultType."""
PRESENT, ABSENT, SICK, VACATION = range(4)
presense_map = {i:str(i).replace('Presence.', '').upper() for i in Presence}
class Gradeclass(db.Model):
id = db.Column(db.Integer, primary_key=True)
class_name = db.Column(db.String(255))
def __init__(self, class_name):
self.class_name = class_name
class Student(db.Model):
id = db.Column(db.Integer, primary_key=True)
student_name = db.Column(db.String(255))
gradeclass_id = db.Column(db.Integer, db.ForeignKey('gradeclass.id'))
gradeclass = db.relationship(
'Gradeclass', backref=db.backref('students', lazy='dynamic'))
def __init__(self, student_name, gradeclass_id):
self.student_name = student_name
self.gradeclass_id = gradeclass_id
class AttendanceUpdate(db.Model):
id = db.Column(db.Integer, primary_key=True)
time = db.Column(db.DateTime())
presence = db.Column(db.Enum(Presence))
update_type = db.Column(db.String(10))
value_identifier = db.Column(db.Integer)
def __init__(self, update_type, value_identifier, time, presence):
self.update_type = update_type
self.value_identifier = value_identifier
self.presence = presence
self.time = time