Exemple #1
0
class Topic(db.Model):
    __tablename__ = 'topics'
    tid = db.Column(db.Integer, primary_key=True)
    topic = db.Column(db.String(20))
    _description = db.Column(db.String(20))
    parent_id = db.Column(db.String(20))
    posts = db.relationship("Post", backref="topics")
    path = None

    def __init__(self, topic, _description, parent_id):
        self.topic = topic
        self._description = _description
        self.parent_id = parent_id

    @classmethod
    def all_topics(self):
        return self.query.all()

    @classmethod
    def getTopicById(self, tid):
        return self.query.get(tid)

    @classmethod
    def getTopicList(self):
        return [{t.topic} for t in Topic.all_topics()]
Exemple #2
0
class User(Base, UserMixin):
    __tablename__ = "users"
    name = db.Column(db.String(255))
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    avatar = db.Column(db.String(150), default="avatar.png")
    email_verified_at = db.Column(db.DateTime, nullable=True, default=None)
    confirmation_token = db.Column(db.String(200), nullable=True, default=None)

    threads = db.relationship("Thread", back_populates="owner")
    comments = db.relationship("Comment", back_populates="owner")

    @classmethod
    def create(cls, **kwargs):
        user = cls(**kwargs)
        user.save()

        return user

    def json_attributes(self):
        return {
            "id": self.id,
            "email": self.email,
            "name": self.name,
            "profilePicture": self.profile_picture,
            "email_verified": self.email_verified_at is not None
        }

    @property
    def profile_picture(self):
        return url_for("static", filename="images/avatars/" + self.avatar)
Exemple #3
0
class Thread(Base):

    json_attributes = ("id", "title", "slug", "content", "user_id",
                       "category_id", "comments_count")

    __tablename__ = "threads"
    title = db.Column(db.String(100), nullable=False)
    slug = db.Column(db.String(250), nullable=False)
    content = db.Column(db.Text)
    user_id = db.Column(db.Integer, db.ForeignKey("users.id"))
    category_id = db.Column(db.Integer, db.ForeignKey("categories.id"))
    views_count = db.Column(db.Integer, nullable=False, default=0)
    comments_count = db.Column(db.Integer, default=0)
    best_comment_id = db.Column(db.Integer, nullable=True)

    owner = db.relationship("User", back_populates="threads")
    category = db.relationship("Category", back_populates="threads")
    comments = db.relationship("Comment", back_populates="thread")

    @property
    def summary(self):
        return self.content[0:300] + "..."

    def is_owner(self, user):
        return user == self.owner

    def add_comment(self, content, owner):
        comment = Comment(content=content, user_id=owner.id, thread_id=self.id)
        comment.save()

        return comment

    @hybrid_property
    def has_comments(self):
        return self.comments_count > 0
Exemple #4
0
class User(db.Model, UserMixin):
    __tablename__ = 'users'
    uid = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20))
    _password = db.Column(db.String(20))
    _email = db.Column(db.String(20), unique=True)
    posts = db.relationship("Post", backref="user")
    comments = db.relationship("Comment", backref="user")
    likes = db.relationship("Like", backref="user")

    def __init__(self, username, _password, _email):
        self.username = username
        self._password = _password
        self._email = _email

    @classmethod
    def all_users(self):
        return self.query.all()

    @classmethod
    def getUserById(self, uid):
        return self.query.get(uid)

    @classmethod
    def getEmail(self):
        return self._email

    def get_id(self):
        try:
            return text_type(self.uid)
        except AttributeError:
            raise NotImplementedError('No `id` attribute - override `get_id`')
Exemple #5
0
class User(db.Model, UserMixin):

    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255), nullable=False, unique=True)
    email = db.Column(db.String(255), nullable=False)
    password = db.Column(db.String(255), nullable=False)
    image_file = db.Column(db.String(20),
                           nullable=False,
                           default='default.jpg')
    registered_on = db.Column(db.DateTime,
                              nullable=False,
                              default=db.func.current_timestamp())

    texts = db.relationship('Text', backref='user', lazy='dynamic')
    links = db.relationship('Link', backref='user', lazy='dynamic')

    comments = db.relationship('Comment', backref='user', lazy='dynamic')

    post_karma = db.Column(db.Integer, nullable=False, default=0)
    comment_karma = db.Column(db.Integer, nullable=False, default=0)

    has_upvoted = db.relationship('ThreadUpvote',
                                  backref='user',
                                  lazy='dynamic')
    has_downvoted = db.relationship('ThreadDownvote',
                                    backref='user',
                                    lazy='dynamic')

    has_upvoted_comment = db.relationship('CommentUpvote',
                                          backref='user',
                                          lazy='dynamic')
    has_downvoted_comment = db.relationship('CommentDownvote',
                                            backref='user',
                                            lazy='dynamic')
Exemple #6
0
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), nullable=False, unique=True)
    email = db.Column(db.String(120), nullable=False, unique=True)
    password = db.Column(db.String(60), nullable=False)
    type = db.Column(db.Integer, nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)

    def __repr__(self):
        return f"User({self.username}, {self.email})"
Exemple #7
0
class Category(Base):
    __tablename__ = "categories"

    name = db.Column(db.String(100))
    slug = db.Column(db.String(200))

    threads = db.relationship("Thread", back_populates="category")

    def to_json(self):
        return {"id": self.id, "name": self.name, "slug": self.slug}
Exemple #8
0
class Post(db.Model):
    post_id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    body = db.Column(db.String(250), nullable=False)
    image = db.Column(db.String(100), nullable=True, default='default.jpg')
    id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    date_created = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow)
    activities = db.relationship('Activity', backref='post', lazy=True)

    def __repr__(self):
        return f"Post('{self.post_id}','{self.title}','{self.body}','{self.image}','{self.id}')"
Exemple #9
0
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(50), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)
    profile_picture = db.Column(db.String(100),
                                nullable=True,
                                default='default.jpg')
    date_created = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow)
    posts = db.relationship('Post', backref='author', lazy=True)
    activities = db.relationship('Activity', backref='author', lazy=True)

    def __repr__(self):
        return f"User('{self.id}',{self.email}'.'{self.profile_picture}')"
Exemple #10
0
class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.String(32), nullable=False)

    message_id = db.Column(db.Integer, db.ForeignKey(
        'message.id'), nullable=False)
    message = db.relationship('Message', backref=db.backref('tags', lazy=True))
Exemple #11
0
class Thread(db.Model):

    __abstract__ = True
    __metaclass__ = abc.ABCMeta

    @declared_attr
    def user_id(cls):
        """Foreign key to User table"""
        return db.Column(db.Integer, db.ForeignKey('users.id'))

    @declared_attr
    def subreddit_id(cls):
        """Foreign key to Subreddit table"""
        return db.Column(db.Integer, db.ForeignKey('subreddits.id'))

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(255), nullable=False)
    upvote = db.Column(db.Integer, nullable=False, default=0)
    downvote = db.Column(db.Integer, nullable=False, default=0)
    modified_on = db.Column(db.DateTime,
                            default=datetime.datetime.now(),
                            onupdate=datetime.datetime.now())

    @abc.abstractclassmethod
    def is_link(cls):
        """Return 0 for link, 1 for text"""
        ...

    def save(self):
        db.session.add(self)
        db.session.commit()
Exemple #12
0
class Link(Thread):

    __tablename__ = 'links'
    link = db.Column(db.String(255), nullable=False)
    upvoters = db.relationship('ThreadUpvote', backref='link', lazy='dynamic')
    downvoters = db.relationship('ThreadDownvote',
                                 backref='link',
                                 lazy='dynamic')
    comments = db.relationship('Comment', backref='link', lazy='dynamic')

    def __repr__(self):
        return f'<Link: {self.title}>'

    def get_score(self):
        return self.upvote - self.downvote

    def get_time(self):
        now = datetime.datetime.now()
        return timeago.format(now, self.modified_on)

    @classmethod
    def is_link(self):
        return True

    def save(self):
        super().save()
        ThreadUpvote(user_id=self.user_id, link_id=self.id).save()
Exemple #13
0
class Category(db.Model):
    __tablename__ = 'category'
    category_id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20))

    def __init__(self, category_id, name):
        self.category_id = category_id
        self.name = name
Exemple #14
0
class Message(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.String(1024), nullable=False)

    def __init__(self, text, tags):
        self.text = text
        self.tags = [
            Tag(text=tag.strip()) for tag in tags.split(',')
        ]
Exemple #15
0
class User(db.Model):
    __tablename__ = 'user'
    user_id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20))
    email = db.Column(db.String(20))
    password_hash = db.Column(db.String(20))
    token = db.Column(db.String(20))
    is_admin = db.Column(db.Integer)
    date_joined = db.Column(db.DateTime, default=datetime.utcnow)
    avatar_id = db.Column(db.Integer)

    def __init__(self, name, email, password_hash, token, is_admin, avatar_id):
        self.name = name
        self.email = email
        self.password_hash = password_hash
        self.token = token
        self.is_admin = is_admin
        self.avatar_id = avatar_id

    @classmethod
    def getAll(self):
        return self.query.all()

    @classmethod
    def getUserById(self, user_id):
        return self.query.get(user_id)

    @classmethod
    def getUserByToken(self, token):
        return self.query.filter(User.token == token).first()

    @classmethod
    def getUserByEmail(self, email):
        return self.query.filter(User.email == email).first()

    @classmethod
    def getEmail(self):
        return self._email

    def get_id(self):
        try:
            return text_type(self.uid)
        except AttributeError:
            raise NotImplementedError('No `id` attribute - override `get_id`')
Exemple #16
0
class User(db.Model):
    __tablename__ = "users"

    id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid4)
    name = db.Column(db.String(), nullable=False)

    def __repl__(self):
        return "<User id='%s' name='%s'>" % (self.id, self.name)

    def __str__(self):
        return self.__repl__()
Exemple #17
0
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime,
                            nullable=False,
                            default=datetime.today)
    content = db.Column(db.Text, nullable=False)
    userid = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Post({self.title}, {self.date_posted})"
Exemple #18
0
class Subreddit(db.Model):

    __tablename__ = 'subreddits'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255), nullable=False, unique=True)
    subscribers = db.Column(db.Integer, default=0)
    description = db.Column(db.String(1000), unique=False)
    created_on = db.Column(db.DateTime,
                           nullable=False,
                           default=db.func.current_timestamp())

    texts = db.relationship('Text', backref='subreddit', lazy='dynamic')
    links = db.relationship('Link', backref='subreddit', lazy='dynamic')

    def __repr__(self):
        return f"<Subreddit: {self.name} | " + \
            f"Description: {self.description[:50]}>"

    def save(self):
        db.session.add(self)
        db.session.commit()
Exemple #19
0
class Category(db.Model):
    __tablename__ = "categories"

    id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid4)
    name = db.Column(db.String(), nullable=False)
    parent_id = db.Column(UUID(as_uuid=True), db.ForeignKey("categories.id"))

    parent = db.relationship("Category", remote_side=[id])

    def __repl__(self):
        return "<Category id='%s' name='%s'>" % (self.id, self.name)

    def __str__(self):
        return self.__repl__()
Exemple #20
0
class Activity(db.Model):
    activity_id = db.Column(db.Integer, primary_key=True)
    comment = db.Column(db.String(250), nullable=True)
    upvote = db.Column(db.Boolean, default=False)
    downvote = db.Column(db.Boolean, default=False)
    id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    post_id = db.Column(db.Integer,
                        db.ForeignKey('post.post_id'),
                        nullable=False)
    date_created = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow)

    def __repr__(self):
        return f"Activity('{self.activity_id}','{self.post_id},'{self.comment}','{self.upvote}','{self.downvote}','{self.date_created}')"
Exemple #21
0
class Post(db.Model):
    __tablename__ = 'post'
    post_id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)
    post_time = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    poster_id = db.Column(db.Integer,
                          db.ForeignKey('user.user_id'),
                          nullable=False)
    category_id = db.Column(db.Integer,
                            db.ForeignKey('category.category_id'),
                            nullable=False)

    def __init__(self, title, content, poster_id, category_id):
        self.title = title
        self.content = content
        self.poster_id = poster_id
        self.category_id = category_id

    @classmethod
    def getPostsByUser(self, user_id):
        return self.query.filter(Post.poster_id == user_id).all()

    @classmethod
    def getPostById(self, post_id):
        return self.query.filter(Post.post_id == post_id).first()

    @classmethod
    def getAll(self):
        return self.query.all()

    @classmethod
    def getPostsWithContentContaining(self, keyword):
        return self.query.filter(Post.content.like('%' + keyword + '%')).all()

    @classmethod
    def getPostsContaining(self, keyword):
        return self.query.filter(
            Post.title.like('%' + keyword + '%')
            | Post.content.like('%' + keyword + '%')).all()

    @classmethod
    def getPostCountByCategoryId(self, category_id):
        return self.query.filter(Post.category_id == category_id).count()
Exemple #22
0
class Post(db.Model):
    __tablename__ = 'posts'
    pid = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)
    post_time = db.Column(db.DateTime,
                          nullable=False,
                          default=datetime.utcnow())
    uid = db.Column(db.Integer, db.ForeignKey('users.uid'), nullable=False)
    tid = db.Column(db.Integer, db.ForeignKey('topics.tid'), nullable=False)
    comments = db.relationship("Comment", backref="posts")
    likes = db.relationship("Like", backref="posts")

    def __init__(self, title, content, post_time, uid, tid):
        self.title = title
        self.content = content
        self.post_time = post_time
        self.uid = uid
        self.tid = tid
class Topic(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    header = db.Column(db.String(100), nullable = False)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable = False)
    content = db.Column(db.Text, nullable = False)
    date = db.Column(db.DateTime, default = datetime.utcnow, nullable = False)
Exemple #24
0
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    login = db.Column(db.String(128), unique=True, nullable=False)
    password = db.Column(db.String(255), nullable=False)
class User(db.Model, UserMixin):
    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)
    topics = db.relationship("Topic", backref = "author", lazy = True)