예제 #1
0
class ReportedBugs(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String)
    description = db.Column(db.String)
    created_on = db.Column(db.String)

    def __init__(self, username, desc):
        self.username = username
        self.description = desc
        self.created_on = str(datetime.today().strftime("%b %d, %Y %H:%M:%S"))

    def __repr__(self):
        return f"ReportedBug({self.username}, {self.description}, {self.created_on})"


# class VotedPolls(db.Model):
# 	id = db.Column(db.Integer, primary_key=True)
# 	user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
# 	selected_option = db.Column(db.Integer)
# 	poll_id = db.Column(db.String)

# 	def __init__(self, user, poll, vote):
# 		self.user = user
# 		self.selected_option = vote
# 		self.poll_id = poll.id

# 	def __repr__(self):
# 		user = User.query.filter_by(id=self.user_id).first()
# 		return f"Poll<{self}> -> {user}"
예제 #2
0
class Hashtags(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    hashtag = db.Column(db.String, unique=True)

    def __init__(self, hashtag):
        self.hashtag = hashtag

    def __repr__(self):
        return f"HashtagNativeRepresentation({self.hashtag})"
예제 #3
0
class ReshareWithComment(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_type = db.Column(db.String)
    post_id = db.Column(db.String)
    host_id = db.Column(db.String)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    comments = db.relationship('Comment', backref='rwc_parent')
    content = db.Column(db.String)
    created_on = db.Column(db.String)
    category = db.Column(db.String)
    host_type = db.Column(db.String)
    hashtags = db.relationship('Hashtags',
                               secondary=hashassociation['rwc'],
                               lazy='subquery',
                               backref=db.backref('rwc', lazy=True))

    # isEdited = db.Column(db.Boolean)

    def __init__(self, content, category, author, host):
        self.post_type = 'ResharedWithComment'
        self.post_id = str(uuid.uuid4())
        self.content = content
        self.category = category
        self.author = author
        self.host_id = host.post_id
        self.created_on = str(datetime.today().strftime("%b %d, %Y %H:%M:%S"))
        self.host_type = host.post_type
        # self.isEdited = False

    @hybrid_property
    def likes(self):
        lx = LikedPosts.query.filter_by(post_id=self.post_id).all()
        return [x for x in lx]

    def like(self, user):
        obj = LikedPosts(user=user, post=self)
        db.session.add(obj)
        db.session.commit()

    def unlike(self, user):
        obj = LikedPosts.query.filter_by(user=user,
                                         post_id=self.post_id).first()
        if (obj):
            db.session.delete(obj)
            db.session.commit()

    def addhashtag(self, HList):
        for h in HList:
            H = hashgen(h)
            H.rwc.append(self)
        db.session.commit()

    def removehashtag(self, HList):
        for h in HList:
            H = Hashtags.query.filter_by(hashtag=h).first()
            H.rwc.remove(self)
        db.session.commit()

    def __repr__(self):
        return f"ResharedWithComment({self.post_id} -> {self.host_id})"
예제 #4
0
class BookmarkedPosts(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_id = db.Column(db.String)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    post_type = db.Column(db.Integer)

    def __init__(self, user, post, post_type):
        self.post_id = post.post_id
        self.user = user
        self.post_type = post_type

    def __repr__(self):
        user = User.query.filter_by(id=self.user_id).first()
        return f"BookmarkedPosts(post: {self.post_id} -> user: {user.username})"
예제 #5
0
class LikedPosts(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    post_id = db.Column(db.String)

    def __init__(self, user, post):
        self.user = user
        if (post.post_type == 'comment'):
            self.post_id = post.comment_id
        else:
            self.post_id = post.post_id

    def __repr__(self):
        return f"LikedPosts(user: {self.user_id} -> post: {self.post_id})"
예제 #6
0
class PollPost(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_type = db.Column(db.String)
    post_id = db.Column(db.String)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    content = db.Column(db.String)
    options = db.Column(db.PickleType(comparator=lambda *a: False))
    created_on = db.Column(db.String)
    hashtags = db.relationship('Hashtags',
                               secondary=hashassociation['poll'],
                               lazy='subquery',
                               backref=db.backref('polls', lazy=True))

    #Constructor
    def __init__(self, author, content, options):
        self.post_type = 'poll'
        self.post_id = str(uuid.uuid4())
        self.content = content
        self.author = author
        self.options = [{'name': e, 'count': 0} for e in options]
        self.created_on = str(datetime.today().strftime("%b %d, %Y %H:%M:%S"))

    @hybrid_property
    def likes(self):
        lx = LikedPosts.query.filter_by(post_id=self.post_id).all()
        return [x for x in lx]

    def like(self, user):
        obj = LikedPosts(user=user, post=self)
        db.session.add(obj)
        db.session.commit()

    def unlike(self, user):
        obj = LikedPosts.query.filter_by(user=user,
                                         post_id=self.post_id).first()
        if (obj):
            db.session.delete(obj)
            db.session.commit()

    def addhashtag(self, HList):
        for h in HList:
            H = hashgen(h)
            H.polls.append(self)
        db.session.commit()

    def removehashtag(self, HList):
        for h in HList:
            H = Hashtags.query.filter_by(hashtag=h).first()
            H.polls.remove(self)
        db.session.commit()

    def __repr__(self):
        return f"PollPost({self.post_id})"
예제 #7
0
class ResharedPosts(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    og_post_id = db.Column(db.String)
    og_post_type = db.Column(db.String)
    reshared_post_id = db.Column(db.String)
    reshare_type = db.Column(db.String)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __init__(self, user, host, post):
        self.og_post_id = host.post_id
        self.og_post_type = host.post_type
        self.user = user
        self.reshared_post_id = post.post_id
        self.reshare_type = post.post_type

    def __repr__(self):
        return f"ResharedPosts<{self.reshare_type}>(post: {self.og_post_id} -> host: {self.reshared_post_id})"
예제 #8
0
class SimpleReshare(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_type = db.Column(db.String)
    post_id = db.Column(db.String)
    host_id = db.Column(db.String)
    host_type = db.Column(db.String)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __init__(self, author, host):
        self.author = author
        self.post_type = 'SimpleReshare'
        self.post_id = str(uuid.uuid4())
        self.host_id = host.post_id
        self.host_type = host.post_type

    def __repr__(self):
        return f"SimpleReshare({self.post_id} -> {self.host_id})"
예제 #9
0
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.String)
    username = db.Column(db.String)
    password = db.Column(db.String)
    name = db.Column(db.String)
    email = db.Column(db.String)
    website = db.Column(db.String)
    icon = db.Column(db.String)
    background = db.Column(db.String)
    reputation = db.Column(db.String)
    basepoints = db.Column(db.String)
    secondarypoints = db.Column(db.String)
    #This controlls the follow logic
    followed = db.relationship('User',
                               secondary=followers,
                               primaryjoin=(followers.c.follower_id == id),
                               secondaryjoin=(followers.c.followed_id == id),
                               backref=db.backref('followers', lazy='dynamic'),
                               lazy='dynamic')
    created_on = db.Column(db.String)
    bio = db.Column(db.String)
    location = db.Column(db.String)
    my_microblogs = db.relationship('MicroBlogPost', backref='author')
    my_blogs = db.relationship('BlogPost', backref='author')
    my_timelines = db.relationship('TimelinePost', backref='author')
    my_shareables = db.relationship('ShareablePost', backref='author')
    my_reshareWithComments = db.relationship('ReshareWithComment',
                                             backref='author')
    my_simpleReshares = db.relationship('SimpleReshare', backref='author')
    my_polls = db.relationship('PollPost', backref='author')
    my_comments = db.relationship('Comment', backref='author')
    my_carousels = db.relationship('CarouselPost', backref='author')
    liked_posts = db.relationship('LikedPosts', backref='user')
    reshared_posts = db.relationship('ResharedPosts', backref='user')
    bookmarked_posts = db.relationship('BookmarkedPosts', backref='user')
    voted_polls = db.Column(db.PickleType(comparator=lambda *a: False))

    #Constructor
    def __init__(self, username, email, password):
        self.username = username
        self.password = password
        self.user_id = str(uuid.uuid4())
        self.email = email
        self.icon = 'https://images.pexels.com/photos/771742/pexels-photo-771742.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500'
        self.background = 'https://cdn.vox-cdn.com/thumbor/eHhAQHDvAi3sjMeylWgzqnqJP2w=/0x0:1800x1200/1200x0/filters:focal(0x0:1800x1200):no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/13272825/The_Verge_Hysteresis_Wallpaper_Small.0.jpg'
        self.reputation = '0'
        self.followers = []
        self.following = []
        self.created_on = str(datetime.today().strftime("%b %d, %Y %H:%M:%S"))
        self.bio = ''
        self.location = 'Unspecified Location'
        self.voted_polls = []
        self.website = ''
        self.basepoints = '0'
        self.secondarypoints = '0'

    @hybrid_property
    def my_following(self):
        return [x.username for x in self.followed.all()]

    @hybrid_property
    def my_followers(self):
        return [x.username for x in self.followers.all()]

    #--------------------------------Follow other users logic-----------------------
    def follow(self, user):
        if not self.is_following(user):
            self.followed.append(user)

    def unfollow(self, user):
        if self.is_following(user):
            self.followed.remove(user)

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

    #--------------------------------Follow other users logic-----------------------

    def add_bookmark(self, post, posttype):
        obj = BookmarkedPosts(user=self, post=post, post_type=posttype)
        db.session.add(obj)
        db.session.commit()

    def remove_bookmark(self, post):
        obj = BookmarkedPosts.query.filter_by(user=self,
                                              post_id=post.post_id).first()
        if (obj):
            db.session.delete(obj)
            db.session.commit()

    def __repr__(self):
        return f"MicroBloggerUser({self.username})"
예제 #10
0
class CarouselPost(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_type = db.Column(db.String)
    post_id = db.Column(db.String)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    comments = db.relationship('Comment', backref='carousel_parent')
    content = db.Column(db.String)
    created_on = db.Column(db.String)
    images = db.Column(db.PickleType(comparator=lambda *a: False))
    hashtags = db.relationship('Hashtags',
                               secondary=hashassociation['carousel'],
                               lazy='subquery',
                               backref=db.backref('carousels', lazy=True))
    # isEdited = db.Column(db.Boolean)

    @hybrid_property
    def likes(self):
        lx = LikedPosts.query.filter_by(post_id=self.post_id).all()
        return [x for x in lx]

    @hybrid_property
    def reshares(self):
        rx = ResharedPosts.query.filter_by(og_post_id=self.post_id).all()
        return [x for x in rx]

    def like(self, user):
        obj = LikedPosts(user=user, post=self)
        db.session.add(obj)
        db.session.commit()

    def unlike(self, user):
        obj = LikedPosts.query.filter_by(user=user,
                                         post_id=self.post_id).first()
        if (obj):
            db.session.delete(obj)
            db.session.commit()

    def reshare(self, user, post):
        obj = ResharedPosts(user=user, host=self, post=post)
        db.session.add(obj)
        db.session.commit()

    def unreshare(self, user, post):
        obj = ResharedPosts.query.filter_by(
            user=user, og_post_id=self.post_id,
            reshared_post_id=post.post_id).first()
        if (obj):
            db.session.delete(obj)
            db.session.commit()

    def addhashtag(self, HList):
        for h in HList:
            H = hashgen(h)
            H.carousels.append(self)
        db.session.commit()

    def removehashtag(self, HList):
        for h in HList:
            H = Hashtags.query.filter_by(hashtag=h).first()
            H.carousels.remove(self)
        db.session.commit()

    def __init__(self, author, content):
        self.post_id = str(uuid.uuid4())
        self.author = author
        self.post_type = 'carousel'
        self.images = []
        self.content = content
        self.created_on = str(datetime.today().strftime("%b %d, %Y %H:%M:%S"))
        # self.isEdited = False

    def __repr__(self):
        return f"CarouselPost({self.author_id}, {self.post_id})"
예제 #11
0
class Comment(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_type = db.Column(db.String)
    comment_id = db.Column(db.String)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    content = db.Column(db.String)
    created_on = db.Column(db.String)
    category = db.Column(db.String)
    microblog_pid = db.Column(db.Integer, db.ForeignKey('micro_blog_post.id'))
    blog_pid = db.Column(db.Integer, db.ForeignKey('blog_post.id'))
    timeline_pid = db.Column(db.Integer, db.ForeignKey('timeline_post.id'))
    rwc_pid = db.Column(db.Integer, db.ForeignKey('reshare_with_comment.id'))
    carousel_pid = db.Column(db.Integer, db.ForeignKey('carousel_post.id'))
    hashtags = db.relationship('Hashtags',
                               secondary=hashassociation['comment'],
                               lazy='subquery',
                               backref=db.backref('comments', lazy=True))

    # isEdited = db.Column(db.Boolean)

    def __init__(self,
                 author,
                 content,
                 category,
                 microblog_parent=None,
                 blog_parent=None,
                 timeline_parent=None,
                 rwc_parent=None,
                 carousel_parent=None):
        self.post_type = 'comment'
        self.comment_id = str(uuid.uuid4())
        self.content = content
        self.category = category

        if (microblog_parent != None): self.microblog_parent = microblog_parent
        if (blog_parent != None): self.blog_parent = blog_parent
        if (timeline_parent != None): self.timeline_parent = timeline_parent
        if (rwc_parent != None): self.rwc_parent = rwc_parent
        if (carousel_parent != None): self.carousel_parent = carousel_parent

        self.author = author
        self.created_on = str(datetime.today().strftime("%b %d, %Y %H:%M:%S"))
        # self.isEdited = False

    @hybrid_property
    def likes(self):
        lx = LikedPosts.query.filter_by(post_id=self.comment_id).all()
        return [x for x in lx]

    def like(self, user):
        obj = LikedPosts(user=user, post=self)
        db.session.add(obj)
        db.session.commit()

    def unlike(self, user):
        obj = LikedPosts.query.filter_by(user=user,
                                         post_id=self.post_id).first()
        if (obj):
            db.session.delete(obj)
            db.session.commit()

    def addhashtag(self, HList):
        for h in HList:
            H = hashgen(h)
            H.comments.append(self)
        db.session.commit()

    def removehashtag(self, HList):
        for h in HList:
            H = Hashtags.query.filter_by(hashtag=h).first()
            H.comments.remove(self)
        db.session.commit()

    def __repr__(self):
        return f"Comment({self.comment_id})"
예제 #12
0
class TimelinePost(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_type = db.Column(db.String)
    post_id = db.Column(db.String)
    background = db.Column(db.String)
    timeline_name = db.Column(db.String)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    content = db.Column(db.String)
    events = db.Column(db.PickleType)
    created_on = db.Column(db.String)
    comments = db.relationship('Comment', backref='timeline_parent')
    hashtags = db.relationship('Hashtags',
                               secondary=hashassociation['timeline'],
                               lazy='subquery',
                               backref=db.backref('timelines', lazy=True))
    # isEdited = db.Column(db.Boolean)
    """
	SCHEMA(events): [
        {
          'event_name': 'The Situation Abroad',
          'description':
              'A Very Dire Situation',
          'timestamp': 'late 2019'
        },
	]
	"""
    def __init__(self, timeline_name, events, background, author):
        self.post_type = 'timeline'
        self.post_id = str(uuid.uuid4())
        self.timeline_name = timeline_name
        self.events = events
        self.background = background
        self.author = author
        self.created_on = str(datetime.today().strftime("%b %d, %Y %H:%M:%S"))
        # self.isEdited = false

    @hybrid_property
    def likes(self):
        lx = LikedPosts.query.filter_by(post_id=self.post_id).all()
        return [x for x in lx]

    @hybrid_property
    def reshares(self):
        rx = ResharedPosts.query.filter_by(og_post_id=self.post_id).all()
        return [x for x in rx]

    def like(self, user):
        obj = LikedPosts(user=user, post=self)
        db.session.add(obj)
        db.session.commit()

    def unlike(self, user):
        obj = LikedPosts.query.filter_by(user=user,
                                         post_id=self.post_id).first()
        if (obj):
            db.session.delete(obj)
            db.session.commit()

    def reshare(self, user, post):
        obj = ResharedPosts(user=user, host=self, post=post)
        db.session.add(obj)
        db.session.commit()

    def unreshare(self, user, post):
        obj = ResharedPosts.query.filter_by(
            user=user, og_post_id=self.post_id,
            reshared_post_id=post.post_id).first()
        if (obj):
            db.session.delete(obj)
            db.session.commit()

    def addhashtag(self, HList):
        for h in HList:
            H = hashgen(h)
            H.timelines.append(self)
        db.session.commit()

    def removehashtag(self, HList):
        for h in HList:
            H = Hashtags.query.filter_by(hashtag=h).first()
            H.timelines.remove(self)
        db.session.commit()

    def __repr__(self):
        return f"TimelinePost({self.timeline_name})"
예제 #13
0
class ShareablePost(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_type = db.Column(db.String)
    post_id = db.Column(db.String)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    content = db.Column(db.String)
    link = db.Column(db.String)
    name = db.Column(db.String)
    created_on = db.Column(db.String)
    hashtags = db.relationship('Hashtags',
                               secondary=hashassociation['shareable'],
                               lazy='subquery',
                               backref=db.backref('shareables', lazy=True))

    # isEdited = db.Column(db.Boolean)

    def __init__(self, name, content, link, author):
        self.post_type = 'shareable'
        self.post_id = str(uuid.uuid4())
        self.name = name
        self.content = content
        self.link = link
        self.author = author
        self.created_on = str(datetime.today().strftime("%b %d, %Y %H:%M:%S"))
        # self.isEdited = False

    @hybrid_property
    def likes(self):
        lx = LikedPosts.query.filter_by(post_id=self.post_id).all()
        return [x for x in lx]

    @hybrid_property
    def reshares(self):
        rx = ResharedPosts.query.filter_by(og_post_id=self.post_id).all()
        return [x for x in rx]

    def like(self, user):
        obj = LikedPosts(user=user, post=self)
        db.session.add(obj)
        db.session.commit()

    def unlike(self, user):
        obj = LikedPosts.query.filter_by(user=user,
                                         post_id=self.post_id).first()
        if (obj):
            db.session.delete(obj)
            db.session.commit()

    def reshare(self, user, post):
        obj = ResharedPosts(user=user, host=self, post=post)
        db.session.add(obj)
        db.session.commit()

    def unreshare(self, user, post):
        obj = ResharedPosts.query.filter_by(
            user=user, og_post_id=self.post_id,
            reshared_post_id=post.post_id).first()
        if (obj):
            db.session.delete(obj)
            db.session.commit()

    def addhashtag(self, HList):
        for h in HList:
            H = hashgen(h)
            H.shareables.append(self)
        db.session.commit()

    def removehashtag(self, HList):
        for h in HList:
            H = Hashtags.query.filter_by(hashtag=h).first()
            H.shareables.remove(self)
        db.session.commit()

    def __repr__(self):
        return f"ShareablePost({self.name})"
예제 #14
0
def genauxtable(name, dname):
    return db.Column(f'{name}_id',
                     db.Integer,
                     db.ForeignKey(f'{dname}.id'),
                     primary_key=True)
예제 #15
0
from MicroBloggerCore import db
from datetime import datetime, date
import uuid
from sqlalchemy.ext.hybrid import hybrid_property
from helperfunctions import calculate_post_age

followers = db.Table(
    'followers', db.Column('follower_id', db.Integer,
                           db.ForeignKey('user.id')),
    db.Column('followed_id', db.Integer, db.ForeignKey('user.id')))


def genauxtable(name, dname):
    return db.Column(f'{name}_id',
                     db.Integer,
                     db.ForeignKey(f'{dname}.id'),
                     primary_key=True)


hashassociation = {
    'microblog':
    db.Table(
        'MB-HTags',
        genauxtable('mb_hashtag', 'hashtags'),
        genauxtable('microblog', 'micro_blog_post'),
    ),
    'blog':
    db.Table(
        'B-HTags',
        genauxtable('b_hashtag', 'hashtags'),
        genauxtable('blog', 'blog_post'),