Guest User

Untitled

a guest
Jul 20th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. from peewee import TextField, Field
  2. from datetime import datetime
  3.  
  4.  
  5. db = MySQLDatabase('my_app', user='root', password='my-secret-pw',
  6. host='127.0.0.1', port=3306,
  7. field_types={'json': 'json', 'enum': 'ENUM'})
  8.  
  9.  
  10. class JSONField(TextField):
  11. field_type = 'json'
  12.  
  13. def db_value(self, value):
  14. return json.dumps(value)
  15.  
  16. def python_value(self, value):
  17. if value is not None:
  18. return json.loads(value)
  19.  
  20.  
  21. class EnumField(Field):
  22. field_type = 'enum'
  23.  
  24. def __init__(self, values, *args, **kwargs):
  25. self.values = set(values)
  26. super(EnumField, self).__init__(*args, **kwargs)
  27.  
  28. def __getattr__(self, name):
  29. if name in self.values:
  30. return name
  31. else:
  32. msg = (f'Requested enum value is not exists: {name}'
  33. f'valid values are: {self.values}')
  34. raise KeyError(msg)
  35.  
  36. def get_modifiers(self):
  37. return {f"'{v}'" for v in self.values}
  38.  
  39.  
  40. class Person(Model):
  41. name = CharField()
  42. birthday = DateField()
  43. jf = JSONField()
  44. answer = EnumField(['yes', 'no', 'other'])
  45.  
  46. class Meta:
  47. database = db
  48. primary_key = CompositeKey('name', 'birthday')
  49.  
  50.  
  51. db.drop_tables([Person])
  52. db.create_tables([Person])
  53.  
  54.  
  55. Person.create(name='ad2',
  56. birthday=datetime.now(),
  57. jf={'fdsa': 'sdf'},
  58. answer=Person.answer.no)
  59.  
  60. p = Person.get(name='ad2')
  61. print(p.answer)
Add Comment
Please, Sign In to add comment