Exemple #1
0
class Task(db.Model, At, By):
    __tablename__ = "Task"
    PRIORITY_VALUES = [('low', 'low'), ('medium', 'medium'), ('high', 'high')]
    STATUS_VALUES = [('TODO', 'TODO'), ('DOING', 'DOING'), ('DONE', 'DONE')]
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    description = db.Column(db.String(1000))
    start_date = db.Column(db.Date(), nullable=False)
    expected_end_date = db.Column(db.Date(), nullable=True)
    actual_end_date = db.Column(db.Date())
    task_status = db.Column(ChoiceType(STATUS_VALUES, impl=db.String(5)),
                            default='TODO',
                            nullable=True)
    priority = db.Column(ChoiceType(PRIORITY_VALUES, impl=db.String(7)),
                         default='medium')

    reporter_id = db.Column(db.Integer, db.ForeignKey('User.id'))
    assignee_id = db.Column(db.Integer, db.ForeignKey('User.id'))
    team_id = db.Column(db.Integer, db.ForeignKey('Team.id'))

    reporter = db.relationship('User',
                               backref=db.backref('as_reporter'),
                               primaryjoin="User.id==Task.reporter_id")
    assignee = db.relationship('User',
                               backref=db.backref('as_assignee'),
                               primaryjoin="User.id==Task.assignee_id")

    team = db.relationship('Team', backref=db.backref('tasks', lazy='dynamic'))
class CommitteeContribution(BaseContribution):
    donor_committee_id = db.Column(
        db.Integer, db.ForeignKey("committee.id"), nullable=False
    )
    donor_committee = db.relationship(
        "Committee",
        foreign_keys=[donor_committee_id],
        backref=db.backref("contributions_given", lazy=True),
    )
    recipient_name = db.Column(db.String)
    recipient_city = db.Column(db.String(30))
    recipient_state = db.Column(db.String(2))
    recipient_zip = db.Column(db.String(9))
    recipient_occupation = db.Column(db.String(38))
    recipient_employer = db.Column(db.String(38))
    other_fec_id = db.Column(db.String(9))
    candidate_fec_id = db.Column(db.String(9))
    recipient_committee_id = db.Column(db.Integer, db.ForeignKey("committee.id"))
    recipient_committee = db.relationship(
        "Committee",
        foreign_keys=[recipient_committee_id],
        backref=db.backref("committee_contributions_received", lazy=True),
    )
    candidate_id = db.Column(db.Integer, db.ForeignKey("candidate.id"))
    candidate = db.relationship(
        "Candidate", backref=db.backref("committee_contributions", lazy=True)
    )
    transaction_fec_id = db.Column(db.String(32))
    file_num = db.Column(db.Numeric(22))
    memo_cd = db.Column(db.String(1))
    memo = db.Column(db.String)
    fec_unique_id = db.Column(db.Numeric(19), unique=True, nullable=False)
Exemple #3
0
class Note(db.Model):
    __tablename__ = 'notes'

    STATUS_DRAFT = 'draft'
    STATUS_PUBLISHED = 'published'
    SALE_TYPE_FREE = "free"
    SALE_TYPE_PAY_AS_USE = "pay_as_use"

    id = db.Column('id', db.String(64), primary_key=True)
    user_id = db.Column('user_id', db.ForeignKey("users.id"), nullable=False)
    title = db.Column('title', db.String(255))
    description = db.Column('description', db.TEXT)
    status = db.Column('status', db.String(32), nullable=False)
    created_at = db.Column('created_at',
                           db.DATETIME,
                           default=datetime.now,
                           nullable=False)
    updated_at = db.Column('updated_at',
                           db.DATETIME,
                           default=datetime.now,
                           onupdate=datetime.now)

    user = db.relationship("User",
                           backref=db.backref("note_user", uselist=False),
                           lazy='joined')
    tags = db.relationship('Tag',
                           secondary=NoteTag.__tablename__,
                           backref=db.backref('note_tags', lazy=True),
                           lazy='subquery')

    def __repr__(self):
        return "<Note '{}'>".format(self.id)
class Subject(BaseModel):
    __tablename__ = 'subject'
    topic = db.Column(db.Text, comment='考题题目')
    type = db.Column(db.String(255), comment='考题类型')
    answer = db.Column(db.Text, comment='考题答案')
    scene_id = db.Column(db.Integer, db.ForeignKey('scene.id'),
                             comment='场景id')
    scene = db.relationship('Scene',
                                 backref=db.backref('subject',
                                                    lazy='dynamic'))
    labels = db.relationship('Label', secondary=labels_subjects,
                            backref=db.backref('subjects', lazy='dynamic'))
class GroupHead(BaseModel):
    __tablename__ = 'group_head'
    total_group_score = db.Column(db.Integer, comment='组总得分', default=0)
    group_id = db.Column(db.Integer, db.ForeignKey('group.id'),
                             comment='用户')
    head_id = db.Column(db.Integer, db.ForeignKey('head.id'),
                             comment='标题')
    head = db.relationship('Head',
                                 backref=db.backref('group_head',
                                                    lazy='dynamic'))
    group = db.relationship('Group',
                                 backref=db.backref('group_head',
                                                    lazy='dynamic'))
Exemple #6
0
class Group(SurrogateBaseKey, Model):
    """User Group"""
    __tablename__ = 'groups'
    name = Column(db.String(20), unique=True, nullable=False)
    users = relationship(
        'User', secondary=GROUPS_USERS, lazy='subquery',
        backref=db.backref('groups', lazy=True))
    permissions = relationship(
        'Permission', secondary=GROUPS_PERMISSIONS, lazy='subquery',
        backref=db.backref('groups', lazy=True))

    def __repr__(self):
        return '<Group %r>' % self.name
class Question(BaseModel):
    __tablename__ = 'question'
    number = db.Column(db.Integer, comment='题号')
    total_question_score = db.Column(db.Integer, comment='考题总分')
    subject_id = db.Column(db.Integer, db.ForeignKey('subject.id'),
                             comment='题目id')
    subject = db.relationship('Subject',
                                 backref=db.backref('question',
                                                    lazy='dynamic'))
    paper_id = db.Column(db.Integer, db.ForeignKey('paper.id'),
                             comment='考卷id')
    paper = db.relationship('Paper',
                                 backref=db.backref('questions',
                                                    lazy='dynamic', order_by=number))
class Paper(BaseModel):
    __tablename__ = 'paper'
    name = db.Column(db.String(255), comment='考试名称')
    total_paper_score = db.Column(db.Integer, comment='考卷总分')
    exam_time = db.Column(db.Integer, comment='考试时间(分钟)')
    remainder_time = db.Column(db.Integer, comment='剩余时间(分钟)')
    head_id = db.Column(db.Integer, db.ForeignKey('head.id'),
                             comment='标题')
    head = db.relationship('Head',
                                 backref=db.backref('papers',
                                                    lazy='dynamic'))
    status = db.Column(db.String(255), comment='状态', default='new')
    users = db.relationship('User', secondary=users_papers,
                            backref=db.backref('papers', lazy='dynamic'))
class PaperQuestion(BaseModel):
    __tablename__ = 'paper_question'
    question_score = db.Column(db.Integer, comment='考题得分', default=0)
    user_paper_id = db.Column(db.Integer, db.ForeignKey('user_paper.id'),
                             comment='用户的考卷')
    user_answer = db.Column(db.Text, comment='用户答案')
    user_paper = db.relationship('UserPaper',
                                 backref=db.backref('paper_questions',
                                                    lazy='dynamic'))
    question_id = db.Column(db.Integer, db.ForeignKey('question.id'),
                             comment='关联的考题')
    question = db.relationship('Question',
                                 backref=db.backref('paper_questions',
                                                    lazy='dynamic'))
    status = db.Column(db.String(255), comment='状态', default='uncommitted')
Exemple #10
0
class User(db.Model, UserMixin):
    """
    User model

    Arguments:
        id (int): Primary User Key
        username (str): Unique username as chosen by the user
        email (str): User's email address
        password_hash (str): Users hashed password
    """
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean())
    confirmed_at = db.Column(db.DateTime())

    roles = db.relationship('Role',
                            secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic'))

    def __repr__(self):
        return '<User %r>' % self.username

    def __str(self):
        return self.username
Exemple #11
0
class VSRole(CRUDMixin, db.Model):
    """
    角色模型
    """
    __tablename__ = 'tbl_vsppm_role'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    # 角色名称
    name = db.Column(db.String(128), nullable=False, unique=True)
    # 角色描述
    role = db.Column(db.String(128), nullable=False)
    # 创建时间
    created_ts = db.Column(db.DateTime(timezone=True),
                           default=datetime.datetime.utcnow)
    # 更新时间
    updated_ts = db.Column(db.DateTime(timezone=True),
                           default=datetime.datetime.utcnow)
    # 激活状态
    active = db.Column(db.Boolean(), default=True)

    # 让VSRole和VSAcl产生关联
    # 因为VSAcl和VSRole表中间还有一个vsppm_user_role表,所以添加secondary
    # 正向引用是VSRole访问VSAcl,反向引用是从VSAcl访问表VSRole
    acls = db.relationship('VSAcl',
                           secondary=vsppm_role_acl,
                           backref=db.backref('roles'))

    def __init__(self, **kwargs):
        super(VSRole, self).__init__(**kwargs)

    def __repr__(self):
        return '<VSRole #%s:%r>' % (self.id, self.name)
Exemple #12
0
class User(BaseModel, db.Model, UserMixin):
    __tablename__ = 'user'
    phone = db.Column(db.String(32), unique=True)
    password = db.Column(db.String(48))
    chinese_name = db.Column(db.String(20))
    english_name = db.Column(db.String(20))
    photo_path = db.Column(db.String(255))
    update_time = db.Column(db.DateTime, default=datetime.now)
    create_time = db.Column(db.DateTime, default=datetime.now)
    coursetb_update_time = db.Column(db.DateTime, default=datetime.now)
    verify_token = db.Column(db.String(32), default='')
    status = db.Column(db.String(10))
    roles = db.relationship('Role', secondary=role_user_relationship,
                            backref=db.backref('users', lazy='dynamic'))
    teacher = db.relationship('TeacherInfo', backref='user', uselist=False,
                              cascade="all, delete-orphan")
    student = db.relationship('StudentInfo', backref='user', uselist=False,
                              cascade="all, delete-orphan")

    def __init__(self, chinese_name='', englisth_name='', phone='', password=''):
        self.chinese_name = chinese_name
        self.english_name = englisth_name
        self.phone = phone
        self.password = password
        self.photo_path = ''
        self.status = 'enabled'

    @property
    def is_active(self):
        return True

    def get_id(self):
        return self.id
Exemple #13
0
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(140))
    announce = db.Column(db.Text)
    description = db.Column(db.Text)
    created = db.Column(db.DateTime, default=datetime.now())
    pub_date = db.Column(db.DateTime, nullable=True, default=datetime.now())
    published = db.Column(db.Boolean, default=False)
    is_draft = db.Column(db.Boolean, default=True)
    tags = db.relationship('Tag',
                           secondary=post_tags,
                           backref=db.backref('posts', lazy='dynamic'))
    attachments = db.relationship('Attachment',
                                  cascade='all, delete-orphan',
                                  backref='post')

    def get_imgurls(self):
        pattern = re.compile(r'src\s*=\s*"(.+?)"')
        urls = re.findall(pattern, self.description)
        return [op.join(basedir, url[1:]) for url in urls]

    def assemble_text(self):
        pattern = re.compile(r'<.*?>')
        message = re.sub(pattern, '', self.description)
        tags = ' '.join(['#' + x.title.replace(' ', '_') for x in self.tags])
        return '{}\n{}\n{}'.format(self.title, message, tags)

    def __init__(self, *args, **kwargs):
        super(Post, self).__init__(*args, **kwargs)

    def __repr__(self):
        return self.title
Exemple #14
0
class Post(db.Model):
    __tablename__ = 'post'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(150))
    slug = db.Column(db.String(140), unique=True)
    pre_body = db.Column(db.Text)
    body = db.Column(db.Text)
    created = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    updated = db.Column(db.DateTime)
    count = db.Column(db.Integer, default=0)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    tags = db.relationship('Tag',
                           secondary='tags_posts',
                           backref=db.backref('posts', lazy='dynamic'))

    def __init__(self, *args, **kwargs):
        super(Post, self).__init__(*args, **kwargs)
        self.generate_slug()

    def generate_slug(self):
        if self.title:
            self.slug = slugify(self.title + str(datetime.utcnow()))

    def __str__(sefl):
        return '<{}>-{}'.format(sefl.id, sefl.title)
class Alert(BaseModel):
    created_on = db.Column(db.DateTime, default=datetime.utcnow)
    from_date = db.Column(db.Date)
    to_date = db.Column(db.Date)
    flagged_committee_contributions = db.Column(db.Numeric(18, 2))
    flagged_individual_contributions = db.Column(db.Numeric(18, 2))
    candidate_id = db.Column(db.Integer, db.ForeignKey("candidate.id"), nullable=False)
    candidate = db.relationship("Candidate", backref=db.backref("alerts", lazy=True))
Exemple #16
0
class Keyword(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(60))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship('User', backref=db.backref('keywords', lazy=True))

    def __repr__(self):
        return '<Keyword %r>' % self.name
class IndividualContribution(BaseContribution):
    committee_id = db.Column(
        db.Integer, db.ForeignKey("committee.id"), nullable=False, index=True
    )
    committee = db.relationship(
        "Committee", backref=db.backref("individual_contributions", lazy=True)
    )
    contributor_id = db.Column(
        db.Integer, db.ForeignKey("individual_contributor.id"), nullable=False
    )
    contributor = db.relationship(
        "IndividualContributor",
        backref=db.backref("individual_contributions", lazy=True),
    )
    committee_fec_id = db.Column(db.String(9))
    other_fec_id = db.Column(db.String(9))
    fec_unique_id = db.Column(db.Numeric(19), unique=True, nullable=False)
Exemple #18
0
class Attachments(db.Model, At, By):
    __tablename__ = "Attachments"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    path = db.Column(db.String(100))
    task_id = db.Column(db.Integer, db.ForeignKey('Task.id'))
    task = db.relationship('Task',
                           backref=db.backref('attachments', lazy='dynamic'))
class UserHead(BaseModel):
    __tablename__ = 'user_head'
    total_user_score = db.Column(db.Integer, comment='用户总得分', default=0)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'),
                             comment='用户')
    user = db.relationship('User',
                                 backref=db.backref('user_head',
                                                    lazy='dynamic'))
    head_id = db.Column(db.Integer, db.ForeignKey('head.id'),
                             comment='标题')
    head = db.relationship('Head',
                                 backref=db.backref('user_head',
                                                    lazy='dynamic'))
    group_head_id = db.Column(db.Integer, db.ForeignKey('group_head.id'),
                             comment='组标题id')
    group_head = db.relationship('GroupHead',
                                 backref=db.backref('user_heads',
                                                    lazy='dynamic'))
Exemple #20
0
class Category(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(60))
    news_api_id = db.Column(db.String(60))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship('User', backref=db.backref('categories', lazy=True))

    def __repr__(self):
        return '<Category %r>' % self.name
class UserPaper(BaseModel):
    __tablename__ = 'user_paper'
    user_score = db.Column(db.Integer, comment='考卷得分', default=0)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'),
                             comment='用户')
    user = db.relationship('User',
                                 backref=db.backref('user_paper',
                                                    lazy='dynamic'))
    paper_id = db.Column(db.Integer, db.ForeignKey('paper.id'),
                             comment='考卷id')
    paper = db.relationship('Paper',
                                 backref=db.backref('user_paper',
                                                    lazy='dynamic'))
    user_head_id = db.Column(db.Integer, db.ForeignKey('user_head.id'),
                             comment='用户标题id')
    user_head = db.relationship('UserHead',
                                 backref=db.backref('user_papers',
                                                    lazy='dynamic'))
class FlaggedEmployerMatchingRule(BaseModel):
    employer = db.Column(db.String)
    city = db.Column(db.String)
    state = db.Column(db.String)
    flagged_employer_id = db.Column(
        db.Integer, db.ForeignKey("flagged_employer.id"), nullable=False
    )
    flagged_employer = db.relationship(
        "FlaggedEmployer", backref=db.backref("matching_rules")
    )
Exemple #23
0
class Words(db.Model):
    __tablename__ = 'words'
    __table_args__ = (
        db.UniqueConstraint("view_id", "word"),
    )
    id = db.Column(db.Integer, primary_key=True)
    word = db.Column(db.String(255), nullable=False)
    translation = db.Column(db.String(255), nullable=False)
    url = db.Column(db.String(511), nullable=False)
    created_on = db.Column(db.DateTime(), default=datetime.utcnow)

    category_id = db.Column(db.Integer, db.ForeignKey('category.id', ondelete='CASCADE'), nullable=False)
    category = db.relationship('Category',  backref=db.backref('words', lazy=True))

    view_id = db.Column(db.Integer, db.ForeignKey('view.id', ondelete='CASCADE'), nullable=False)
    view = db.relationship('View',  backref=db.backref('views', lazy=True))

    def __repr__(self):
        return '<Words %r>' % self.word
class UserProfile(Model, SurrogatePK):
    __tablename__ = 'userprofile'

    # id is needed for primary join, it does work with SurrogatePK class
    id = db.Column(db.Integer, primary_key=True)

    user_id = reference_col('users', nullable=False)
    user = relationship('User', backref=db.backref('profile', uselist=False))
    follows = relationship('UserProfile',
                           secondary=followers_assoc,
                           primaryjoin=id == followers_assoc.c.follower,
                           secondaryjoin=id == followers_assoc.c.followed_by,
                           backref='followed_by',
                           lazy='dynamic')

    def __init__(self, user, **kwargs):
        db.Model.__init__(self, user=user, **kwargs)

    def is_following(self, profile):
        return bool(self.follows.filter(followers_assoc.c.followed_by == profile.id).count())

    def follow(self, profile):
        if self is not profile and not self.is_following(profile):
            self.follows.append(profile)
            return True
        return False

    def unfollow(self, profile):
        if self is not profile and self.is_following(profile):
            self.follows.remove(profile)
            return True
        return False

    @property
    def following(self):
        if current_user:
            return current_user.profile.is_following(self)
        return False

    @property
    def username(self):
        return self.user.username

    @property
    def bio(self):
        return self.user.bio

    @property
    def image(self):
        return self.user.image

    @property
    def email(self):
        return self.user.email
class User(BaseModel, UserMixin):
    __tablename__ = 'user'
    username = db.Column(db.String(255), unique=True, index=True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean(), index=True)
    confirmed_at = db.Column(db.DateTime())
    last_login_at = db.Column(db.DateTime())
    current_login_at = db.Column(db.DateTime())
    last_login_ip = db.Column(db.String(63))
    current_login_ip = db.Column(db.String(63))
    login_count = db.Column(db.Integer)
    groups = db.relationship('Group',
                             secondary=groups_users,
                             backref=db.backref('users', lazy='dynamic'))
    roles = db.relationship('Role',
                            secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic'))

    def __repr__(self):
        return '<User %r>' % self.username
Exemple #26
0
class Auth(db.Model):
    __tablename__ = 'auths'

    id = db.Column('id', db.String(64), primary_key=True)
    token = db.Column('token', db.String(255), index=True, unique=True)
    email = db.Column('email', db.ForeignKey(User.email), index=True, nullable=False)
    created_at = db.Column('created_at', db.DATETIME, default=datetime.now, nullable=False)

    user = db.relationship("User", backref=db.backref("auth_user", uselist=False), lazy='joined')

    def __repr__(self):
        return "<Auth '{}'>".format(self.id)
Exemple #27
0
class User(db.Model, UserMixin):
    id = db.Column(db.Integer(), primary_key=True)
    email = db.Column(db.String(100), unique=True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean())
    roles = db.relationship('Role',
                            secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic'))

    def get_id(self):
        return self.id

    def get_urole(self):
        return self.role
Exemple #28
0
class Sample(db.Model):
    """
    Sample model

    Arguments:
        id (int): Primary Sample key
        sensor_id (int): Foreign ``Sensor``.id key
        sensor: ``Sensor`` object related to this sample
        datetime (datetime): ``datetime`` object of this sample (should in UTC)
        value (float): Value of sample
    """
    __tablename__ = 'samples'

    id = db.Column(db.Integer, primary_key=True)

    sensor_id = db.Column(db.Integer, db.ForeignKey('sensors.id'), index=True)
    sensor = db.relationship('Sensor', backref=db.backref('samples'))

    datetime = db.Column(db.DateTime, index=True)
    value = db.Column(db.Float)

    def to_json(self):
        """
        Creates a JSON object from Sample. Used where multiple samples will be
        displayed at once.
        """
        json_sample = {
            'id': self.id,
            'sensor': self.sensor.to_sample_json(),
            'value': self.value,
            'datetime': self.datetime,
            'url': url_for('api.get_sample', sid=self.id, _external=True)
        }
        return json_sample

    def to_sensor_json(self):
        """
        Creates a JSON object from Sample for used with Sensor JSON.
        """
        json_sample = {
            'id': self.id,
            'value': self.value,
            'datetime': str(self.datetime),
            'url': url_for('api.get_sample', sid=self.id, _external=True)
        }
        return json_sample

    def __repr__(self):
        return '<Sample %r>' % self.id
Exemple #29
0
class Product(db.Model):
    __tablename__ = 'products'
    id = db.Column(db.Integer, primary_key=True)
    full_name = db.Column(db.String(255), nullable=False)
    short_name = db.Column(db.String(255), nullable=False)
    raw_description = db.Column(db.Text, nullable=False)
    img = db.Column(db.String(255), nullable=True)
    price = db.Column(db.String(25), nullable=False)
    color = db.Column(db.String(255), nullable=True)
    review_number = db.Column(db.Integer, nullable=True)

    category_id = db.Column(db.Integer, db.ForeignKey('category.id'), nullable=False)
    category = db.relationship('Category', backref=db.backref('product', lazy=True))

    def __str__(self):
        return self.short_name
class Comment(Model, SurrogatePK):
    __tablename__ = 'comment'

    id = db.Column(db.Integer, primary_key=True)
    body = Column(db.Text)
    createdAt = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)
    updatedAt = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)
    author_id = reference_col('userprofile', nullable=False)
    author = relationship('UserProfile', backref=db.backref('comments'))
    article_id = reference_col('article', nullable=False)

    def __init__(self, article, author, body, **kwargs):
        db.Model.__init__(self,
                          author=author,
                          body=body,
                          article=article,
                          **kwargs)