This repository has been archived on 2022-06-28. You can view files and clone it, but cannot push or open issues or pull requests.
Yotter/app/models.py

179 lines
5.4 KiB
Python
Raw Permalink Normal View History

2020-07-13 03:13:36 +05:30
from datetime import datetime
from app import db, login
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash
followers = db.Table('followers',
2020-09-04 21:53:31 +05:30
db.Column('follower_id', db.Integer, db.ForeignKey('user.id')),
db.Column('followed_id', db.Integer, db.ForeignKey('user.id'))
2020-07-13 03:13:36 +05:30
)
2020-07-27 18:30:01 +05:30
channel_association = db.Table('channel_association',
2020-09-05 12:11:40 +05:30
db.Column('channel_id', db.Integer, db.ForeignKey('channel.id')),
2020-09-04 21:53:31 +05:30
db.Column('user_id', db.Integer, db.ForeignKey('user.id'))
) # Association: CHANNEL --followed by--> [USERS]
2020-07-27 18:30:01 +05:30
twitter_association = db.Table('twitter_association',
2020-09-05 12:11:40 +05:30
db.Column('account_id', db.Integer, db.ForeignKey('twitterAccount.id')),
2020-09-04 21:53:31 +05:30
db.Column('user_id', db.Integer, db.ForeignKey('user.id'))
) # Association: ACCOUNT --followed by--> [USERS]
2020-07-13 03:13:36 +05:30
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
password_hash = db.Column(db.String(128))
last_seen = db.Column(db.DateTime, default=datetime.utcnow())
2020-09-20 13:04:53 +05:30
is_admin = db.Column(db.Boolean, default=False, nullable=True)
2020-09-06 15:41:05 +05:30
posts = db.relationship('Post', backref='author', lazy='dynamic')
2020-07-13 03:13:36 +05:30
def __repr__(self):
2021-01-07 13:22:13 +05:30
return f'<User {self.username}>'
2020-07-13 03:13:36 +05:30
def set_last_seen(self):
self.last_seen = datetime.utcnow()
2021-01-07 13:22:13 +05:30
2020-09-20 13:04:53 +05:30
def set_admin_user(self):
self.is_admin = True
2020-07-13 03:13:36 +05:30
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)
2021-01-07 13:22:13 +05:30
2020-07-13 03:13:36 +05:30
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
2021-01-07 13:22:13 +05:30
2020-07-13 03:13:36 +05:30
def following_list(self):
return self.followed.all()
def saved_posts(self):
return Post.query.filter_by(user_id=self.id)
# TWITTER
def twitter_following_list(self):
return self.twitterFollowed.all()
2021-01-07 13:22:13 +05:30
def is_following_tw(self, uname):
temp_cid = twitterFollow.query.filter_by(username = uname).first()
if temp_cid is None:
return False
else:
following = self.twitter_following_list()
for f in following:
if f.username == uname:
return True
return False
2021-01-07 13:22:13 +05:30
# YOUTUBE
2020-07-27 18:30:01 +05:30
def youtube_following_list(self):
return self.youtubeFollowed.all()
2021-01-07 13:22:13 +05:30
def is_following_yt(self, cid):
temp_cid = youtubeFollow.query.filter_by(channelId = cid).first()
if temp_cid is None:
return False
else:
following = self.youtube_following_list()
for f in following:
if f.channelId == cid:
return True
return False
2021-01-07 13:22:13 +05:30
2020-07-13 03:13:36 +05:30
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')
youtubeFollowed = db.relationship("youtubeFollow",
2020-07-27 18:30:01 +05:30
secondary=channel_association,
back_populates="followers",
lazy='dynamic')
twitterFollowed = db.relationship("twitterFollow",
secondary=twitter_association,
back_populates="followers",
lazy='dynamic')
2020-07-13 03:13:36 +05:30
@login.user_loader
def load_user(id):
return User.query.get(int(id))
class twitterPost():
date = 0
username = 'Error'
twitterName = "Error Name"
isPinned = False
2020-07-13 03:13:36 +05:30
op = 'Error'
isRT = True
urlToPost = ""
validPost = True
2020-08-28 02:55:08 +05:30
content = ""
2020-07-13 03:13:36 +05:30
profilePic = "url"
timeStamp = "error"
userProfilePic = "1.png"
2020-08-28 02:55:08 +05:30
isReply = False
replyingUrl = "#"
replyingUser = "@nobody"
replyingTweetContent = ""
attachedImg = ""
replyAttachedImg = ""
2020-07-13 03:13:36 +05:30
2020-08-16 18:50:05 +05:30
class ytPost():
2020-07-27 18:30:01 +05:30
channelName = 'Error'
channelUrl = '#'
2020-08-23 20:57:12 +05:30
channelId = '@'
2020-07-27 18:30:01 +05:30
videoUrl = '#'
videoTitle = '#'
videoThumb = '#'
description = "LOREM IPSUM"
date = 'None'
views = 'NaN'
2020-07-31 15:58:52 +05:30
id = 'isod'
2020-07-27 18:30:01 +05:30
class youtubeFollow(db.Model):
2020-07-27 18:30:01 +05:30
__tablename__ = 'channel'
id = db.Column(db.Integer, primary_key=True)
2020-08-24 19:01:56 +05:30
channelId = db.Column(db.String(30), nullable=False)
2020-09-20 16:23:25 +05:30
channelName = db.Column(db.String(100))
2021-01-07 13:22:13 +05:30
followers = db.relationship('User',
2020-07-27 18:30:01 +05:30
secondary=channel_association,
back_populates="youtubeFollowed")
2021-01-07 13:22:13 +05:30
2020-07-27 18:30:01 +05:30
def __repr__(self):
2021-01-07 13:22:13 +05:30
return f'<youtubeFollow {self.channelName}>'
class twitterFollow(db.Model):
__tablename__ = 'twitterAccount'
id = db.Column(db.Integer, primary_key=True)
2020-09-20 16:23:25 +05:30
username = db.Column(db.String(100), nullable=False)
2021-01-07 13:22:13 +05:30
followers = db.relationship('User',
secondary=twitter_association,
back_populates="twitterFollowed")
2021-01-07 13:22:13 +05:30
def __repr__(self):
2021-01-07 13:22:13 +05:30
return f'<twitterFollow {self.username}>'
2020-07-27 18:30:01 +05:30
2020-07-13 03:13:36 +05:30
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
body = db.Column(db.String(540))
timestamp = db.Column(db.String(100))
2020-09-20 16:23:25 +05:30
url = db.Column(db.String(550), unique=True)
username = db.Column(db.String(100))
2020-07-13 03:13:36 +05:30
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
def __repr__(self):
2021-01-07 13:22:13 +05:30
return f'<Post {self.body}>'