Exemplo n.º 1
0
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(32), nullable=False)
    last_name = db.Column(db.String(32))
    password_hash = db.Column(db.String(120))
    token = db.Column(db.String(130), nullable=False)
    email = db.Column(db.String(130), nullable=False, unique=True)
    contact_number = db.Column(db.String(12))
    profile_url = db.Column(db.String(130))
    about_me = db.Column(db.Text)
    city = db.Column(db.String(32))
    country = db.Column(db.String(32))
    no_goals_added = db.Column(db.Integer)
    no_goals_completed = db.Column(db.Integer)
    created_at = db.Column(db.DateTime, default=datetime.now())
    updated_at = db.Column(db.DateTime, default=datetime.now())
    user_goals = db.relationship('UserGoal', backref="user", cascade="all, delete-orphan", lazy='dynamic')
    goal = db.relationship('Goal', backref="user", cascade="all, delete-orphan", uselist=False)
    ug_likes = db.relationship('UserGoalLike', backref=db.backref('user', lazy='joined'), lazy='dynamic',
                               cascade="all, delete, delete-orphan")
    g_likes = db.relationship('GoalLike', backref=db.backref('user', lazy='joined'), lazy='dynamic',
                              cascade="all, delete, delete-orphan")

    def hash_password(self, password):
        self.password_hash = pwd_context.encrypt(password)

    def verify_password(self, password):
        return pwd_context.verify(password, self.password_hash)
Exemplo n.º 2
0
Arquivo: user.py Projeto: aksenol/ggkp
class User(db.Model):
    user_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    first_name = db.Column(db.String(80))
    last_name = db.Column(db.String(80))
    email = db.Column(db.String(80))
    picture = db.Column(db.String(120))
    age_range = db.Column(db.String(80))
    fb_token = db.Column(db.String(120))
    gender = db.Column(db.Integer)
    reg_date = db.Column(db.DateTime)

    posts = db.relationship('Post', backref='publisher', lazy='dynamic')
    subscribed_groups = db.relationship('Group',
                                        secondary=subscribe,
                                        backref=db.backref('subscribers',
                                                           lazy='dynamic'))
    banned_from = db.relationship('Group',
                                  secondary=ban,
                                  backref=db.backref('banned_users',
                                                     lazy='dynamic'))
    admin_of = db.relationship('Group')

    def __init__(self, first_name, last_name, email, picture, age_range,
                 fb_token, gender):
        self.first_name = first_name
        self.last_name = last_name
        self.email = email
        self.picture = picture
        self.age_range = age_range
        self.fb_token = fb_token
        self.gender = gender
        self.reg_date = datetime.now()

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

    def get_subscribed_groups(self, user_id, page=0):  # -> group_id []
        user = User.query.filter(User.user_id == user_id).first()
        return [group.group_id for group in user.subscribed_groups]

    def subscribe_to(self, group_id, user_id, is_submitter):  # -> bool
        subscribe.insert().values(group_id=group_id,
                                  user_id=user_id,
                                  is_submitter=is_submitter,
                                  time=datetime.now())
        db.session.commit()
        return True

    def ban_user(self, group_id, admin_id, banned_by, is_shadow):  # -> bool
        ban.insert().values(group_id=group_id,
                            admin_id=admin_id,
                            banned_by=banned_by,
                            is_shadow=is_shadow,
                            time=datetime.now())
        db.session.commit()
        return True
Exemplo n.º 3
0
class Subscription(db.Model):
    id = db.Column(INTEGER(unsigned=True), primary_key=True)
    device = db.Column(db.VARCHAR(40), nullable=False)
    service_id = db.Column(INTEGER(unsigned=True), db.ForeignKey('service.id'), nullable=False)
    service = db.relationship('Service', backref=db.backref('subscription', lazy='dynamic'))
    last_read = db.Column(INTEGER(unsigned=True), db.ForeignKey('message.id'), default=0)
    timestamp_created = db.Column(db.TIMESTAMP, default=datetime.utcnow)
    timestamp_checked = db.Column(db.TIMESTAMP)

    def __init__(self, device, service):
        last_message = Message.query.order_by(Message.id.desc()).first()

        self.device = device
        self.service = service
        self.timestamp_checked = datetime.utcnow()
        self.last_read = last_message.id if last_message else 0

    def __repr__(self):
        return '<Subscription {}>'.format(self.id)

    def messages(self):
        return Message.query \
            .filter_by(service_id=self.service_id) \
            .filter(Message.id > self.last_read)

    def as_dict(self):
        data = {
            "uuid": self.device,
            "service": self.service.as_dict(),
            "timestamp": int((self.timestamp_created - datetime.utcfromtimestamp(0)).total_seconds()),
            "timestamp_checked": int((self.timestamp_checked - datetime.utcfromtimestamp(0)).total_seconds())
        }
        return data
Exemplo n.º 4
0
class Message(db.Model):
    id = db.Column(INTEGER(unsigned=True), primary_key=True)
    service_id = db.Column(INTEGER(unsigned=True),
                           db.ForeignKey('service.id'),
                           nullable=False)
    service = db.relationship('Service',
                              backref=db.backref('message', lazy='dynamic'))
    text = db.Column(db.TEXT, nullable=False)
    title = db.Column(db.VARCHAR)
    level = db.Column(TINYINT, nullable=False, default=0)
    link = db.Column(db.TEXT, nullable=False, default='')
    timestamp_created = db.Column(db.TIMESTAMP, default=datetime.utcnow)

    def __init__(self, service, text, title=None, level=0, link=''):
        self.service = service
        self.text = text
        self.title = title
        self.level = level
        self.link = link

    def __repr__(self):
        return '<Message %r>' % self.id

    def as_dict(self):
        return {
            "service": self.service.as_dict(),
            "message": self.text,
            "title": self.title,
            "link": self.link,
            "level": self.level,
            "timestamp": int(self.timestamp_created.strftime('%s'))
        }
Exemplo n.º 5
0
class Goal(db.Model):
    __tablename__ = 'goal'
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    name = db.Column(db.String(256), nullable=False)
    cat_id = db.Column(db.Integer, default=1)
    image_url = db.Column(db.String(130))
    no_added = db.Column(db.Integer, default=1)
    no_completed = db.Column(db.Integer, default=0)
    created_at = db.Column(db.DateTime, default=datetime.now())
    updated_at = db.Column(db.DateTime, default=datetime.now())
    user_goals = db.relationship('UserGoal', backref="goal", cascade="all, delete-orphan", lazy='dynamic')
    g_likes = db.relationship('GoalLike', backref=db.backref('goal', lazy='joined'), lazy='dynamic',
                               cascade="all, delete, delete-orphan")

    @property
    def serialize(self):
        return {
            'id': self.id,
            'user_id': self.user_id,
            'first_name': self.user.first_name,
            'last_name': self.user.last_name,
            'name': self.name,
            'cat_id': self.cat_id,
            'image_url': self.image_url,
            'no_added': self.no_added,
            'no_completed': self.no_completed,
            'created_at': self.created_at,
            'updated_at': self.updated_at
        }
Exemplo n.º 6
0
class User(db.Model, UserMixin):

    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(150), nullable=False)
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean())
    login_count = db.Column(db.Integer)
    current_login_ip = db.Column(db.String(255))
    current_login_at = db.Column(db.DateTime, default=datetime.utcnow)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    updated_at = db.Column(db.DateTime, default=datetime.utcnow)

    posts = db.relationship('Post', backref='author', lazy='dynamic')
    comments = db.relationship('Comment', backref='author', lazy='dynamic')
    roles = db.relationship('Role', secondary=role_users, backref=db.backref('users', lazy="dynamic"),
                            cascade="save-update, merge, delete")

    def __init__(self, email, password=None, *args, **kwargs):
        super(User, self).__init__(email=email, password=password, *args, **kwargs)

        if not self.username:
            self.username = self.email.split("@")[0]

        if not self.roles:
            user_role = Role.query.filter(Role.name == 'user').first()
            self.roles.append(user_role)

    def __repr__(self):
        return f'<User #{self.id} {self.email}>'
Exemplo n.º 7
0
class Subscription(db.Model):
    id = db.Column(INTEGER(unsigned=True), primary_key=True)
    device = db.Column(db.VARCHAR(40), nullable=False)
    service_id = db.Column(INTEGER(unsigned=True),
                           db.ForeignKey('service.id'),
                           nullable=False)
    service = db.relationship('Service',
                              backref=db.backref('subscription',
                                                 lazy='dynamic'))
    timestamp_created = db.Column(db.TIMESTAMP, default=datetime.utcnow)
    timestamp_checked = db.Column(db.TIMESTAMP)

    def __init__(self, device, service):
        self.device = device
        self.service = service
        self.timestamp_checked = datetime.utcnow() - timedelta(minutes=30)

    def __repr__(self):
        return '<Subscription %r>' % self.id

    def messages(self):
        return Message.query \
            .filter_by(service_id=self.service_id) \
            .filter(Message.timestamp_created > self.timestamp_checked)

    def as_dict(self):
        data = {
            "uuid": self.device,
            "service": self.service.as_dict(),
            "timestamp": int(self.timestamp_created.strftime('%s')),
            "timestamp_checked": int(self.timestamp_checked.strftime('%s'))
        }
        return data
Exemplo n.º 8
0
class Users(db.Model, UserMixin):
	__tablename__ = 'users'

	# Primary key
	id = db.Column(db.Integer, primary_key=True)
	
	# Columns
	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('Roles', secondary=roles_users, 
		backref=db.backref('users', lazy='dynamic'))

	# Representation
	def __repr__(self):
		return '<id %r>' % self.id

	# Check if a user email exists
	@classmethod
	def check_user(class_, email):
		Users = class_

		# Query for the email
		user = Users.query.filter_by(email=email).first()

		# Return true if exists
		if user:
			return user
		else:
			return False
Exemplo n.º 9
0
class Post(db.Model):
    from models import User, Category

    __tablename__ = 'posts'

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(140), nullable=False)
    slug = db.Column(db.String(140), nullable=False, unique=True)
    text = db.Column(db.Text, nullable=False)
    photo = db.Column(db.String(255), unique=True)
    is_published = db.Column(db.Boolean,
                             nullable=False,
                             default=False,
                             server_default='0')
    user_id = db.Column(db.Integer,
                        db.ForeignKey(User.id,
                                      onupdate="CASCADE",
                                      ondelete="CASCADE"),
                        nullable=False)
    category_id = db.Column(db.Integer,
                            db.ForeignKey(Category.id,
                                          onupdate="CASCADE",
                                          ondelete="CASCADE"),
                            nullable=False)
    created_at = db.Column(db.DateTime, default=datetime.now())
    published_at = db.Column(db.DateTime, default=datetime.now())

    tags = db.relationship('Tag',
                           secondary=post_tags,
                           backref=db.backref('posts', lazy="dynamic"))
    comments = db.relationship('Comment',
                               secondary=post_comments,
                               backref=db.backref('post', 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)

    def is_owner(self):
        return self.author == current_user

    def __repr__(self):
        return f'<Post #{self.id} {self.title}>'
Exemplo n.º 10
0
class Thread(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    board = db.Column(db.Integer, db.ForeignKey("board.id"), nullable=False)
    views = db.Column(db.Integer, nullable=False)
    posts = relationship("Post", order_by=Post.datetime)
    last_updated = db.Column(db.DateTime)
    tags = relationship("Tag", secondary=tags, lazy='subquery',
                        backref=db.backref('threads', lazy=True))

    def num_media(self):
        return db.session.query(Post).filter(and_(Post.thread == self.id, Post.media != None)).count()
Exemplo n.º 11
0
class UserGoal(db.Model):
    __tablename__ = 'usergoal'
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    goal_id = db.Column(db.Integer, db.ForeignKey('goal.id'))
    likes = db.Column(db.Integer, default=0)
    lat = db.Column(db.Float)
    long = db.Column(db.Float)
    date_target = db.Column(db.DateTime)
    privacy = db.Column(db.SmallInteger)
    list_id = db.Column(db.ForeignKey('list.id'))
    created_at = db.Column(db.DateTime, default=datetime.now())
    updated_at = db.Column(db.DateTime, default=datetime.now())
    ug_likes = db.relationship('UserGoalLike', backref=db.backref('usergoal', lazy='joined'), lazy='dynamic',
                               cascade="all, delete, delete-orphan")
Exemplo n.º 12
0
class SuccessStory(db.Model):
    __tablename__ = "successstory"
    id = db.Column(db.Integer, primary_key=True)
    user_goal_id = db.Column(db.ForeignKey('usergoal.id'))
    story = db.Column(db.Text)
    lat = db.Column(db.Float)
    long = db.Column(db.Float)
    date_completed = db.Column(db.DateTime)
    likes = db.Column(db.Integer, default=0)
    image_url = db.Column(db.String(130))
    video_url = db.Column(db.String(130))
    created_at = db.Column(db.DateTime, default=datetime.now())
    updated_at = db.Column(db.DateTime, default=datetime.now())
    ss_likes = db.relationship('SuccessStoryLike', backref=db.backref('successstory', lazy='joined'), lazy='dynamic',
                               cascade="all, delete, delete-orphan")
Exemplo n.º 13
0
class Book(db.Model):

    __tablename__ = 'books'

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.Text())
    author_id = db.Column(db.Integer, db.ForeignKey('authors.id'))
    tags = db.relationship('Tag', secondary='book_tags', backref=db.backref('books', lazy='dynamic'))

    def __init__(self, title,author_id):
        self.title = title
        self.author_id = author_id

    # This is what will be displayed when you examine in the python console
    def __repr__(self):
        return 'id: {}, title: {}, author_id: {}'.format(self.id, self.title, self.author_id)
Exemplo n.º 14
0
class Message(db.Model):
    id = db.Column(INTEGER(unsigned=True), primary_key=True)
    service_id = db.Column(INTEGER(unsigned=True),
                           db.ForeignKey('service.id'),
                           nullable=False)
    service = db.relationship('Service',
                              backref=db.backref('message', lazy='dynamic'))
    text = db.Column(db.TEXT, nullable=False)
    title = db.Column(db.VARCHAR)
    level = db.Column(TINYINT, nullable=False, default=0)
    link = db.Column(db.TEXT, nullable=False, default='')
    timestamp_created = db.Column(db.TIMESTAMP, default=datetime.utcnow)

    def __init__(self, service, text, title=None, level=0, link=''):
        self.service = service
        self.text = text
        self.title = title
        self.level = level
        self.link = link

    def __repr__(self):
        return '<Message {}>'.format(self.id)

    def as_dict(self):
        return {
            "service":
            self.service.as_dict(),
            "message":
            self.text,
            "title":
            self.title,
            "link":
            self.link,
            "level":
            self.level,
            "timestamp":
            int((self.timestamp_created -
                 datetime.utcfromtimestamp(0)).total_seconds())
        }

    def as_notification(self):
        return {
            "title": self.title,
            "body": self.text,
            "click_action": self.link
        }
Exemplo n.º 15
0
class Thread(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    board = db.Column(db.Integer, db.ForeignKey("board.id"), nullable=False)
    views = db.Column(db.Integer, nullable=False)
    posts = relationship("Post", order_by=Post.datetime)
    last_updated = db.Column(db.DateTime)
    tags = relationship("Tag", secondary=tags, lazy='subquery',
                        backref=db.backref('threads', lazy=True))

    def num_media(self):
        return db.session.query(Post).filter(and_(Post.thread == self.id, Post.media != None)).count()

    def admin_is_op(self):
        poster_id = self.posts[0].poster
        slip_id = db.session.query(Poster).filter(Poster.id == poster_id).one().slip
        if slip_id is None:
            return False
        slip = slip_from_id(slip_id)
        return slip.is_admin
Exemplo n.º 16
0
class Message(db.Model):
    id = db.Column(Integer, primary_key=True)
    service_id = db.Column(Integer,
                           db.ForeignKey('service.id'),
                           nullable=False)
    service = db.relationship('Service',
                              backref=db.backref('message',
                                                 lazy='dynamic',
                                                 cascade="delete"))
    text = db.Column(db.TEXT, nullable=False)
    title = db.Column(Unicode(length=255))
    level = db.Column(Integer, nullable=False, default=0)
    link = db.Column(db.TEXT, nullable=False, default='')
    timestamp_created = db.Column(db.TIMESTAMP, default=datetime.utcnow)

    def __init__(self, service, text, title=None, level=0, link=''):
        self.service = service
        self.text = text
        self.title = title
        self.level = level
        self.link = link

    def __repr__(self):
        return '<Message {}>'.format(self.id)

    def as_dict(self):
        return {
            "service":
            self.service.as_dict(),
            "message":
            self.text,
            "title":
            self.title,
            "link":
            self.link,
            "level":
            self.level,
            "timestamp":
            int((self.timestamp_created -
                 datetime.utcfromtimestamp(0)).total_seconds())
        }