# coding=utf-8 import marshmallow from marshmallow import post_load from marshmallow.validate import OneOf from marshmallow.validate import Length from marshmallow.validate import Range from tracim_backend.lib.utils.utils import DATETIME_FORMAT from tracim_backend.models.auth import Profile from tracim_backend.app_models.contents import GlobalStatus from tracim_backend.app_models.contents import CONTENT_STATUS from tracim_backend.app_models.contents import CONTENT_TYPES from tracim_backend.app_models.contents import open_status from tracim_backend.models.auth import Group from tracim_backend.models.context_models import ActiveContentFilter from tracim_backend.models.context_models import FolderContentUpdate from tracim_backend.models.context_models import AutocompleteQuery from tracim_backend.models.context_models import ContentIdsQuery from tracim_backend.models.context_models import UserWorkspaceAndContentPath from tracim_backend.models.context_models import ContentCreation from tracim_backend.models.context_models import UserCreation from tracim_backend.models.context_models import SetEmail from tracim_backend.models.context_models import SetPassword from tracim_backend.models.context_models import UserInfos from tracim_backend.models.context_models import UserProfile from tracim_backend.models.context_models import ContentPreviewSizedPath from tracim_backend.models.context_models import RevisionPreviewSizedPath from tracim_backend.models.context_models import PageQuery from tracim_backend.models.context_models import WorkspaceAndContentRevisionPath from tracim_backend.models.context_models import WorkspaceMemberInvitation from tracim_backend.models.context_models import WorkspaceUpdate from tracim_backend.models.context_models import RoleUpdate from tracim_backend.models.context_models import CommentCreation from tracim_backend.models.context_models import TextBasedContentUpdate from tracim_backend.models.context_models import SetContentStatus from tracim_backend.models.context_models import CommentPath from tracim_backend.models.context_models import MoveParams from tracim_backend.models.context_models import WorkspaceAndContentPath from tracim_backend.models.context_models import WorkspaceAndUserPath from tracim_backend.models.context_models import ContentFilter from tracim_backend.models.context_models import LoginCredentials from tracim_backend.models.data import UserRoleInWorkspace from tracim_backend.models.data import ActionDescription from tracim_backend.app_models.validator import all_content_types_validator class UserDigestSchema(marshmallow.Schema): """ Simple user schema """ user_id = marshmallow.fields.Int(dump_only=True, example=3) avatar_url = marshmallow.fields.Url( allow_none=True, example="/api/v2/asset/avatars/suri-cate.jpg", description="avatar_url is the url to the image file. " "If no avatar, then set it to null " "(and frontend will interpret this with a default avatar)", ) public_name = marshmallow.fields.String( example='Suri Cate', ) class UserSchema(UserDigestSchema): """ Complete user schema """ email = marshmallow.fields.Email( required=True, example='suri.cate@algoo.fr' ) created = marshmallow.fields.DateTime( format=DATETIME_FORMAT, description='User account creation date', ) is_active = marshmallow.fields.Bool( example=True, description='Is user account activated ?' ) is_deleted = marshmallow.fields.Bool( example=False, description='Is user account deleted ?' ) # TODO - G.M - 17-04-2018 - Restrict timezone values timezone = marshmallow.fields.String( description="Timezone as tz database format", example="Europe/Paris", ) # TODO - G.M - 17-04-2018 - check this, relative url allowed ? caldav_url = marshmallow.fields.Url( allow_none=True, relative=True, attribute='calendar_url', example="/api/v2/calendar/user/3.ics/", description="The url for calendar CalDAV direct access", ) profile = marshmallow.fields.String( attribute='profile', validate=OneOf(Profile._NAME), example='managers', ) lang = marshmallow.fields.String( description="User langage in iso639 format", example='en', required=False, validate=Length(min=2, max=3), allow_none=True, default=None, ) class Meta: description = 'User account of Tracim' class LoggedInUserPasswordSchema(marshmallow.Schema): loggedin_user_password = marshmallow.fields.String( required=True, ) class SetEmailSchema(LoggedInUserPasswordSchema): email = marshmallow.fields.Email( required=True, example='suri.cate@algoo.fr' ) @post_load def create_set_email_object(self, data): return SetEmail(**data) class SetPasswordSchema(LoggedInUserPasswordSchema): new_password = marshmallow.fields.String( example='8QLa$