"""Identity schema.""" from enum import Enum from marshmallow import fields, pre_load, Schema, validate from marshmallow.validate import OneOf from marshmallow_enum import EnumField from users import constants class ActiveType(Enum): """Enum for Active or Inactive Identity.""" Y = 'Y' N = 'N' class Identity(Schema): """Identity schema. Properties: -email (str): the email for this identity -name (str): full name of user associated to identity -first_name (str): User's first name. -last_name (str): User's last name. -localization (str): Language preference. -number_format (str): Number format. Must be eu or us. -date_format (str): Date format. Must be 'MM/DD/YYYY', 'DD/MM/YYYY' or 'YYYY/MM/DD/'. -identity_id (str): identity id. -auth0_user_id (str): auth0 user id. -google_user_id (str): google oauth user id. -audit_user (str): Client identity id for audit. -user_types (list): label, artist or employee. -default_brand (str): user brand by default. """ email = fields.Email(required=True) name = fields.String(required=True) first_name = fields.String(required=False) last_name = fields.String(required=False) localization = fields.Str(validate=OneOf(constants.LOCALES.values())) number_format = fields.Str(validate=OneOf(constants.NUMBER_FORMAT)) date_format = fields.Str(validate=OneOf(constants.DATE_FORMAT)) active = EnumField(ActiveType, required=False) identity_id = fields.String(required=True, validate=validate.Length(min=22, max=36)) auth0_user_id = fields.String(required=False, validate=validate.Length(equal=24)) google_user_id = fields.String(required=False, validate=validate.Length(min=1)) audit_user = fields.String(validate=validate.Length(min=22, max=36)) user_types = fields.List( fields.String(validate=OneOf(constants.IDENTITY_USER_TYPE)), default=[] ) default_brand = fields.String(validate=OneOf(constants.BRAND_TYPES), required=False) if default_brand == constants.AUTH0_ORCHARD_ORG_NAME: default_brand = constants.ORCHARD_BRAND @pre_load def remove_auth0_prefix(self, in_data, **kwargs): """Remove Auth0 prefix.""" if 'identity_id' in in_data and type(in_data['identity_id']) is str: in_data['identity_id'] = in_data['identity_id'].replace('auth0|', '') return in_data