"""GDA Artist Signup Schema.""" import stringcase from marshmallow import post_dump from marshmallow import Schema from marshmallow import fields from . import consts from . import config class ArtistSignupSchema(Schema): """Artist signup schema.""" email = fields.String(required=True) company = fields.String(required=True) first_name = fields.String(required=True) last_name = fields.String(required=True) role = fields.String( required=True, validate=lambda val: val in consts.ALLOWED_ROLES, error_messages={ 'validator_failed': 'Value should be "Artist or Band", "Label",' ' "Manager" or "Other".' } ) country = fields.String(required=True) spotify_url = fields.String(allow_none=True, default=None) spotify_followers = fields.Integer(allow_none=True) instagram_url = fields.String(allow_none=True, default=None) youtube_url = fields.String(allow_none=True, default=None) deezer_url = fields.String(allow_none=True, default=None) amazon_music_url = fields.String(allow_none=True, default=None) facebook_url = fields.String(allow_none=True, default=None) twitter_url = fields.String(allow_none=True, default=None) tiktok_url = fields.String(allow_none=True, default=None) soundcloud_url = fields.String(allow_none=True, default=None) other_url = fields.String(allow_none=True, default=None) voucher_code = fields.String(allow_none=True, default=None) language = fields.String( allow_none=True, default='en', validate=lambda val: val.lower() in consts.ALLOWED_LANGUAGES, error_messages={ 'validator_failed': 'Value should be "en", "de", "es", ' '"fr", "it", "ja", "ko", "pt", "ru", ' '"tr", "zh-cn", "zh-tw"' } ) external_test = fields.Boolean(default=False) environment = fields.String(default=config.ENVIRONMENT) currency = fields.String( required=True, validate=lambda val: val.upper() in consts.ALLOWED_CURRENCIES, error_messages={ 'validator_failed': f'Value should be one of {",".join(consts.ALLOWED_CURRENCIES)}.' } ) signing_entity = fields.String( required=True, validate=lambda val: val.upper() in consts.ALLOWED_SIGNING_ENTITIES, error_messages={ 'validator_failed': f'Value should be one of' f' {",".join(consts.ALLOWED_SIGNING_ENTITIES)}.' } ) # output message fields record_type_id = fields.String() correlation_id = fields.String() kafka_message_headers = fields.Dict() @post_dump def convert_case(self, data: dict, **kwargs) -> dict: """Convert all field names to PascalCase.""" converted = {} for k, v in data.items(): key = stringcase.pascalcase(k) # All custom SalesForce fields should have a __c suffix if key not in consts.SALESFORCE_NATIVE_FIELDS: key += consts.SALESFORCE_CUSTOM_FIELD_SUFFIX converted[key] = v return converted