12345678910111213141516171819202122232425262728293031323334353637 |
- from marshmallow import validates, ValidationError, validate
- from pytz import all_timezones
- from flexmeasures.data import db, ma
- from flexmeasures.data.models.user import User as UserModel
- from flexmeasures.data.schemas.times import AwareDateTimeField
- class SQLAlchemySchema(ma.SQLAlchemySchema):
- """Workaround from https://github.com/marshmallow-code/flask-marshmallow/issues/44#issuecomment-1002740778"""
- class Meta(ma.SQLAlchemySchema.Meta):
- sqla_session = db.session
- class UserSchema(SQLAlchemySchema):
- """
- This schema lists fields we support through this API (e.g. no password).
- """
- class Meta(SQLAlchemySchema.Meta):
- model = UserModel
- @validates("timezone")
- def validate_timezone(self, timezone):
- if timezone not in all_timezones:
- raise ValidationError(f"Timezone {timezone} doesn't exist.")
- id = ma.auto_field(dump_only=True)
- email = ma.auto_field(required=True, validate=validate.Email())
- username = ma.auto_field(required=True)
- account_id = ma.auto_field(dump_only=True)
- active = ma.auto_field()
- timezone = ma.auto_field()
- flexmeasures_roles = ma.auto_field()
- last_login_at = AwareDateTimeField()
- last_seen_at = AwareDateTimeField()
|