class Sentiment(db.Model): __tablename__ = 'sentiment' id = db.Column(db.Integer, primary_key=True) type = db.Column(db.String(32)) timeline_headline = db.Column(db.Text, db.ForeignKey('timeline.headline')) timeline = db.relationship('Timeline', backref='sentiment', cascade='all, delete') def __repr__(self): return f"Sentiment {self.id}, {self.type}"
class User(db.Model): __tablename__: 'user' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), nullable=False) location = db.Column(db.String(64)) timelines = db.relationship('Timeline', backref='user', cascade='all, delete') def __repr__(self): return f"User {self.id}, {self.username}"
class Company(db.Model): __tablename__ = 'company' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(30), unique=True, nullable=False) base_url = db.Column(db.String(100), unique=True) html_element = db.Column(db.String(20), nullable=False) element_class = db.Column(db.String(50)) html_label = db.Column(db.String(20)) label_class = db.Column(db.String(50)) news = db.relationship('News', backref='author', lazy=True) def __repr__(self) -> str: return f'Company({self.name}, {self.base_url})'
class News(db.Model, Serializer): __tablename__ = "News" url = db.Column(db.String(256), primary_key=True) source_id = db.Column(db.Integer, db.ForeignKey('NewsSource.id', ondelete='CASCADE'), primary_key=True) source = db.relationship('NewsSource') title = db.Column(db.String(512)) abstract = db.Column(db.String(2048)) image_url = db.Column(db.String(256)) date = db.Column(db.Date, index=True) def serialize(self): d = Serializer.serialize(self) d['source'] = self.source.name return d
class NewsSource(db.Model, Serializer): __tablename__ = "NewsSource" id = db.Column(db.Integer, primary_key=True, autoincrement=True) url = db.Column(db.String(1024), nullable=False) name = db.Column(db.String(1024), nullable=False) uw_style = db.Column(db.Boolean, nullable=False) category_id = db.Column(db.Integer, db.ForeignKey('NewsCategory.id', ondelete='CASCADE')) category = db.relationship('NewsCategory', backref=db.backref('sources')) def serialize(self): exclude = ['url', 'uw_style', 'category_id', 'category'] d = Serializer.serialize(self) [d.pop(attr, None) for attr in exclude] return d
class User(db.Model, UserMixin): user_id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(60), nullable=False, unique=True) password = db.Column(db.String(130), nullable=False) is_admin = db.Column(db.Boolean, default=False) news = db.relationship('News') # get the id of the user (need to return id as inheriting UserMixin) def get_id(self): return f'{self.user_id}' # store the password in hashed format def set_password(self, password): self.password = generate_password_hash(password, method='sha256') # check the password and stored hashed password def get_password(self, password): return check_password_hash(self.password, password)
class Category(db.Model): category_name = db.Column(db.String(30), primary_key=True) news = db.relationship('News', secondary=news_category)