class User(BaseModel): __tablename__ = "user" username = db.Column(db.String(50), default="unnamed") first_name = db.Column(db.String(50), nullable=True) last_name = db.Column(db.String(50), nullable=True) is_active = db.Column(db.Boolean(), default=True) is_superuser = db.Column(db.Boolean(), default=False) password = db.Column(db.String(250)) @staticmethod async def check_password(password, hash_password) -> bool: return pbkdf2_sha256.verify(password, hash_password) @property def is_authenticated(self) -> bool: return True @property def display_name(self) -> str: return f"{self.first_name} {self.last_name}" @staticmethod async def hash_password(password) -> str: hash = pbkdf2_sha256.hash(password) return hash
class Notes(db.Model): __tablename__ = 'notes' id = db.Column(db.Integer, primary_key=True, autoincrement=True) created_by = db.Column(db.String(50)) content = db.Column(db.String(200)) created_on = db.Column(db.String(50)) is_active = db.Column(db.Boolean()) def __init__(self, created_by, content): self.created_by = created_by self.content = content self.created_on = str(datetime.utcnow()) self.is_active = True def __repr__(self): return "<Notes {}".format(self.content) @staticmethod def view_all(): return Notes.query.all() @staticmethod def view_by_id(note_id): return Notes.query.get(note_id) @staticmethod def add(object): db.session.add(object) @staticmethod def commit(): db.session.commit()
class Place(db.Model): __tablename__ = 'place' id = db.Column(db.Integer(), primary_key=True) camera_id = db.Column(db.Integer(), db.ForeignKey('%s.id' % Camera.__tablename__)) status = db.Column(db.Boolean(), server_default='false') label = db.Column(db.String(), nullable=False) x = db.Column(db.Integer(), nullable=False) y = db.Column(db.Integer(), nullable=False) _idx = db.Index('camera_label_idx', 'camera_id', 'label', unique=True)
class Assignment(db.Model): __tablename__ = 'assignment' id = db.Column(db.Integer(), primary_key=True) course_id = db.Column(db.Integer(), db.ForeignKey('course.id')) course = db.relationship("Course", backref=db.backref('assignments', order_by=id)) type_id = db.Column(db.Integer(), db.ForeignKey('assignment_type.id')) type = db.relationship("AssignmentType", backref=db.backref('assignments', order_by=id)) name = db.Column(db.String(255)) points = db.Column(db.Integer()) threshold = db.Column(db.Integer(), default=1) released = db.Column(db.Boolean()) def __repr__(self): return self.name
class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) # User authentication information username = db.Column(db.String(50), nullable=False, unique=True) password = db.Column(db.String(255), nullable=False, server_default='') # User email information email = db.Column(db.String(255), nullable=False, unique=True) confirmed_at = db.Column(db.DateTime()) # User information active = db.Column('is_active', db.Boolean(), nullable=False, server_default='0') first_name = db.Column(db.String(100), nullable=False, server_default='') last_name = db.Column(db.String(100), nullable=False, server_default='')
class Image(db.Model): id = db.Column(db.String(), primary_key=True, default=lambda: str(uuid.uuid4())) parent_id = db.Column(db.String(), db.ForeignKey('image.id'), nullable=True) caption = db.Column(db.String()) url = db.Column(db.String()) finished = db.Column(db.Boolean(), default=False) created_at = db.Column(db.DateTime(), default=lambda: datetime.now().strftime("%Y-%m-%d, %H:%M:%S")) derivatives = db.relationship('Image', backref=db.backref('parent', uselist=False), lazy='joined', remote_side=[id], primaryjoin="Image.id == Image.parent_id", foreign_keys=[parent_id]) def save(self): db.session.add(self) db.session.commit() def __repr__(self): return f"<Image id={self.id} caption={self.caption} url={self.url} parent_id={self.parent_id}>"
class Superhero(BaseModel): __tablename__ = 'superhero' name = db.Column(db.String(400)) height = db.Column(db.String()) weight = db.Column(db.String()) special_power = db.Column(db.String()) fathers_name = db.Column(db.String(300)) mothers_name = db.Column(db.String(300)) main_powers = db.Column(ARRAY(db.String())) alive = db.Column(db.Boolean()) race = db.Column(db.String(200)) def __init__(self, payload): try: for key, value in payload.items(): if key == 'main_powers': continue if key == 'alive': if value.lower() == 'yes': setattr(self, key, True) else: setattr(self, key, False) continue setattr(self, key, value) if 'main_powers' in payload: self.main_powers = payload['main_powers'] except IntegrityError: raise InvalidRequestData(errors=[{ 'error': 'Superhero already exists', 'field': None, }]) db.session.add(self) db.session.commit() def get_details(self): """ This function returns the details of an user in a dictionary format. :return dict: Details of the user """ payload = dict() payload['name'] = self.name payload['height'] = self.height, payload['weight'] = self.weight, payload['special_power'] = self.special_power payload['fathers_name'] = self.fathers_name payload['mothers_name'] = self.mothers_name payload['alive'] = 'Yes' if self.alive else 'No' payload['race'] = self.race payload['main_powers'] = self.main_powers base_details = self.get_base_details() return {**base_details, **payload} @staticmethod def get_all_details(): """ This function gets the details of all the users in the database whose status is active :return list(dict): Details of all the users """ superheroes_details = [] for superhero in Superhero.get_all(): superheroes_details.append(superhero.get_details()) return superheroes_details def update(self, payload): """ This function updates an user with the given data in the payload. :return list(dict): Details of all the users """ try: for key, value in payload.items(): if key == 'main_powers': continue if key == 'alive': if value.lower() == 'yes': setattr(self, key, True) else: setattr(self, key, False) continue setattr(self, key, value) if 'main_powers' in payload: self.main_powers = payload['main_powers'] except IntegrityError: raise InvalidRequestData(errors=[{ 'error': 'Superhero already exists', 'field': None, }]) db.session.commit() return self.get_details() @staticmethod def delete_details(id_): """ This function soft deletes an user from the database. :param id_: ID of the superhero to be deleted. :return None: """ superhero = Superhero.get_one(id_) if superhero: superhero.soft_delete(superhero.id_) db.session.commit() return None