class User(db.Model): """ User Model for storing user related details """ __tablename__ = "auth_users" id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(255, collation='utf8_unicode_ci'), unique=True, nullable=False) email = db.Column(db.String(255), unique=True, nullable=False) password = db.Column(db.String(255), nullable=False) first_name = db.Column(db.String(255, collation='utf8_unicode_ci'), nullable=False) last_name = db.Column(db.String(255, collation='utf8_unicode_ci'), nullable=False) registered_on = db.Column(db.DateTime(), nullable=False) confirmed = db.Column(db.Boolean, nullable=False, default=False) confirmed_on = db.Column(db.DateTime, nullable=True) last_login_at = db.Column(db.DateTime()) current_login_at = db.Column(db.DateTime()) company = db.Column(db.String(255)) title = db.Column(db.String(255)) language = db.Column(db.String(255), nullable=False) admin_validation = db.Column(db.Boolean, nullable=False, default=False) location_id = db.Column(db.Integer, db.ForeignKey('auth_locations.id', ondelete='CASCADE'), nullable=True) roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic'), post_update=True) location = db.relationship(Location, primaryjoin=location_id == Location.id, post_update=True, uselist=False) def __init__(self, username, password, email, first_name, last_name, language='en', company=None, title=None, confirmed=False, confirmed_on=None, admin_validation=False, roles='PENDING', location_id=1): self.username = username self.password = encrypt_password(password) self.email = email self.first_name = first_name self.last_name = last_name self.company = company self.title = title self.language = language self.registered_on = datetime.datetime.now() self.confirmed = confirmed self.confirmed_on = confirmed_on self.admin_validation = admin_validation self.location_id = location_id self.location = Location.query.filter_by(id=location_id).one() # role = Role.query.filter_by(name='ADMIN').one() self.roles = roles.query(roles).last() new_roles = [] if roles is not None: if roles == 'ADMIN': role = Role.query.filter_by(name='ADMIN').one() new_roles.append(role) elif roles == 'ANNOTATOR': role = Role.query.filter_by(name='ANNOTATOR').one() new_roles.append(role) else: role = Role.query.filter_by(name='VIEWER').one() new_roles.append(role) self.roles = new_roles else: role = Role.query.filter_by(name='VIEWER').one() new_roles.append(role) self.roles = new_roles def from_partial_json(self, dictionary): super(User, self).from_partial_json(dictionary) if 'password' in dictionary: self.password = encrypt_password(dictionary.get('password')) self.registered_on = datetime.datetime.now() return self def from_json(self, json): self.id = json.get('user_id', None) self.email = json.get('email', None) self.password = json.get('password', None) self.first_name = json.get('first_name', None) self.last_name = json.get('last_name', None) self.roles = json.get('roles', None) return self def to_dictionary(self): obj = { 'admin_validation': self.admin_validation, 'user_id': self.id, 'username': self.username, 'email': self.email, 'first_name': self.first_name, 'last_name': self.last_name, 'last_login_at': self.last_login_at, 'registered_on': self.registered_on, 'confirmed': self.confirmed, 'confirmed_on': self.confirmed_on, 'company': self.company, 'title': self.title, 'language': self.language, 'roles': [role.name for role in self.roles], 'location': [get_json_clean_response(self.location)] } return obj
class Image(db.Model): """ Image Model for storing image related details """ __tablename__ = 'sys_image' id = db.Column(db.Integer, primary_key=True, nullable=False, autoincrement=True) updated_on = db.Column(db.DateTime, nullable=True, default=datetime.now()) image_path = db.Column(db.String(255), nullable=False) filename = db.Column(db.String(255), nullable=False) dataset_id = db.Column(db.Integer, db.ForeignKey('ai_dataset.id', ondelete='CASCADE', onupdate="cascade"), nullable=True) attributes_id = db.Column(db.Integer, db.ForeignKey('ai_attribute.id', ondelete='CASCADE'), nullable=True, default=1) annotation_id = db.Column(db.Integer, db.ForeignKey('ai_annotation.id', ondelete='CASCADE'), nullable=True, default=1) categories_id = db.Column(db.Integer, db.ForeignKey('ai_category.id', ondelete='CASCADE'), nullable=True, default=1) annotation_path = db.Column(db.String(255), nullable=True, default='NULL') flagging = db.Column(db.String(255), nullable=True, default='NULL') license = db.Column(db.String(255), nullable=True, default='NULL') width = db.Column(db.Float, nullable=True, default='1') height = db.Column(db.Float, nullable=True, default='1') dataset = db.relationship(Dataset, primaryjoin=dataset_id == Dataset.id, post_update=True) attribute = db.relationship(Attribute, primaryjoin=attributes_id == Attribute.id, post_update=True) category = db.relationship(Category, primaryjoin=categories_id == Category.id, post_update=True) annotation = db.relationship(Annotation, primaryjoin=annotation_id == Annotation.id, post_update=True, uselist=True) def __init__(self, updated_on, image_path, filename, dataset_id, attributes_id=None, categories_id=None, annotation_id=None): self.updated_on = updated_on self.image_path = image_path self.filename = filename if dataset_id is not None: self.dataset = Dataset.query.get_or_404(dataset_id) if attributes_id is not None: self.attribute = Attribute.query.get_or_404(attributes_id) if annotation_id is not None: self.annotation = Annotation.query.get_or_404(annotation_id) if categories_id is not None: self.category = Category.query.get_or_404(categories_id) def from_json(self, json): self.id = json.get('image_id', None) self.updated_on = json.get('updated_on', None) self.image_path = json.get('image_path', None) self.dataset = json.get('dataset', None) return self def to_dictionary(self): obj = { 'image_id': self.id, 'updated_on': self.updated_on, 'image_path': self.image_path, 'filename': self.filename, 'dataset_id': self.dataset_id, # 'agent': [get_json_clean_response(self.agent)], 'annotation': get_json_clean_response(self.annotation), 'attributes': [get_json_clean_response(self.attribute)], 'categories': [get_json_clean_response(self.category)] } return obj
class User(db.Model): """ User Model for storing user related details """ __tablename__ = "auth_users" id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(255), unique=True, nullable=False) email = db.Column(db.String(255), unique=True, nullable=False) password = db.Column(db.String(255), nullable=False) first_name = db.Column(db.String(255), nullable=False) last_name = db.Column(db.String(255), nullable=False) registered_on = db.Column(db.DateTime(), nullable=False) confirmed = db.Column(db.Boolean, nullable=False, default=False) confirmed_on = db.Column(db.DateTime, nullable=True) last_login_at = db.Column(db.DateTime()) current_login_at = db.Column(db.DateTime()) company = db.Column(db.String(255)) title = db.Column(db.String(255)) language = db.Column(db.String(255), nullable=False) roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic'), post_update=True) def __init__(self, username, password, email, first_name, last_name, language='en', company=None, title=None, admin=False, confirmed=False, confirmed_on=None): self.username = username self.password = encrypt_password(password) self.email = email self.first_name = first_name self.last_name = last_name self.company = company self.title = title self.language = language self.registered_on = datetime.datetime.now() self.confirmed = confirmed self.confirmed_on = confirmed_on if admin: role = Role.query.filter_by(name='ADMIN').one() self.roles.append(role) else: role = Role.query.filter_by(name='CUSTOMER').one() self.roles.append(role) def from_partial_json(self, dictionary): super(User, self).from_partial_json(dictionary) if 'password' in dictionary: self.password = encrypt_password(dictionary.get('password')) self.registered_on = datetime.datetime.now() return self def from_json(self, json): self.id = json.get('user_id', None) self.email = json.get('email', None) self.password = json.get('password', None) self.first_name = json.get('first_name', None) self.last_name = json.get('last_name', None) return self def to_dictionary(self): obj = { 'user_id': self.id, 'username': self.username, 'email': self.email, 'first_name': self.first_name, 'last_name': self.last_name, 'registered_on': self.registered_on, 'confirmed': self.confirmed, 'confirmed_on': self.confirmed_on, 'company': self.company, 'title': self.title, 'language': self.language, 'roles': [role.name for role in self.roles], } return obj
class Camera(db.Model): """ Camera Model for storing camera related details """ __tablename__ = 'sys_camera' id = db.Column(db.Integer, primary_key=True, nullable=False, autoincrement=True) camera_id = db.Column(db.String(255), nullable=True) updated_on = db.Column(db.DateTime(), nullable=True) camera_type = db.Column(db.String(255), nullable=True) frame_rate = db.Column(db.String(255), nullable=True) resolution = db.Column(db.Float, nullable=True) color = db.Column(db.String(255), nullable=True) shutter_speed = db.Column(db.Boolean, nullable=True) exposure = db.Column(db.String(255), nullable=True) image_size_H = db.Column(db.Boolean, nullable=True) image_size_W = db.Column(db.String(255), nullable=True) image_size_C = db.Column(db.String(255), nullable=True) spot_name = db.Column(db.String(255), nullable=True) weight_file = db.Column(db.String(255), nullable=True) threshold = db.Column(db.String(255), nullable=True) orientation = db.Column(db.String(255), nullable=True) current_status = db.Column(db.Boolean, nullable=True) agent_id = db.Column(db.Integer, db.ForeignKey("ai_agent.id", ondelete='CASCADE'), nullable=True) models_id = db.Column(db.Integer, db.ForeignKey("ai_models.id", ondelete='CASCADE'), nullable=True) agent = db.relationship(Agent, primaryjoin=agent_id == Agent.id) model = db.relationship(Models, primaryjoin=models_id == Models.id) # inference_id = db.Column(db.Integer, db.ForeignKey("ai_inference.id"), nullable=True) # inference = db.relationship(Inference, primaryjoin=inference_id == Inference.id) def __init__(self, camera_id, updated_on, camera_type, frame_rate, resolution, color, shutter_speed, exposure, image_size_H, image_size_W, image_size_C, spot_name, weight_file, threshold, orientation): self.camera_id = camera_id self.updated_on = updated_on self.camera_type = camera_type self.frame_rate = frame_rate self.resolution = resolution self.color = color self.shutter_speed = shutter_speed self.exposure = exposure self.image_size_H = image_size_H self.image_size_W = image_size_W self.image_size_C = image_size_C self.spot_name = spot_name self.weight_file = weight_file self.threshold = threshold self.orientation = orientation self.model = Models.query.all() # self.inference = Inference.query.all() def from_json(self, json): self.camera_id = json.get('camera_id', None) self.updated_on = json.get('updated_on', None) self.camera_type = json.get('camera_type', None) self.frame_rate = json.get('frame_rate', None) self.resolution = json.get('resolution', None) self.color = json.get('color', None) self.shutter_speed = json.get('shutter_speed', None) self.exposure = json.get('exposure', None) self.image_size_H = json.get('image_size_H', None) self.image_size_W = json.get('image_size_W', None) self.image_size_C = json.get('image_size_C', None) self.spot_name = json.get('spot_name', None) self.weight_file = json.get('weight_file', None) self.threshold = json.get('threshold', None) self.orientation = json.get('orientation', None) return self def to_dictionary(self): obj = { 'camera_id': self.camera_id, 'updated_on': self.updated_on, 'camera_type': self.camera_type, 'frame_rate': self.frame_rate, 'resolution': self.resolution, 'color': self.color, 'shutter_speed': self.shutter_speed, 'exposure': self.exposure, 'image_size_H': self.image_size_H, 'image_size_W': self.image_size_W, 'image_size_C': self.image_size_C, 'weight_file': self.weight_file, 'threshold': self.threshold, 'orientation': self.orientation, 'model': [get_json_clean_response(self.model)], # 'inference': [get_json_clean_response(self.inference)] } return obj