"""Schema for kyc notification parameters.""" from abacus_common_logic.marshalling.custom_fields import ma from marshmallow import post_dump, validate from marshmallow_oneofschema import OneOfSchema from payee.models.payee_kyc_notification import ( AccountPayeeKycNotification, PayeeKycNotification, ) from payee.schemas.dataloader import DataloaderOutputSchema class BaseKycNotificationSchema(ma.Schema): file_upload_link = ma.String( required=True, validate=validate.Length(min=1, max=1000) ) requirement_id = ma.String( required=False, validate=validate.Length(min=1, max=1000) ) requirement_type_id = ma.IntegerId(required=False) sub_requirement_id = ma.String( required=False, validate=validate.Length(min=1, max=1000) ) possible_sub_requirement_types = ma.String( required=False, validate=validate.Length(min=1, max=1000) ) sub_requirement_status_id = ma.IntegerId(required=False) entity_reference_id = ma.String( required=False, validate=validate.Length(min=1, max=36) ) entity_reference_type_id = ma.IntegerId(required=False) class BaseKycNotificationOutputSchema(BaseKycNotificationSchema): created_at = ma.DateTime(required=False) last_modified = ma.DateTime(required=False) created_by = ma.String(required=False) last_modified_by = ma.String(required=False) class AccountPayeeKycNotificationSchema(BaseKycNotificationSchema): pass class AccountPayeeKycNotificationOutputSchema(BaseKycNotificationOutputSchema): account_payee_kyc_notification_id = ma.IntegerId(required=True) account_payee_id = ma.IntegerId(required=True) class PayeeKycNotificationSchema(BaseKycNotificationSchema): pass class PayeeKycNotificationOutputSchema(BaseKycNotificationOutputSchema): payee_kyc_notification_id = ma.IntegerId(required=True) payee_id = ma.IntegerId(required=True) class PayeeKycNotificationOutputMapSchema(OneOfSchema): type_schemas = { 'payee': PayeeKycNotificationOutputSchema, 'account_payee': AccountPayeeKycNotificationOutputSchema, } def get_obj_type(self, obj): if isinstance(obj, PayeeKycNotification): return 'payee' if isinstance(obj, AccountPayeeKycNotification): return 'account_payee' raise Exception('Unknown object type: {}'.format(repr(obj))) class PayeeKycNotificationDataloaderSchema(ma.Schema): """Payee kyc notification dataloader schema.""" payee_ids = ma.List(ma.IntegerId(), required=True) class PayeeKycNotificationEntryDataloaderOutputSchema(DataloaderOutputSchema): data = ma.Nested(PayeeKycNotificationOutputSchema, required=False) error = ma.String(required=False) class PayeeKycNotificationDataloaderOutputSchema(ma.Schema): """Payee kyc notification dataloader output schema.""" payee_kyc_notifications = ma.List( ma.Nested(PayeeKycNotificationEntryDataloaderOutputSchema), required=True )