models.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. # -*- coding: utf-8 -*-
  2. import json
  3. from . import db
  4. from sqlalchemy.types import TypeDecorator, VARCHAR
  5. from sqlalchemy.ext.mutable import MutableDict
  6. class JSONEncodedDict(TypeDecorator):
  7. "Represents an immutable structure as a json-encoded string."
  8. impl = VARCHAR
  9. def process_bind_param(self, value, dialect):
  10. if value is not None:
  11. value = json.dumps(value)
  12. return value
  13. def process_result_value(self, value, dialect):
  14. if value is not None:
  15. value = json.loads(value)
  16. return value
  17. class ISP(db.Model):
  18. id = db.Column(db.Integer, primary_key=True)
  19. name = db.Column(db.String, nullable=False, index=True, unique=True)
  20. shortname = db.Column(db.String(12), index=True, unique=True)
  21. is_ffdn_member = db.Column(db.Boolean, default=False)
  22. is_disabled = db.Column(db.Boolean, default=False) # True = ISP will not appear
  23. url = db.Column(db.String)
  24. last_update_success = db.Column(db.DateTime)
  25. last_update_attempt = db.Column(db.DateTime)
  26. is_updatable = db.Column(db.Boolean, default=True) # set to False to disable JSON-URL updates
  27. tech_email = db.Column(db.String)
  28. cache_info = db.Column(db.Text)
  29. json = db.Column(MutableDict.as_mutable(JSONEncodedDict))
  30. def __init__(self, *args, **kwargs):
  31. super(ISP, self).__init__(*args, **kwargs)
  32. self.json={}
  33. def __repr__(self):
  34. return '<ISP %r>' % (self.shortname if self.shortname else self.name,)