class ArticleData(BaseModel, db.Model): __tablename__ = 'article_data' id = db.Column(db.INT, primary_key=True) article_id = db.Column(db.INT, db.ForeignKey('article.id')) visit_date = db.Column(db.Date, default=date.today) pv = db.Column(db.INT, default=0) uv = db.Column(db.INT, default=0) ext_property = db.Column(db.JSON, default={}) is_available = db.Column(db.INT, default=1) create_ts = db.Column(db.TIMESTAMP, default=datetime.now()) update_ts = db.Column(db.TIMESTAMP, default=datetime.now()) @classmethod def statistics_article_data(cls): def _statistics(vd): begin = time.time() VL = VisitorLog items = db.session.query(VL.url, func.count( VL.url)).filter(VL.visit_date == vd).group_by(VL.url).all() for item in items: article = Article.query_or_create(url=item[0]) if article: ad = cls.query_or_create(article_id=article.id, visit_date=vd) ad.pv = item[1] db.session.add(ad) db.session.commit() logger.debug('statistics_article_data time: %s', (time.time() - begin)) vd = date.today() _statistics(vd) vd = date.today() - timedelta(days=1) _statistics(vd)
class Post(db.Model, ResourceMixin): __tablename__ = 'post' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100), nullable=False) content = db.Column(db.String(1024), nullable=False) # ===================== Relationships ================================== account_id = db.Column(db.Integer, db.ForeignKey('account.id'), nullable=False) account = db.relationship('Account', backref=db.backref('posts', lazy=True)) @classmethod def find(cls, identity): return Post.query.filter((cls.title == identity) | (cls.id == identity)).first() # @classmethod # def get_all_posts(cls): # return Post.query.all() @classmethod def get_all_posts(cls, page=None): if page is None: return Post.query.order_by(Post.create_date.desc()).all() else: return Post.query.order_by(Post.create_date.desc()).paginate( page=page, per_page=5)
class Code(BaseModel, db.Model): __tablename__ = 'code' id = db.Column(db.String, primary_key=True) user_id = db.Column(db.INT, db.ForeignKey('user.id'), default="0") name = db.Column(db.String, default="") description = db.Column(db.String, default="") type = db.Column(db.String, default="") status = db.Column(db.String, default="") source = db.Column(db.String, default="") code = db.Column(db.JSON, default={}) is_available = db.Column(db.INT, default=1) create_ts = db.Column(db.TIMESTAMP, default=datetime.now()) update_ts = db.Column(db.TIMESTAMP, default=datetime.now()) @classmethod def create_or_update(cls, **kw): id = 0 if 'id' in kw: id = kw.pop('id') item = cls.query_item(id=id, user_id=g.current_user.id) if not item: kw['id'] = AutoId.generate_id() kw['user_id'] = g.current_user.id item = cls.create(**kw) else: cls.update_by_id(id, **kw) return item
class Book(db.Model): id = db.Column(db.Integer, primary_key = True) title = db.Column(db.String(100), nullable=False) description = db.Column(db.String(200), nullable=False) author_id = db.Column(db.Integer, db.ForeignKey('author.id'), nullable=False) def __init__(self, title, description, author_id): self.title = title self.description = description self.author_id = author_id
class CallHistory(db.Model, ResourceMixin): __tablename__ = 'call_history' id = db.Column(db.Integer, primary_key=True) datetime = db.Column(db.DateTime, nullable=False, default=datetime.now()) # ======================== RELATIONSHIPS ================================= hr_id = db.Column(db.Integer, db.ForeignKey('account.id')) hr = db.relationship('Account', backref=db.backref('calls', lazy=True)) applicant_id = db.Column(db.Integer, db.ForeignKey('applicant.id')) applicant = db.relationship('Applicant', backref=db.backref('calls', lazy=True)) @classmethod def find_call(cls, id): return CallHistory.query.filter(cls.id == id) def save(self): self.datetime = datetime.now() db.session.add(self) db.session.commit()
class VisitLog(BaseModel, db.Model): __tablename__ = 'visit_log' id = db.Column(db.INT, primary_key=True) visit_user_id = db.Column(db.INT, db.ForeignKey('visit_user.id')) method = db.Column(db.String, default="") domain = db.Column(db.String, default="") url = db.Column(db.String, default="") path = db.Column(db.String, default="") referrer = db.Column(db.String, default="") ext = db.Column(db.JSON, default={}) is_del = db.Column(db.INT, default=0) create_ts = db.Column(db.TIMESTAMP, default=datetime.now()) update_ts = db.Column(db.TIMESTAMP, default=datetime.now()) visit_user = db.relationship('VisitUser', backref=b('visit_logs', lazy='dynamic')) @classmethod def get_count_by_url(cls, url): return cls.query.filter(cls.url.like('%{}'.format(url))).count()
class Applicant(db.Model, ResourceMixin): __tablename__ = 'applicant' ATTAINMENT = OrderedDict([ ('none', 'No formal education'), ('primary', 'Primary education'), ('secondary', 'Secondary education/High school'), ('ged', 'General Education Diploma'), ('vocational', 'Vocational qualification'), ('bachelor\'s', 'Bachelor\'s degree'), ('master\'s', 'Master\'s degree'), ('doctoral', 'Doctorate or higher') ]) SHIFT = OrderedDict([ ('any', 'Any'), ('day', 'Day Shift'), ('mid', 'Mid Shift'), ('night', 'Night Shift'), ('shift', 'Shifting') ]) MARITAL_STATUS = OrderedDict([ ('single', 'Single'), ('married', 'Married'), ('widowed', 'Widowed'), ('divorced', 'Divorced'), ('separated', 'Separated') ]) STATUS = OrderedDict([ ('pending', 'Pending'), ('phone_invite', 'Phone Invite'), ('no_reach', 'Can\'t be reached'), ('declined', 'Declined'), ('interview', 'For interview'), ('passed', 'Passed'), ('failed', 'Failed'), ('hired', 'Hired') ]) id = db.Column(db.Integer, primary_key=True) # Personal Information last_name = db.Column(db.String(50), nullable=False) first_name = db.Column(db.String(50), nullable=False) middle_name = db.Column(db.String(50), nullable=True) birthdate = db.Column(db.DateTime, nullable=True, default=datetime.strptime('0001-01-01 12:00 AM', '%Y-%m-%d %I:%M %p')) email = db.Column(db.String(50), nullable=False, unique=True) address = db.Column(db.String(300), nullable=True) mobile1 = db.Column(db.String(11), nullable=False, unique=True) mobile2 = db.Column(db.String(11), nullable=True) landline = db.Column(db.String(11), nullable=True) marital_status = db.Column(db.Enum(*MARITAL_STATUS, name='marital_status', native_enum=False), index=True, nullable=False, server_default='single') # Scholastic Information educational_attainment = db.Column(db.Enum(*ATTAINMENT, name='educational_attainment', native_enum=False), index=True, nullable=False, server_default='bachelor\'s') course = db.Column(db.String(30), nullable=True) graduation_year = db.Column(db.String(4), nullable=True) # Job Preference applied_position = db.Column(db.String(50), nullable=True) expected_salary = db.Column(db.Integer, nullable=False, default=0) preferred_shift = db.Column(db.Enum(*SHIFT, name='preferred_shift', native_enum=False), index=True, nullable=False, server_default='any') preferred_location = db.Column(db.String(50), nullable=True) # Call Information status = db.Column(db.Enum(*STATUS, name='status', native_enum=False), index=True, nullable=False, server_default='pending') remarks = db.Column(db.String(300), nullable=True) # Additional Information acquire_date = db.Column(db.DateTime, nullable=False, default=datetime.now()) source = db.Column(db.String(30), nullable=True) interview_datetime = db.Column(db.DateTime, nullable=True, default=datetime.strptime('0001-01-01 12:00 AM', '%Y-%m-%d %I:%M %p')) # ===================== Relationships ================================== hr_id = db.Column(db.Integer, db.ForeignKey('account.id')) hr = db.relationship('Account', backref=db.backref('applicants', lazy=True)) @classmethod def find_applicant(cls, id): return Applicant.query.filter(cls.id == id).first() @classmethod def count(cls): return Applicant.query.count()