Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2013
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. followers = db.Table('followers',
  2. db.Column('follower_id', db.Integer, db.ForeignKey('user.id')),
  3. db.Column('followed_id', db.Integer, db.ForeignKey('user.id'))
  4. )
  5.  
  6. likes = db.Table('likes',
  7. db.Column('userlikes', db.Integer, db.ForeignKey('user.id')),
  8. db.Column('artistliked', db.Integer, db.ForeignKey('artist.id'))
  9. )
  10.  
  11. class User(db.Model):
  12. __searchable__ = ['nickname']
  13. id = db.Column(db.Integer, primary_key = True)
  14. nickname = db.Column(db.String(64), unique = True)
  15. lower = db.Column(db.String())
  16. email = db.Column(db.String(120), index = True, unique = True)
  17. role = db.Column(db.SmallInteger, default = ROLE_USER)
  18. posts = db.relationship('Post', backref = 'author', lazy = 'dynamic')
  19. about_me = db.Column(db.String(140))
  20. last_seen = db.Column(db.DateTime)
  21. followed = db.relationship('User',
  22. secondary = followers,
  23. primaryjoin = (followers.c.follower_id == id),
  24. secondaryjoin = (followers.c.followed_id == id),
  25. backref = db.backref('followers', lazy = 'dynamic'),
  26. lazy = 'dynamic')
  27. liked = db.relationship('Artist',
  28. secondary = likes,
  29. primaryjoin = (likes.c.userlikes == id),
  30. secondaryjoin = (likes.c.artistliked == id),
  31. backref = db.backref('likes', lazy = 'dynamic'),
  32. lazy = 'dynamic')
  33.  
  34. def follow(self, user):
  35. if not self.is_following(user):
  36. self.followed.append(user)
  37. return self
  38.  
  39. def like(self, artist):
  40. if not self.is_liking(artist):
  41. self.liked.append(artist)
  42. return self
  43.  
  44. def unfollow(self, user):
  45. if self.is_following(user):
  46. self.followed.remove(user)
  47. return self
  48.  
  49. def unlike(self, artist):
  50. if self.is_liking(artist):
  51. self.liked.remove(artist)
  52. return self
  53.  
  54. def is_following(self, user):
  55. return self.followed.filter(followers.c.followed_id == user.id).count() > 0
  56.  
  57. def is_liking(self, artist):
  58. return self.liked.filter(likes.c.artistliked == artist.id).count() > 0
  59.  
  60. def followed_posts(self):
  61. return Post.query.join(followers, (followers.c.followed_id == Post.user_id)).filter(followers.c.follower_id == self.id).order_by(Post.timestamp.desc())
  62.  
  63. def __repr__(self):
  64. return '<User %r>' % (self.nickname)
  65.  
  66.  
  67. class Artist(db.Model):
  68. id = db.Column(db.Integer, primary_key = True)
  69. name = db.Column(db.String(40))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement