Advertisement
Guest User

Untitled

a guest
May 15th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. import datetime
  2.  
  3. from flask.ext.bcrypt import generate_password_hash
  4. from flask.ext.login import UserMixin
  5. from peewee import *
  6.  
  7. DATABASE = SqliteDatabase('social.db')
  8.  
  9. class User(UserMixin, Model):
  10. username = CharField(unique=True)
  11. email = CharField(unique=True)
  12. password = CharField(max_length=100)
  13. joined_at = DateTimeField(default=datetime.datetime.now)
  14. is_admin = BooleanField(default=False)
  15.  
  16. class Meta:
  17. database = DATABASE
  18. order_by = ('-joined_at',)
  19.  
  20. def get_posts(self):
  21. return Post.select().where(Post.user == self)
  22.  
  23. def get_stream(self):
  24. return Post.select().where(
  25. (Post.user << self.following() |
  26. Post.user == self)
  27. )
  28.  
  29. def following(self):
  30. """The user's that we are following."""
  31. return(
  32. User.select().join(
  33. Relationship, on=Relationship.to_user
  34. ).where(
  35. Relationship.from_user == self
  36. )
  37. )
  38.  
  39. def followers(self):
  40. """Get user's following the current user"""
  41. return(
  42. User.select().join(
  43. Relationship, on=Relationship.from_user
  44. ).where(
  45. Relationship.to_user == self
  46. )
  47. )
  48.  
  49. @classmethod
  50. def create_user(cls, username, email, password, admin=False):
  51. try:
  52. with DATABASE.transaction():
  53. cls.create(
  54. username=username,
  55. email=email,
  56. password=generate_password_hash(password),
  57. is_admin=admin)
  58. except IntegrityError:
  59. raise ValueError("User already exists")
  60.  
  61. class Post(Model):
  62. timestamp = DateTimeField(default=datetime.datetime.now)
  63. user = ForeignKeyField(
  64. rel_model=User,
  65. related_name='posts'
  66. )
  67. content = TextField()
  68.  
  69. class Meta:
  70. database = DATABASE
  71. order_by = ('-timestamp',)
  72.  
  73. class Relationship(Model):
  74. from_user = ForeignKeyField(User, related_name='relationships')
  75. to_user = ForeignKeyField(User, related_name="related_to")
  76.  
  77. class Meta:
  78. database = DATABASE
  79. indexes = (
  80. (("from_user", 'to_user'), True)
  81. )
  82.  
  83.  
  84. def initialize():
  85. DATABASE.connect()
  86. DATABASE.create_tables([User, Post, Relationship], safe=True)
  87. DATABASE.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement