models.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import datetime
  2. import hashlib
  3. from nova import db
  4. from sqlalchemy_utils import PasswordType, force_auto_coercion
  5. force_auto_coercion()
  6. class User(db.Model):
  7. __tablename__ = 'users'
  8. id = db.Column(db.Integer, primary_key=True)
  9. name = db.Column(db.String, unique=True)
  10. email = db.Column(db.String)
  11. fullname = db.Column(db.String)
  12. is_admin = db.Column(db.Boolean, default=False)
  13. password = db.Column(PasswordType(
  14. schemes=['pbkdf2_sha512'],
  15. pbkdf2_sha512__default_rounds=50000,
  16. pbkdf2_sha512__salt_size=16),
  17. nullable=False)
  18. token = db.Column(db.String)
  19. token_time = db.Column(db.DateTime)
  20. gravatar = db.Column(db.String)
  21. def __init__(self, name=None, fullname=None, email=None, password=None, is_admin=False):
  22. self.name = name
  23. self.fullname = fullname
  24. self.email = email
  25. self.password = password
  26. self.is_admin = is_admin
  27. self.gravatar = hashlib.md5(email.lower()).hexdigest()
  28. self.token = None
  29. def __repr__(self):
  30. return '<User(name={}, fullname={}>'.format(self.name, self.fullname)
  31. def is_authenticated(self):
  32. return True
  33. def is_active(self):
  34. return True
  35. def is_anonymous(self):
  36. False
  37. def get_id(self):
  38. return self.name
  39. class Dataset(db.Model):
  40. __tablename__ = 'datasets'
  41. id = db.Column(db.Integer, primary_key=True)
  42. name = db.Column(db.String)
  43. path = db.Column(db.String)
  44. created = db.Column(db.DateTime, default=datetime.datetime.utcnow)
  45. closed = db.Column(db.Boolean, default=False)
  46. parent_id = db.Column(db.Integer, db.ForeignKey('datasets.id'), nullable=True)
  47. parent = db.relationship('Dataset')
  48. def __repr__(self):
  49. return '<Dataset(name={}, path={}>'.format(self.name, self.path)
  50. class Access(db.Model):
  51. __tablename__ = 'accesses'
  52. id = db.Column(db.Integer, primary_key=True)
  53. user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
  54. dataset_id = db.Column(db.Integer, db.ForeignKey('datasets.id'))
  55. owner = db.Column(db.Boolean)
  56. writable = db.Column(db.Boolean)
  57. seen = db.Column(db.Boolean, default=False)
  58. user = db.relationship('User')
  59. dataset = db.relationship('Dataset')
  60. def __repr__(self):
  61. return '<Access(user={}, dataset={}, owner={}, writable={}>'.format(
  62. self.user.name, self.dataset.name, self.owner, self.writable)