class House(db.Model): __tablename__ = 'House' id = db.Column(db.Integer, primary_key=True) adress = db.Column(db.String(200, 'utf8_bin'), nullable=False) photo = db.Column(db.String(200, 'utf8_bin')) name = db.Column(db.String(200, 'utf8_bin'), nullable=False) descr = db.Column(db.Text(collation='utf8_bin'), nullable=False)
class Complaint(db.Model): __tablename__ = 'Complaint' id = db.Column(db.Integer, primary_key=True) comment = db.Column(db.Text(collation='utf8_bin'), nullable=False) flat_id = db.Column(db.ForeignKey('Flat.id', onupdate='CASCADE'), nullable=False, index=True) comp_type_id = db.Column(db.ForeignKey('TypeComplaint.id', onupdate='CASCADE'), nullable=False, index=True) date = db.Column(db.Date, nullable=False) comp_type = db.relationship('TypeComplaint', primaryjoin='Complaint.comp_type_id == TypeComplaint.id', backref='complaints') flat = db.relationship('Flat', primaryjoin='Complaint.flat_id == Flat.id', backref='complaints')
class PurchasedBook(db.Model): """已购买书籍信息""" __table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'} id = db.Column(db.Integer(), primary_key=True) # ID user_id = db.Column(db.Integer(), index=True) # 用户id book_id = db.Column(db.Integer(), index=True) # 书籍ID buy_info = db.Column(db.Text(), default='{}') # 已购买章节 {'卷id':[章节id,...]} auto_buy = db.Column(db.Boolean, default=False) # 是否自动购买下一章 created = db.Column(db.DateTime, server_default=func.now()) # 创建时间 db.UniqueConstraint('user_id', 'book_id')
class Request(db.Model): __tablename__ = 'Request' id = db.Column(db.Integer, primary_key=True) spec_id = db.Column(db.ForeignKey('Specialist.id', onupdate='CASCADE'), nullable=False, index=True) flat_id = db.Column(db.ForeignKey('Flat.id', onupdate='CASCADE'), nullable=False, index=True) date = db.Column(db.Date, nullable=False) comment = db.Column(db.Text(collation='utf8_bin'), nullable=False) flat = db.relationship('Flat', primaryjoin='Request.flat_id == Flat.id', backref='requests') spec = db.relationship('Specialist', primaryjoin='Request.spec_id == Specialist.id', backref='requests') def __init__(self, s, f, d, c): self.spec_id = s self.flat_id = f self.date = d self.comment = c
class Article(db.Model): __tablename__ = "core_article" __bind_key__ = 'article' # (remove, draft, published) = xrange(3) # ARTICLE_STATUS_CHOICES = [ # (published, _("published")), # (draft, _("draft")), # (remove, _("remove")), # ] # ARTICLE_STATUS_CHOICES = ("remove", "draft","published") id = db.Column(db.Integer(), primary_key=True) creator_id = db.Column(db.Integer()) title = db.Column(db.VARCHAR(255)) # identity_code = db.Column(db.VARCHAR(255)) cover = db.Column(db.VARCHAR(255)) # publish = db.Column(db.Enum, ARTICLE_STATUS_CHOICES) content = db.Column(db.Text()) created_datetime = db.Column(db.DateTime()) updated_datetime = db.Column(db.DateTime()) showcover = db.Column(db.Boolean(), default=False) read_count = db.Column(db.Integer(), default=0) feed_read_count = db.Column(db.Integer(), default=0) def __repr__(self): return "<Article %r>" % self.title @property def strip_content(self): html_string = self.content.strip() html_string = html_string.strip('\n') res = [] parser = HTMLParser() parser.handle_data = res.append parser.feed(html_string) parser.close() content_string = ''.join(res) return content_string.encode('utf-8')
class Publication(FullText, db.Model): __tablename__ = 'publication' __fulltext_columns__ = ( 'pub_title', 'pub_authors', 'pub_abstract', ) __table_args__ = (db.UniqueConstraint('pub_doi', 'pub_pmid', 'pub_pmc', 'pub_arxiv', 'pub_biorxiv', name='_pub_unique'), ) # Publication information id = db.Column(db.Integer, primary_key=True) pub_title = db.Column(db.String(300)) pub_authors = db.Column(db.String(1000)) pub_abstract = db.Column(db.Text()) pub_doi = db.Column(db.String(250)) pub_pmid = db.Column(db.Integer()) pub_pmc = db.Column(db.Integer()) pub_arxiv = db.Column(db.String(25)) pub_biorxiv = db.Column(db.String(250)) pub_biorxiv_url = db.Column(db.String(250)) pub_url = db.Column(db.String(250)) pub_pdf_url = db.Column(db.String(250)) pub_journal = db.Column(db.String(100)) pub_date = db.Column(db.DateTime) pub_created_on = db.Column(db.DateTime, default=now) pub_thumbnail = db.Column(db.String(THREAD.MAX_LINK), default=None) threads = db.relationship('Thread', back_populates='publication') downloads = db.relationship('Publication_Download', back_populates='publication') @property def download_count(self): return db.session.query(Publication_Download) \ .filter(Publication_Download.publication_id == self.id) \ .count() @property def pub_id(self): if self.pub_pmid: return self.pub_pmid elif self.pub_pmc: return f"PMC{self.pub_pmc}" elif self.pub_arxiv: return f"arxiv-{self.pub_arxiv}" elif self.pub_biorxiv: return f"biorxiv-{self.pub_biorxiv}" else: return self.pub_doi @validates('pub_title', 'pub_authors', 'pub_abstract', 'pub_journal') def truncate(self, key, value): max_len = getattr(self.__class__, key).prop.columns[0].type.length if value and max_len: if len(value) > max_len: return value[:max_len] return value def fetch_abstract(self): """ Used to process text within an abstract """ if self.pub_abstract: return linkify(self.pub_abstract) def fetch_github_links(self): if self.pub_abstract: return find_github_links(self.pub_abstract) def mark_downloaded(self, user_id): """ Marks a publication as having been downloaded. """ td = Publication_Download(user_id=user_id, publication_id=self.id) td, exists = get_or_create(Publication_Download, user_id=user_id, publication_id=self.id) def has_downloaded(self, user_id): """ Has the user downloaded the PDF? """ rs = Publication_Download.query.filter( db.and_(Publication_Download.user_id == user_id, Publication_Download.publication_id == self.id)) return True if rs.first() else False def __repr__(self): return '<Publication %r>' % (self.pub_title)