This repository has been archived on 2024-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
devicehub-teal/ereuse_devicehub/resources/user/schemas.py

46 lines
1.6 KiB
Python
Raw Normal View History

from marshmallow import post_dump
2018-04-27 17:16:43 +00:00
from marshmallow.fields import Email, String, UUID
from teal.marshmallow import SanitizedStr
2018-04-27 17:16:43 +00:00
2019-01-19 18:19:35 +00:00
from ereuse_devicehub import auth
from ereuse_devicehub.marshmallow import NestedOn
from ereuse_devicehub.resources.agent.schemas import Individual
2018-04-27 17:16:43 +00:00
from ereuse_devicehub.resources.schemas import Thing
class User(Thing):
id = UUID(dump_only=True)
email = Email(required=True)
password = SanitizedStr(load_only=True, required=True)
individuals = NestedOn(Individual, many=True, dump_only=True)
name = SanitizedStr()
2018-04-27 17:16:43 +00:00
token = String(dump_only=True,
description='Use this token in an Authorization header to access the app.'
'The token can change overtime.')
def __init__(self,
only=None,
exclude=('token',),
prefix='',
many=False,
context=None,
load_only=(),
dump_only=(),
partial=False):
"""
Instantiates the User.
By default we exclude token from both load/dump
so they are not taken / set in normal usage by mistake.
"""
super().__init__(only, exclude, prefix, many, context, load_only, dump_only, partial)
@post_dump
2018-04-27 17:16:43 +00:00
def base64encode_token(self, data: dict):
"""Encodes the token to base64 so clients don't have to."""
if 'token' in data:
# In many cases we don't dump the token (ex. relationships)
# Framework needs ':' at the end
2019-01-19 18:19:35 +00:00
data['token'] = auth.Auth.encode(data['token'])
2018-04-27 17:16:43 +00:00
return data