class Item(UserMixin, db.Model):
    __tablename__ = 'items'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    item_name = db.Column(db.String(50), nullable=False, unique=False)
    time = db.Column(db.String(50), nullable=True, unique=False)
    timestamp = db.Column(db.DateTime, default=datetime.now)
    uploader_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    uploader = db.relationship('User',
                               backref=db.backref('items', lazy='dynamic'))
    status = db.Column(db.String(50), nullable=False, unique=False)
    category_id = db.Column(db.Integer,
                            db.ForeignKey('category.id'),
                            nullable=True)
    category = db.relationship('Category', backref=db.backref('items'))
    location = db.Column(db.String(50), nullable=True, unique=False)
    description = db.Column(db.String(400), nullable=True, unique=False)
    comment = db.relationship('Comment', backref=db.backref('items'))
    pic = db.Column(db.String(64), default='img/a1.jpg')
    store_location_id = db.Column(db.Integer,
                                  db.ForeignKey('store_location.id'),
                                  nullable=True)
    store_location = db.relationship('Storage', backref=db.backref('items'))

    # store_location = db.relationship('Storage', backref=db.backref('items',lazy='dynamic'))
    def __repr__(self):
        return self.item_name
class Product(db.Model):
    id = db.Column(db.Integer(), primary_key=True)

    name = db.Column(db.String(120), unique=True, nullable=False, index=True)
    email = db.Column(db.String(120), nullable=True)
    slug = db.Column(db.String(120), unique=True, nullable=False, index=True)

    product_group_id = db.Column(db.Integer(),
                                 db.ForeignKey('product_group.id'),
                                 nullable=False)

    objectives = db.relationship('Objective',
                                 backref=db.backref('product', lazy='joined'),
                                 lazy='dynamic',
                                 passive_deletes=True)
    indicators = db.relationship('Indicator',
                                 backref=db.backref('product', lazy='joined'),
                                 lazy='dynamic',
                                 passive_deletes=True)

    username = db.Column(db.String(120), default='')
    created = db.Column(db.DateTime(), default=datetime.utcnow)
    updated = db.Column(db.DateTime(),
                        onupdate=datetime.utcnow,
                        default=datetime.utcnow)

    def get_owner(self):
        return self.product_group.name

    def __repr__(self):
        return '<Product {}>'.format(self.name)
Пример #3
0
class Cast(db.Model):
    """ Cast Model represents SQL Cast Table as a conjunction table between
    Movies and People in them.


    Attributes:
        movie_id (str) -- Foreign key of Movie table
        character_id (str) -- Foreign Key of Character Table

    """
    movie_id = db.Column(db.String,
                         db.ForeignKey('movie.id'),
                         primary_key=True)
    character_id = db.Column(db.String,
                             db.ForeignKey('character.id'),
                             primary_key=True)

    movie = db.relationship(Movie,
                            backref=db.backref("cast",
                                               cascade="all, delete-orphan"))
    character = db.relationship(Character,
                                backref=db.backref(
                                    "cast", cascade="all, delete-orphan"))

    __tablename__ = 'cast'

    def __init__(self, movie, person):
        self.movie_id = movie
        self.character_id = person
Пример #4
0
class Question(QuestionJsonSerializer, db.Model, TimeStampMixin):
    __tablename__ = 'questions'

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

    # risk_id and type_id could be null in case the question is a subfield of enum
    risk_id = db.Column(db.Integer, db.ForeignKey('risks.id'))
    type_id = db.Column(db.Integer, db.ForeignKey('field_types.id'))
    '''
    Text of the question could be anything like 'What is your first name?'
    or simply 'First name'. Other examples are age, zip code, model, serial number
    '''
    text = db.Column(db.String)

    # if a field is a subfield of enum then it will have parent id too.
    # Field with type Enum could only be a parent of other fields.
    parent_id = db.Column(db.Integer, db.ForeignKey('questions.id'))

    type_ = db.relationship('FieldType')
    options = db.relationship('Question',
                              remote_side=[parent_id],
                              backref=db.backref('mcq', remote_side=[id]))
    risk = db.relationship('Risk', backref=db.backref('questions'))

    def __str__(self):
        return u'{0}-{1}-{2}-{3}-{4}'.format(self.id, self.risk_id,
                                             self.type_id, self.text,
                                             self.text, self.parent_id)
Пример #5
0
class Encounter(db.Model, FeatherModel):
    """
    Encounters database model.
    """

    guid = db.Column(
        db.GUID, default=uuid.uuid4, primary_key=True
    )  # pylint: disable=invalid-name

    from app.modules.sightings.models import Sighting

    sighting_guid = db.Column(
        db.GUID, db.ForeignKey('sighting.guid'), index=True, nullable=True
    )
    sighting = db.relationship('Sighting', backref=db.backref('encounters'))

    owner_guid = db.Column(db.GUID, db.ForeignKey('user.guid'), index=True, nullable=True)
    owner = db.relationship('User', backref=db.backref('owned_encounters'))

    title = db.Column(db.String(length=50), nullable=False)

    public = db.Column(db.Boolean, default=False, nullable=False)

    projects = db.relationship('ProjectEncounter', back_populates='encounter')

    def __repr__(self):
        return (
            '<{class_name}('
            'guid={self.guid}, '
            "title='{self.title},'"
            'owner={self.owner},'
            ')>'.format(class_name=self.__class__.__name__, self=self)
        )

    @db.validates('title')
    def validate_title(self, key, title):  # pylint: disable=unused-argument,no-self-use
        if len(title) < 3:
            raise ValueError('Title has to be at least 3 characters long.')
        return title

    def get_owner(self):
        return self.owner

    def get_sighting(self):
        return self.sighting

    def is_public(self):
        if self.public is True or self.owner is None:
            return True

    def has_read_permission(self, obj):
        # todo, check if the encounter owns the sighting once Colin's sightings code is merged in
        # if isinstance(obj, Sighting):
        # check sightings array
        # else look to see if the object is owned by any sighting
        return False
Пример #6
0
class Application(ApplicationJsonSerializer, db.Model, TimeStampMixin):
    __tablename__ = 'applications'

    id = db.Column(db.Integer, primary_key=True)
    risk_id = db.Column(db.Integer, db.ForeignKey('risks.id'))
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))

    risk = db.relationship('Risk', backref=db.backref('applications'))
    anwsers = db.relationship('Answer', backref=db.backref('application'))

    def __str__(self):
        return u'{0}-{1}-{2}'.format(self.id, self.risk_id, self.user_id)
Пример #7
0
class LessonUser(db.Model):
    __tablename__ = "lesson_user"
    __table_args__ = (
        UniqueConstraint("lesson_id", "user_id", name="_lesson_user_unique"),
        {"extend_existing": True},
    )
    lesson_id = db.Column(
        db.String(36), db.ForeignKey("lesson.id", ondelete="CASCADE"), primary_key=True
    )
    user_id = db.Column(
        db.String(36), db.ForeignKey("user.id", ondelete="CASCADE"), primary_key=True
    )
    status = db.Column(
        db.Enum(UserLessonStatus),
        server_default="INPROGRESS",
        index=True,
        nullable=False,
    )
    lesson = db.relationship(
        "Lesson",
       # back_populates="users",
        backref=db.backref(
            "lu_users", cascade="save-update, merge, " "delete, delete-orphan"
        ),
    )
    user = db.relationship(
        "User",
        # back_populates="lessons",
        backref=db.backref(
            "lu_lessons", cascade="save-update, merge, " "delete, delete-orphan"
        ),
    )

    def __init__(self, lesson_id, user_id, status: UserLessonStatus):
        self.lesson_id = lesson_id
        self.user_id = user_id
        self.status = status

    def save_to_db(self):
        """
        Saves Lesson to Database

        Returns:

        """
        try:
            db.session.add(self)
            db.session.commit()
            return True
        except:
            db.session.rollback()
            raise
Пример #8
0
class Message(UserMixin, db.Model):
    __tablename__ = 'messages'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    timestamp = db.Column(db.DateTime, default=datetime.now)
    sender_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    store_location_id = db.Column(db.Integer,
                                  db.ForeignKey('store_location.id'))
    sender = db.relationship('User', backref=db.backref('messages'))
    store_location = db.relationship('Storage', backref=db.backref('messages'))
    is_recieve = db.Column(db.Boolean, default=False)
    title = db.Column(db.String(50), nullable=True, unique=False)
    content = db.Column(db.String(400), nullable=True, unique=False)

    def __repr__(self):
        return self.id
Пример #9
0
class WebSite(db.Model, BaseModel):
    id = Column(INTEGER, primary_key=True)
    name = Column(String(256), unique=True, nullable=False)
    description = Column(String(516), nullable=True)
    url = Column(String(516), unique=True, nullable=False)
    thumb = Column(TEXT, nullable=True)
    create_date = Column(db.DateTime, nullable=False, default=datetime.utcnow)
    category_id = Column(INTEGER, ForeignKey("category.id"), nullable=True)
    category = db.relationship("Category",
                               backref=db.backref("websites"),
                               lazy=True)

    def __init__(self, name: str, description: str, url: str, thumb: str,
                 category: Union['Category', None]):
        self.name = name
        self.description = description
        self.url = url
        self.thumb = thumb
        self.category = category

    def to_dict(self):
        payload: dict = {
            "id": self.id,  # noqa
            "name": self.name,
            "description": self.description,
            "url": self.url,
            "thumb": self.thumb,
            "create_date": str(self.create_date),
            "category_id": self.category_id,
        }
        return payload
class User(db.Model, UserMixin):
    """Data model for user accounts."""

    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(25), unique=True, nullable=False)
    password = db.Column(db.String(256), nullable=True)
    two_factor = db.Column(db.String(11), unique=False, nullable=False)
    roles = db.relationship(
        "Role",
        secondary=role_association,
        lazy="subquery",
        backref=db.backref("users", lazy=True),
    )
    questions = db.relationship("Question", back_populates="user", lazy=True)
    auth_histories = db.relationship("AuthHistory", backref="user", lazy=True)

    def set_password(self, password):
        """ convenience function to generate the hashed user password """
        self.password = generate_password_hash(password)

    def check_password(self, value):
        """ convenience function to check that the supplied password matches the hash """
        return check_password_hash(self.password, value)

    def check_two_factor(self, value):
        return self.two_factor == value

    def __repr__(self):
        return f"<User {self.username}>"
Пример #11
0
class Users(db.Model, UserMixin):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(32), unique=True)
    password_hash = db.Column(db.String(128))
    email = db.Column(db.String(64), unique=True)
    confirmed = db.Column(db.Boolean, default=False)
    icon = db.Column(db.String(64), default='default.jpg')
    posts = db.relationship('Posts', backref='user')

    favorites = db.relationship('Posts',
                                secondary='collections',
                                backref=db.backref('users', lazy='dynamic'),
                                lazy='dynamic')

    @property
    def password(self):
        raise AttributeError('密码不可读')

    @password.setter
    def password(self, passwrod):
        self.password_hash = generate_password_hash(passwrod)

    def verify_password(self, password):
        return check_password_hash(self.password_hash, password)

    def generate_active_token(self, expires_in=3600):
        s = Serializer(current_app.config['SECRET_KEY'], expires_in=expires_in)
        return s.dumps({'id': self.id})

    @staticmethod
    def check_activate_token(token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except:
            return False

        u = Users.query.get(data.get('id'))
        if not u:
            return False
        if not u.confirmed:
            u.confirmed = True
            db.session.commit()
        return True

    def is_favorite(self, uid):
        favorites = self.favorites.all()
        posts = list(filter(lambda p: p.id == uid, favorites))
        if len(posts) > 0:
            return True
        return False

    def add_favorite(self, uid):
        p = Posts.query.get(uid)
        self.favorites.append(p)

    def def_favorite(self, uid):
        p = Posts.query.get(uid)
        self.favorites.remove(p)
Пример #12
0
class State(db.Model):
    """Basic state model
    """
    __tablename__ = "states"

    id = db.Column(db.Integer, primary_key=True)
    game_id = db.Column(db.Integer, db.ForeignKey("games.id"), nullable=False)
    game = db.relationship('Game', backref=db.backref('states'))

    # gold in a budget
    gold = db.Column(db.Integer, nullable=False, default=0)
    # population in a city
    population = db.Column(db.Integer, nullable=False, default=0)
    # army in a city (<= population)
    army = db.Column(db.Integer, nullable=False, default=0)
    # enemies around a city
    enemies = db.Column(db.Integer, nullable=False, default=0)
    # reaction move
    reaction_move = db.Column(db.Text, nullable=True, default=None)

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

    def __repr__(self):
        return "<State %s>" % self.id
Пример #13
0
class Objective(db.Model):
    id = db.Column(db.Integer(), primary_key=True)

    title = db.Column(db.Text(), nullable=False)
    description = db.Column(db.Text(), default='')

    product_id = db.Column(db.Integer(),
                           db.ForeignKey('product.id', ondelete='CASCADE'),
                           index=True)

    targets = db.relationship('Target',
                              backref=db.backref('objective', lazy='joined'),
                              passive_deletes=True)

    username = db.Column(db.String(120), default='')
    created = db.Column(db.DateTime(), default=datetime.utcnow)
    updated = db.Column(db.DateTime(),
                        onupdate=datetime.utcnow,
                        default=datetime.utcnow)

    def get_owner(self):
        return self.product.product_group.name

    def __repr__(self):
        return '<SLO {} | {}>'.format(self.product.name, self.title)
Пример #14
0
class PasswordAuthentication(db.Model):
    """Password Authentication model.

    Pangea will support multiple authentication modes, each stored separately.
    """

    __tablename__ = 'password_authentication'

    user_uuid = db.Column(UUID(as_uuid=True),
                          db.ForeignKey('users.uuid'),
                          primary_key=True,
                          unique=True)
    password = db.Column(db.String(255), nullable=False)
    created_at = db.Column(db.DateTime, nullable=False)

    # One-to-one relationship with User
    user = db.relationship('User',
                           backref=db.backref('password_authentication',
                                              uselist=False))

    def __init__(self,
                 password,
                 user_uuid=None,
                 created_at=datetime.datetime.utcnow()):
        """Initialize MetaGenScope User model."""
        if user_uuid:
            self.user_uuid = user_uuid
        self.password = bcrypt.generate_password_hash(
            password, current_app.config.get('BCRYPT_LOG_ROUNDS')).decode()
        self.created_at = created_at
Пример #15
0
class Column(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    description = db.Column(db.String(100))
    type = db.Column(db.String(50))
    length = db.Column(db.String(10))
    format = db.Column(db.String(50))

    table_id = db.Column(db.Integer, db.ForeignKey('table.id'))
    table = db.relationship("Table", backref=db.backref('columns', lazy='dynamic', cascade="all,delete"))

    def __repr__(self):
        return self.name

    @property
    def serialize(self):
        """Return object data in easily serializeable format"""
        return {
            'name': self.name,
            'description': self.description,
            'type': self.type,
            'length': self.type,
            'format': self.format,
            'table': self.table.name,
            'location': self.table.location.name
        }

    @property
    def serialize_table(self):
        """
        Return object's relations in easily serializeable format.
        NB! Calls the tables serialize property.
        """
        return [item.serialize for item in self.table]
Пример #16
0
class User(db.Model):
    id = db.Column(db.String(36), primary_key=True)
    login = db.Column(db.String(50), unique=True, nullable=False)
    display_name = db.Column(db.String(50))
    password_hash = db.Column(db.String(), nullable=False)
    roles = db.relationship('Role',
                            secondary=user_roles,
                            lazy='subquery',
                            backref=db.backref('users', lazy=True))

    @property
    def password(self):
        raise AttributeError('Password is not a readable')

    def get_role_names(self):
        return [role.display_name for role in self.roles]

    @password.setter
    def password(self, password):
        self.password_hash = generate_password_hash(password)

    def verify_password(self, password):
        return check_password_hash(self.password_hash, password)

    def __repr__(self):
        return f"<User display_name={self.display_name} roles={self.roles}"
Пример #17
0
class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), index=True, unique=True)
    password = db.Column(db.String(128))
    salt = db.Column(db.String(10))
    email = db.Column(db.String(128), index=True, unique=True)
    # relationships
    posts = db.relationship('Post', backref='author', lazy='dynamic')
    injuries = db.relationship('Injury', backref='author', lazy='dynamic')
    likes = db.relationship('Like', backref='author', lazy='dynamic')
    runs = db.relationship('Run', backref='author', lazy='dynamic')
    followed = db.relationship('User',
                               secondary=follower,
                               primaryjoin=(follower.c.id == id),
                               secondaryjoin=(follower.c.followed_id == id),
                               backref=db.backref('followers', lazy='dynamic'),
                               lazy='dynamic')

    def set_password(self, password):
        abc = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
        self.salt = ''.join([choice(abc) for _ in range(10)])
        self.password = generate_password_hash(password + self.salt)

    def check_password(self, password):
        return check_password_hash(self.password, password + self.salt)

    def is_following(self, user):
        return self.followed.filter(
            follower.c.followed_id == user.id).count() > 0

    def follow(self, user):
        if not self.is_following(user):
            self.followed.append(user)
Пример #18
0
class Organization(db.Model):
    """A formally or informally recognized grouping of people or organizations formed for the purpose of achieving
    some form of collective action. Includes companies, institutions, corporations, departments, community groups,
    healthcare practice groups, etc."""
    __tablename__ = 'organization'
    __mapper_args__ = {'extension': BaseExtension()}

    id = db.Column(db.Integer, primary_key=True)
    parent_id = db.Column(db.Integer,
                          db.ForeignKey('organization.id'),
                          index=True)
    name = db.Column(db.Text, nullable=False)
    type = db.Column(db.Text, index=True)
    default = db.Column(db.Boolean, default=False)
    active = db.Column(db.Boolean, default=True)
    created_at = db.Column(db.DateTime, default=datetime.utcnow())
    updated_at = db.Column(db.DateTime)

    children = db.relationship('Organization',
                               backref=db.backref('parent', remote_side=[id]))

    def __repr__(self):  # pragma: no cover
        return '<Organization {}:{}>'.format(self.id, self.name)

    def before_insert(self):
        pass

    def before_update(self):
        pass
Пример #19
0
class Waitlist(BaseModel, db.Model):
    __tablename__ = 'waitlist'

    initial_score = 65231
    decrease_per_referral = 10

    uuid = db.Column(db.String(8), primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship('User', back_populates='waitlist')
    score = db.Column(db.Integer)
    referred = db.relationship('Waitlist',
                               secondary=referrals,
                               primaryjoin=(referrals.c.referring == uuid),
                               secondaryjoin=(referrals.c.referred == uuid),
                               backref=db.backref('referral', lazy='dynamic'),
                               lazy='dynamic')

    def __init__(self, user_id):
        self.user_id = user_id
        self.set_uuid()
        self.set_initial_score()

    def set_uuid(self):
        uuid = utils.generate_simple_uuid(8)
        while db.session.query(Waitlist).filter_by(uuid=uuid).one_or_none():
            uuid = utils.generate_simple_uuid(8)
        self.uuid = uuid

    def set_initial_score(self):
        self.score = self.initial_score + db.session.query(
            Waitlist).count() + 1
Пример #20
0
class Picture(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    despriction = db.Column(db.String(5000), unique=True)
    address = db.Column(db.String(35), unique=True)
    userId = db.Column(db.Integer, db.ForeignKey('User.id'))
    tags = db.relationship('Tags',
                           secondary=relation,
                           backref=db.backref('picture', lazy='dynamic'))
    commnet = db.relationship('Comments', backref='picture', lazy='dynamic')

    def to_json(self):
        taglist = []
        for tag in self.tags:
            taglist.append(tag.to_json)
        commlist = []
        for comment in self.comments:
            commlist.append(comment.to_json)
        json_pic = {
            'id': str(self.id),
            'userid': self.userId,
            'dsepriction': self.despriction,
            'adress': self.address,
            'tags': taglist,
            'comments': commlist
        }
        return json_pic
Пример #21
0
class Recipe(db.Model):
    """Табличка рецепта"""
    __tablename__ = 'recipe'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    img_url = db.Column(db.String, nullable=False, unique=True)
    literature_url = db.Column(db.String, nullable=False, unique=True)
    time_on_preparation = db.Column(db.String,
                                    CheckConstraint('time_on_preparation>0'),
                                    nullable=False)
    time_on_cooking = db.Column(db.String,
                                CheckConstraint('time_on_cooking>0'),
                                nullable=False)
    dish_id = db.Column(
        db.Integer,
        db.ForeignKey('dish.id', ondelete="CASCADE", onupdate="CASCADE"))
    steps_of_cook = db.relationship('StepOfCook', backref='recipe')
    implements = db.relationship('Implement',
                                 secondary=RECIPE_AND_IMPLEMENT,
                                 backref=db.backref('recipes', lazy='dynamic'))

    def __init__(self, img_url, literature_url, time_on_preparation,
                 time_on_cooking, dish_id):
        self.img_url = img_url
        self.literature_url = literature_url
        self.time_on_preparation = time_on_preparation
        self.time_on_cooking = time_on_cooking
        self.dish_id = dish_id

    def __repr__(self):
        return f"Recipe({self.id}, {self.img_url}, {self.literature_url}, {self.time_on_preparation}," \
               f" {self.time_on_cooking}, {self.dish_id})"
Пример #22
0
class Article(db.Model):
    article_id = db.Column(db.String(64), primary_key=True)
    article_title = db.Column(db.String(255))
    article_url = db.Column(db.String(255))
    article_desc = db.Column(db.Text)
    article_content = db.Column(db.Text)
    site_id = db.Column(db.String(64), db.ForeignKey('web_site.site_id'))
    tags = db.relationship('Tag', secondary=tags,
                           backref=db.backref('articles', lazy='dynamic'))
    create_time = db.Column(db.DateTime)

    def __init__(self, article_title='', article_url='', article_desc='',
                 article_content='', site_id=None, *args, **kwargs):
        super(Article, self).__init__(*args, **kwargs)
        self.article_id = str(uuid.uuid4())
        self.article_title = article_title
        self.article_url = article_url
        self.article_desc = article_desc
        self.article_content = article_content
        self.site_id = site_id
        db.session.add(self)
        db.session.commit()

    def set_tags(self, a_tags):
        self.tags = a_tags
        db.session.add(self)
        db.session.commit()

    def __unicode__(self):
        return u"Article: {}".format(self.article_title)
Пример #23
0
class User(db.Model, UserMixin, GetOrCreateMixin, GetOr404Mixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String)
    full_name = db.Column(db.String)
    inbox_email = db.Column(db.String(255), unique=True)
    active = db.Column(db.Boolean)
    confirmed_at = db.Column(db.DateTime)
    roles = db.relationship('Role',
                            secondary=user_roles,
                            backref=db.backref('users', lazy='dynamic'))

    @classmethod
    def get_or_create(cls, **kwargs):
        try:
            user = User.query.filter_by(**kwargs).one()

        except NoResultFound:
            user = User(**kwargs)
            db.session.add(user)
            db.session.commit()

        except MultipleResultsFound:
            raise

        return user
Пример #24
0
class Post(PaginatedAPIMixin, db.Model):
    """文章模型类"""
    __tablename__ = 'posts'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(255))
    summary = db.Column(db.Text)
    body = db.Column(db.Text)
    timestamp = db.Column(db.DateTime(), index=True, default=datetime.utcnow)
    views = db.Column(db.Integer, default=0)
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    comments = db.relationship('Comment',
                               backref='post',
                               lazy='dynamic',
                               cascade='all,delete-orphan')
    # 喜欢博客的人和被喜欢的文章是多对多的关系,一个人可以喜欢多个文章,一个文章可以被多个人喜欢
    likers = db.relationship('User',
                             secondary=posts_likes,
                             backref=db.backref('liked_posts', lazy='dynamic'),
                             lazy="dynamic")

    def __repr__(self):
        return "<POST{}>".format(self.title)

    def from_dict(self, data: dict):
        """接收表单数据构建post对象并返回"""
        for filed in ["title", "body", "summary"]:
            if filed in data:
                setattr(self, filed, data[filed])

    def to_dict(self):

        data = {
            'id': self.id,
            'title': self.title,
            'body': self.body,
            'summary': self.summary,
            'author_id': self.author_id,
            '_links': {
                'self': url_for('api.get_post', id=self.id),
                'author_url': url_for('api.get_users', id=self.author_id)
            }
        }

        return data

    def is_liked_by(self, user):
        """是否收藏过文章"""
        return user in self.likers

    def liked_by(self, user):
        """收藏文章"""
        if not self.is_liked_by(user):
            self.likers.append(user)

    def unliked_by(self, user):
        """取消收藏文章"""
        if self.is_liked_by(user):
            self.likers.remove(user)
Пример #25
0
class Expense(db.Model):
    expense_id = db.Column(db.String(36), primary_key=True)
    user_id = db.Column(db.String(36), nullable=False)
    amount = db.Column(db.Float(), nullable=False)
    description = db.Column(db.String(100))
    created_at = db.Column(db.DateTime, default=func.now())
    category_id = db.Column(
        db.String(36), db.ForeignKey("category.category_id"))
    category = db.relationship(Category, backref=db.backref('expenses'))
Пример #26
0
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), 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'))
Пример #27
0
class Employee(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(), unique=True, nullable=False)
    completed_task = db.Column(db.Integer(), default=0, nullable=False)

    tasks = db.relationship("Task",
                            secondary=task_empl,
                            backref=db.backref("empls"),
                            lazy="dynamic")
Пример #28
0
class User(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(255), unique=True, nullable=False)
    display_name = db.Column(db.String(255))
    password = db.Column(db.String(255))
    last_login_time = db.Column(db.DateTime,
                                default=datetime.datetime.utcnow())
    super_powered = db.Column(db.Boolean, default=False)
    ratings = db.relationship('DailyRating', backref=db.backref('user'))
    daily_stats = db.relationship('DailySummary', backref=db.backref('user'))

    def dump(self):
        return {
            'username': self.username,
            'display_name': self.display_name,
            'last_login_time': self.last_login_time
        }
Пример #29
0
class Card(db.Model):
    __tablename__ = "card"
    __table_args__ = {"extend_existing": True}
    id = db.Column(db.String(36), primary_key=True, default=str(uuid.uuid4()))
    lesson_id = db.Column(
        db.String(36),
        db.ForeignKey("lesson.id", ondelete="CASCADE"),
        nullable=False,
        index=True,
    )
    text = db.Column(db.BLOB, nullable=False)
    updated_at = db.Column(db.DateTime, nullable=True)
    created_at = db.Column(db.DateTime, nullable=False)

    lesson = db.relationship(
        "Lesson",
        foreign_keys=lesson_id,
        backref=db.backref("card", lazy="select", cascade="all,delete"),
    )

    def __init__(self, lesson_id, text):
        self.lesson_id = lesson_id
        self.text = text

    def save_to_db(self):
        """
        Saves Card to Database

        Returns:

        """
        try:
            self.updated_at = datetime.datetime.utcnow()
            self.created_at = datetime.datetime.utcnow()

            db.session.add(self)
            db.session.commit()
            return True
        except:
            db.session.rollback()
            raise

    def update(self):
        """
        Updates object

        Returns:

        """
        try:
            self.updated_at = datetime.datetime.utcnow()
            db.session.commit()
        except:
            db.session.rollback()
            raise
Пример #30
0
class USER(UserMixin, db.Model):
    # структура данных пользователей
    __tablename__ = 'USERS'

    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String, nullable=False, unique=True)
    username = db.Column(db.String(255))
    password = db.Column(db.String(255))

    last_login_at = db.Column(db.DateTime())
    current_login_at = db.Column(db.DateTime())
    last_login_ip = db.Column(db.String(100))
    current_login_ip = db.Column(db.String(100))
    login_count = db.Column(db.Integer)
    active = db.Column(db.Boolean())
    confirmed_at = db.Column(db.DateTime())

    login = db.Column(db.String, nullable=True, unique=True)
    password_hash = db.Column(db.String, nullable=True)

    date_user_made = db.Column(db.String, nullable=True)

    family = db.Column(db.String, nullable=True)
    name = db.Column(db.String, nullable=True)
    second_name = db.Column(db.String, nullable=True)

    individual_key = db.Column(db.String, nullable=True)
    information = db.Column(db.String, nullable=True)

    rank = db.Column(db.Integer, nullable=True)

    events = db.relationship('EVENTS', backref='author', lazy='dynamic')
    role_events = db.relationship('RoleEvents',
                                  backref='RoleEventsUser',
                                  lazy='dynamic')

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

    # def __init__(self, login, email, password, date_user_made):
    #     self.login = login
    #     self.email = email
    #     self.password = password
    #     self.date_user_made = date_user_made

    def __repr__(self):
        return '%d, %s, %s, %s' % (self.id, self.login, self.email,
                                   self.password_hash)

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)