Example #1
0
class UserModel(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80))
    email = db.Column(db.String(120))
    password = db.Column(db.String(80))

    def __init__(self, username, email, password):
        self.username = username
        self.password = password
        self.email = email

    def save_to_db(self):
        db.session.add(self)
        db.session.commit()

    def json(self):
        return {'id': self.id, 'username': self.username, 'email': self.email}

    @classmethod
    def find_by_username(cls, username):
        return cls.query.filter_by(username=username).first()

    @classmethod
    def find_by_id(cls, _id):
        return cls.query.filter_by(id=_id).first()
Example #2
0
class AnsibleTasks(db.Model):
    """ansible任务表"""
    __tablename__ = 'ansibletask'
    id = db.Column(db.Integer, nullable=False, primary_key=True, autoincrement=True)
    ansible_id = db.Column(db.String(80), unique=True, nullable=True)
    celery_id = db.Column(db.String(80), unique=True, nullable=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=True)
    group_name = db.Column(db.String(80), nullable=True)
    playbook = db.Column(db.String(80), unique=False, nullable=True)
    extra_vars = db.Column(db.Text, nullable=True)
    option_id = db.Column(db.Integer, db.ForeignKey('options.id', ondelete='SET NULL'), nullable=True)

    # True: 任务执行完成 False: 任务执行中
    status_choices = (
        (1, '执行中'),
        (2, '已完成'),
        (3, '任务失败'),
        (4, '任务取消')
    )
    state = db.Column(ChoiceType(status_choices, db.Integer()), nullable=False, default=0, comment="任务状态")
    # state = db.Column(db.Boolean, default=False, nullable=False)
    ansible_result = db.Column(db.Text(16777216))
    celery_result = db.Column(db.Text)
    create_time = db.Column(db.DateTime, default=datetime.datetime.now)
    cancelled = db.Column(db.Boolean, nullable=False, default=False)

    user = db.relationship('User')
    option = db.relationship('Options')
    # 排序
    __mapper_args__ = {
        "order_by": create_time.desc(),
    }

    def __repr__(self):
        return "<{}: {}>".format(self.__class__.__name__, self.ansible_id)
Example #3
0
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)
    watch_queue = db.relationship('Series',
                                  secondary=association_table,
                                  backref=db.backref('queue', lazy='dynamic'))
Example #4
0
class HostGroup(db.Model):
    """主机组表"""
    __tablename__ = 'host_group'
    id = db.Column(db.Integer, nullable=False, primary_key=True, autoincrement=True)
    name = db.Column(db.String(48), nullable=False, unique=True)
    description = db.Column(db.String(128))
    # 关系定义,不会在数据库中生成字段
    hosts = db.relationship('Host', back_populates='group')

    def __repr__(self):
        return '<HostGroup %r>' % self.name
Example #5
0
class Host(db.Model):
    """主机表"""
    __tablename__ = 'host'
    id = db.Column(db.Integer, nullable=False, primary_key=True, autoincrement=True)
    hostname = db.Column(db.String(60), nullable=False, unique=True)
    ip = db.Column(db.String(20), nullable=False, unique=True)
    port = db.Column(db.Integer, nullable=False, default=22)
    group_id = db.Column(db.Integer, db.ForeignKey('host_group.id'), nullable=True)
    # 关系标量
    group = db.relationship('HostGroup', back_populates='hosts')

    def __repr__(self):
        return '<Host %r>' % self.hostname
Example #6
0
class Series(db.Model):
    __tablename__ = 'series'
    id = db.Column(db.Integer, primary_key=True)
    kitsu_id = db.Column(db.Integer, nullable=True)
    canonical_title = db.Column(db.String(120), nullable=True)
    en_title = db.Column(db.String(120), nullable=True)
    en_jp_title = db.Column(db.String(120), nullable=True)
    attributes = db.relationship('Attribute', uselist=False, backref='series')
    cover_image = db.relationship('CoverImage',
                                  uselist=False,
                                  backref='series')
    poster_image = db.relationship('PosterImage',
                                   uselist=False,
                                   backref='series')
Example #7
0
class Post(db.Model):
    """wiki文章表"""
    id = db.Column(db.Integer, nullable=False, primary_key=True, autoincrement=True)
    title = db.Column(db.String(60), nullable=False, comment="文章标题")
    desc = db.Column(db.String(180), comment="文章摘要")
    body = db.Column(db.Text)
    published = db.Column(db.Boolean, nullable=False, default=False, comment="文档发布状态")
    create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment="创建时间")
    update_time = db.Column(db.DateTime, default=datetime.datetime.now, comment="更新时间")
    # 与分类表关联
    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
    category = db.relationship('Category', back_populates='posts')
    # 作者
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    author = db.relationship('User', back_populates='posts')
Example #8
0
class UserModel(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(64), unique=True)
    password = db.Column(db.String(512), nullable=False)
    favourite_articles = db.Column(db.ARRAY(db.Integer), default=[])
    favourite_services = db.Column(db.ARRAY(db.String), default=[])
    has_been_initialized = db.Column(db.Boolean, default=False)
    show_fav_as_default = db.Column(db.Boolean, default=False)

    def commit_db(self):
        db.session.commit()

    def delete_user(self):
        self.query.delete()
        self.commit_db()
Example #9
0
class Options(db.Model):
    """playbook选项参数"""
    __tablename__ = 'options'
    id = db.Column(db.Integer, nullable=False, primary_key=True, autoincrement=True)
    name = db.Column(db.String(48), nullable=False)
    content = db.Column(db.Text, nullable=True)
    playbook_id = db.Column(db.Integer, db.ForeignKey('playbook.id'), nullable=False)
    env_id = db.Column(db.Integer, db.ForeignKey('environment.id'))
    url = db.Column(db.String(128), nullable=True)

    playbook = db.relationship('PlayBook')
    env = db.relationship('Environment')

    def __repr__(self):
        return '<Options %r>' % self.name
Example #10
0
class Attribute(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    synopsis = db.Column(db.Text, nullable=True)
    rating = db.Column(db.Integer, nullable=True)
    rating_rank = db.Column(db.Integer)
    favorites_count = db.Column(db.Integer)
    popularity_rank = db.Column(db.Integer)
    start_date = db.Column(db.String(15), nullable=True)
    end_date = db.Column(db.String(15))
    status = db.Column(db.Text)
    episode_count = db.Column(db.Integer)
    episode_length = db.Column(db.Integer)
    nsfw = db.Column(db.Boolean)
    series_id = db.Column(db.Integer,
                          db.ForeignKey('series.id'),
                          nullable=False)
Example #11
0
class PlayBook(db.Model):
    """playbook表"""
    __tablename__ = 'playbook'
    id = db.Column(db.Integer, nullable=False, primary_key=True, autoincrement=True)
    name = db.Column(db.String(48), nullable=False, unique=True)
    author = db.Column(db.String(20), nullable=False)
    information = db.Column(db.String(48), nullable=False, unique=True)
    is_env = db.Column(db.Boolean, nullable=False, default=False)
    upload = db.Column(db.Boolean, nullable=False, default=False)
    step = db.Column(db.Integer, nullable=True)

    # 建立一对一关系
    detail = db.relationship('PlayBookDetail', back_populates='playbook', uselist=False, cascade='all')

    def __repr__(self):
        return '<PlayBook %r>' % self.name
Example #12
0
class User(db.Model):
    """User model
    """

    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(255), nullable=False)
    active = db.Column(db.Boolean, default=True)
    is_admin = db.Column(db.Boolean, default=False)
    examples = db.relationship("Example", backref="user", lazy=True)

    def __init__(self, **kwargs):
        super(User, self).__init__(**kwargs)
        self.password = pwd_context.hash(self.password)

    def __repr__(self):
        return "<User %s>" % self.email
Example #13
0
class Environment(db.Model):
    """环境信息"""
    __tablename__ = 'environment'
    id = db.Column(db.Integer, nullable=False, primary_key=True, autoincrement=True)
    name = db.Column(db.String(20), nullable=False)

    def __repr__(self):
        return '<Environment %r>' % self.name
Example #14
0
class User(db.Model):
    """用户表"""
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(48), unique=True, nullable=False)
    email = db.Column(db.String(64), unique=True, nullable=False)
    password = db.Column(db.String(128), nullable=False)
    bucket = db.Column(db.String(64), nullable=True, comment="用户桶名称")
    use_space = db.Column(db.Integer, default=0, comment="用户已使用空间")

    avatar_s = db.Column(db.String(64))
    avatar_m = db.Column(db.String(64))
    avatar_l = db.Column(db.String(64))

    # 邮箱确认字段
    confirmed = db.Column(db.Boolean, default=False)
    posts = db.relationship('Post', back_populates='author')

    def __init__(self, **kwargs):
        super(User, self).__init__(**kwargs)
        self.generate_avatar()

    def generate_avatar(self):
        avatar = Identicon()
        filenames = avatar.generate(text=self.username)
        self.avatar_s = filenames[0]
        self.avatar_m = filenames[1]
        self.avatar_l = filenames[2]
        db.session.commit()

    def __repr__(self):
        return '<User %r>' % self.username
Example #15
0
class TokenBlacklist(db.Model):
    """Blacklist representation
    """

    id = db.Column(db.Integer, primary_key=True)
    jti = db.Column(db.String(36), nullable=False, unique=True)
    token_type = db.Column(db.String(10), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
    revoked = db.Column(db.Boolean, nullable=False)
    expires = db.Column(db.DateTime, nullable=False)

    user = db.relationship("User", lazy="joined")

    def to_dict(self):
        return {
            "token_id": self.id,
            "jti": self.jti,
            "token_type": self.token_type,
            "user_identity": self.user_identity,
            "revoked": self.revoked,
            "expires": self.expires,
        }
Example #16
0
class RevokedTokenModel(db.Model):
    __tablename__ = 'revoked_tokens'
    id = db.Column(db.Integer, primary_key=True)
    jti = db.Column(db.String(120))

    def add(self):
        db.session.add(self)
        db.session.commit()

    @classmethod
    def is_jti_blacklisted(cls, jti):
        query = cls.query.filter_by(jti=jti).first()
        return bool(query)
Example #17
0
class ArticleModel(db.Model):
    __tablename__ = 'articles'
    id = db.Column(db.Integer, primary_key=True, nullable=False)
    name = db.Column(db.String(512), nullable=False)
    title = db.Column(db.String(512), nullable=False)
    url = db.Column(db.String(512), nullable=False)
    author = db.Column(db.String(128), nullable=False)
    upload_date = db.Column(db.DateTime, nullable=False)
    hash = db.Column(db.String(512), nullable=False)

    def __init__(self, **kwargs: Any) -> None:
        super().__init__(**kwargs)
        self.hash: bytes = self.set_hash()

    def set_hash(self) -> bytes:
        data_to_encode = '{name}-{date}-{author}-{url}'.format(
            name=self.name,
            date=self.upload_date,
            author=self.author,
            url=self.url)
        return b64encode(data_to_encode.encode('utf-8')).decode('utf-8')

    def get_article(self) -> dict:
        return {
            'id': self.id,
            'url': self.url,
            'title': self.title,
            'name': self.name,
            'author': self.author,
            'upload_date': self.upload_date,
            'hash': str(self.hash)
        }

    def save(self) -> None:
        db.session.add(self)

    def exist(self) -> bool:
        return self.query.filter_by(hash=self.hash).scalar() is not None
Example #18
0
class Example(db.Model):
    """Example - to be changed
    """

    id = db.Column(db.Integer, primary_key=True)
    search_query = db.Column(db.String(1500), nullable=True)
    search_tags = db.Column(db.Text, nullable=True)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"))

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

    def __repr__(self):
        return "<Example %s>" % self.id
Example #19
0
class FileRepository(db.Model):
    """文件库"""
    __tablename__ = 'file_repository'
    id = db.Column(db.Integer, nullable=False, primary_key=True, autoincrement=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    file_type_choices = (
        (1, '文件'),
        (2, '文件夹')
    )
    file_type = db.Column(ChoiceType(file_type_choices, db.Integer()), nullable=True, comment="文件类型")
    name = db.Column(db.String(64), nullable=False, comment="文件/文件夹名称")
    key = db.Column(db.String(128), nullable=True, comment="文件存储在OSS中的KEY")
    file_size = db.Column(db.Integer, nullable=True, comment="文件大小/字节")
    file_path = db.Column(db.String(255), nullable=True, comment="文件路径")
    parent_id = db.Column(db.Integer, db.ForeignKey('file_repository.id'), nullable=True, comment="父级目录id")
    update_datetime = db.Column(db.DateTime, default=datetime.datetime.now, comment="更新时间")

    user = db.relationship('User')
    parent = db.relationship('FileRepository', remote_side=[id], back_populates='childs')
    childs = db.relationship('FileRepository', back_populates='parent', cascade='all')

    def __repr__(self):
        return "<{}: {}>".format(self.__class__.__name__, self.id)
Example #20
0
class TimeReport(ResourceMixin, db.Model):
    __tablename__ = 'timereports'
    id = db.Column(db.Integer, primary_key=True)

    # Timereport entry details
    report_id = db.Column(db.Integer, nullable=False)
    date = db.Column(db.DateTime, nullable=False)
    hours_worked = db.Column(db.Float, nullable=False)
    job_group = db.Column(db.String(5), nullable=False)
    employee_id = db.Column(db.Integer, nullable=False)

    def __init__(self, **kwargs):
        # Call Flask-SQLAlchemy's constructor.
        super(TimeReport, self).__init__(**kwargs)

    @classmethod
    def get_total_pay(cls, hours, job_group):
        """
        Calculates total pay based on hours worked and the job group
        
        :params: hours, job_group
        :return: (int) 
        """
        job_groups = {'A': 20, 'B': 30}

        return hours * job_groups[job_group]

    @classmethod
    def get_payperiod(cls, date):
        """
        Processes date into startDate and endDate of a pay period.

        :params: date 
        :return: tuple(startDate, endDate)
        """
        if date.day <= 15:
            startDate = datetime.datetime(date.year, date.month,
                                          1).strftime("%Y-%m-%d")
            endDate = datetime.datetime(date.year, date.month,
                                        15).strftime("%Y-%m-%d")
        else:
            startDate = datetime.datetime(date.year, date.month,
                                          16).strftime("%Y-%m-%d")
            endDate = datetime.datetime(
                date.year, date.month,
                monthrange(date.year, date.month)[1]).strftime("%Y-%m-%d")

        return (startDate, endDate)
Example #21
0
class User(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(100), nullable=False)
    firstname = db.Column(db.String(100), nullable=False)
    lastname = db.Column(db.String(100), nullable=False)
    password = db.Column(db.String(200), nullable=False)
    email = db.Column(db.String(100), nullable=False)
    language = db.Column(db.String())
Example #22
0
class Category(db.Model):
    """wiki分类表"""
    __tablename__ = 'category'
    id = db.Column(db.Integer, nullable=False, primary_key=True, autoincrement=True)
    name = db.Column(db.String(32), unique=True, comment="分类名称")
    posts = db.relationship('Post', back_populates='category')