class Access(db.Model): __tablename__ = "access" user_id = db.Column(db.Integer, db.ForeignKey("user.id"), primary_key=True) class_id = db.Column(db.Integer, db.ForeignKey("class.id"), primary_key=True)
class Class_Student(db.Model): __tablename__ = "class_student" roll_id = db.Column(db.Integer, db.ForeignKey("class.id"), primary_key=True) student_id = db.Column(db.Integer, db.ForeignKey("student.id"), primary_key=True)
class Roll_Student(db.Model): __tablename__ = "roll_student" extend_existing = True roll_id = db.Column(db.Integer, db.ForeignKey("roll.id"), primary_key=True) student_id = db.Column(db.Integer, db.ForeignKey("student.id"), primary_key=True) present = db.Column(db.Boolean, default=False) marked_at = db.Column(db.DateTime, default=None)
class Site(CRUDMixin, db.Model): __tablename__ = 'tracking_site' base_url = db.Column(db.String) visits = db.relationship('Visit', backref='site', lazy='select') user_id = db.Column(db.Integer, db.ForeignKey('users_user.id')) def __repr__(self): return '<Site {:d} {}>'.format(self.id, self.base_url) def __str__(self): return self.base_url
class Visit(CRUDMixin, db.Model): __tablename__ = 'tracking_visit' browser = db.Column(db.String) date = db.Column(db.DateTime) event = db.Column(db.String) url = db.Column(db.String) ip_address = db.Column(db.String) location = db.Column(db.String) latitude = db.Column(db.Numeric) longitude = db.Column(db.Numeric) site_id = db.Column(db.Integer, db.ForeignKey('tracking_site.id')) def __repr__(self): r = '<Visit for site ID {:d}: {} - {:%Y-%m-%d %H:%M:%S}>' return r.format(self.site_id, self.url, self.date)
class Station(db.Model): __tablename__ = "station" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64)) password_hash = db.Column(db.String(128)) linked_roll = db.Column(db.Integer, db.ForeignKey('roll.id')) linked_roll_rel = db.relationship("Roll", back_populates="linked_rfid") scan = db.Column(db.Integer) active = db.Column(db.Boolean, default=False) def __repr__(self): return '<Station {}>'.format(self.name) def set_password(self, password): """Runs the passwords through a hash and appends.""" self.password_hash = generate_password_hash(str(password)) def check_password(self, password): """Checks a password against the hash.""" return check_password_hash(self.password_hash, password) def get_scan(self): return self.scan if not self.active else None
class Sensor(CRUDMixin, db.Model): id = db.Column(db.Integer, primary_key=True) SENSOR_TYPE = db.Column(db.Text) ACCELEROMETER_X = db.Column(db.Text) ACCELEROMETER_Y = db.Column(db.Text) ACCELEROMETER_Z = db.Column(db.Text) X_AXIS = db.Column(db.Text) Y_AXIS = db.Column(db.Text) Z_AXIS = db.Column(db.Text) LINEAR_ACCELERATION_X = db.Column(db.Text) LINEAR_ACCELERATION_Y = db.Column(db.Text) LINEAR_ACCELERATION_Z = db.Column(db.Text) GYROSCOPE_X = db.Column(db.Text) GYROSCOPE_Y = db.Column(db.Text) GYROSCOPE_Z = db.Column(db.Text) ORIENTATION_Z = db.Column(db.Text) ORIENTATION_X = db.Column(db.Text) ORIENTATION_Y = db.Column(db.Text) Time_since_start = db.Column(db.Text) state = db.Column(db.Text) timestamp = db.Column(db.DateTime) prediction = db.Column(db.Text) experiment_id = db.Column(db.Integer, db.ForeignKey('experiment.id')) def __init__(self, experiment, SENSOR_TYPE=None, ACCELEROMETER_X=None, ACCELEROMETER_Y=None, ACCELEROMETER_Z=None, X_AXIS=None, Y_AXIS=None, Z_AXIS=None, LINEAR_ACCELERATION_X=None, LINEAR_ACCELERATION_Y=None, LINEAR_ACCELERATION_Z=None, GYROSCOPE_X=None, GYROSCOPE_Y=None, GYROSCOPE_Z=None, ORIENTATION_Z=None, ORIENTATION_X=None, ORIENTATION_Y=None, Time_since_start=None, state=None, timestamp=None, prediction=None): self.SENSOR_TYPE = SENSOR_TYPE self.ACCELEROMETER_X = ACCELEROMETER_X self.ACCELEROMETER_Y = ACCELEROMETER_Y self.ACCELEROMETER_Z = ACCELEROMETER_Z self.X_AXIS = X_AXIS self.Y_AXIS = Y_AXIS self.Z_AXIS = Z_AXIS self.LINEAR_ACCELERATION_X = LINEAR_ACCELERATION_X self.LINEAR_ACCELERATION_Y = LINEAR_ACCELERATION_Y self.LINEAR_ACCELERATION_Z = LINEAR_ACCELERATION_Z self.GYROSCOPE_X = GYROSCOPE_X self.GYROSCOPE_Y = GYROSCOPE_Y self.GYROSCOPE_Z = GYROSCOPE_Z self.ORIENTATION_Z = ORIENTATION_Z self.ORIENTATION_X = ORIENTATION_X self.ORIENTATION_Y = ORIENTATION_Y self.Time_since_start = Time_since_start self.state = state self.timestamp = timestamp self.prediction = prediction # not in uploaded files self.experiment_id = experiment.id # not in uploaded files def __repr__(self): return '<Timestamp {:d}>'.format(self.timestamp)