users.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. from marshmallow import validates, ValidationError, validate
  2. from pytz import all_timezones
  3. from flexmeasures.data import db, ma
  4. from flexmeasures.data.models.user import User as UserModel
  5. from flexmeasures.data.schemas.times import AwareDateTimeField
  6. class SQLAlchemySchema(ma.SQLAlchemySchema):
  7. """Workaround from https://github.com/marshmallow-code/flask-marshmallow/issues/44#issuecomment-1002740778"""
  8. class Meta(ma.SQLAlchemySchema.Meta):
  9. sqla_session = db.session
  10. class UserSchema(SQLAlchemySchema):
  11. """
  12. This schema lists fields we support through this API (e.g. no password).
  13. """
  14. class Meta(SQLAlchemySchema.Meta):
  15. model = UserModel
  16. @validates("timezone")
  17. def validate_timezone(self, timezone):
  18. if timezone not in all_timezones:
  19. raise ValidationError(f"Timezone {timezone} doesn't exist.")
  20. id = ma.auto_field(dump_only=True)
  21. email = ma.auto_field(required=True, validate=validate.Email())
  22. username = ma.auto_field(required=True)
  23. account_id = ma.auto_field(dump_only=True)
  24. active = ma.auto_field()
  25. timezone = ma.auto_field()
  26. flexmeasures_roles = ma.auto_field()
  27. last_login_at = AwareDateTimeField()
  28. last_seen_at = AwareDateTimeField()