U a;,@sdZddlmZddlZddlZddlmZddlmZddlmZddl m Z dd Z d d Z d d Z GdddeZGdddeZGdddeZdS)aQUser input parameter validation. This module handles user input parameter validation against a provided input model. Note that the objects in this module do *not* mutate any arguments. No type version happens here. It is up to another layer to properly convert arguments to any required types. Validation Errors ----------------- )sixN)datetime)parse_to_aware_datetime)is_json_value_header)ParamValidationErrorcCs,t}|||}|r(t|ddS)avValidates input parameters against a schema. This is a convenience function that validates parameters against a schema. You can also instantiate and use the ParamValidator class directly if you want more control. If there are any validation errors then a ParamValidationError will be raised. If there are no validation errors than no exception is raised and a value of None is returned. :param params: The user provided input parameters. :type shape: botocore.model.Shape :param shape: The schema which the input parameters should adhere to. :raise: ParamValidationError reportN)ParamValidatorvalidate has_errorsrgenerate_report)paramsshapeZ validatorrr/Users/jalaguru/Documents/Proserv/artifacts/aws_dms_cdk_automation/aws-dms-cdk-automation/venv/lib/python3.8/site-packages/botocore/validate.pyvalidate_parameterss rcsfdd}|S)Ncsfdd}fdd|S)Ncs |||r|||||SdSNrselfparamrerrorsname _type_checkfuncrr_on_passes_type_check6s zKtype_check.._create_type_check_guard.._on_passes_type_checkcs2t|s.ddD}|j|d||ddSdS)NcSsg|]}t|qSr)r text_type).0trrr <szUtype_check.._create_type_check_guard.._type_check.. invalid typer valid_typesFT) isinstancer)rrrvalid_type_namesr"rrr:s  zAtype_check.._create_type_check_guard.._type_checkr)rrr%rr_create_type_check_guard5s z,type_check.._create_type_check_guardr)r"r&rr%r type_check4s r'cCsnd}td}d|jkr.|jd}||krTd}n&t|drT|jdrTd}||krTd}|rj|j||||ddS) NFz-infminT serializationZ hostLabel)r min_allowed)floatmetadatahasattrr)getr)rvaluer error_typerfailedr+rrr range_checkFs    r3c@s<eZdZddZddZddZddZd d Zd d Zd S)ValidationErrorscCs g|_dSr_errorsrrrr__init__XszValidationErrors.__init__cCs|jr dSdSNTFr5r7rrrr [szValidationErrors.has_errorscCs*g}|jD]}|||q d|S)N )r6append _format_errorjoin)rZerror_messageserrorrrrr `s z ValidationErrors.generate_reportcCs|\}}}||}|dkr,d||dfS|dkrPd||dd|dfS|d krd ||d tt|d d|d fS|d kr|d}d||d |fS|dkr|d}d||d |fS|dkrd||dfSdS)Nmissing required fieldz&Missing required parameter in %s: "%s" required_name unknown fieldz1Unknown parameter in %s: "%s", must be one of: %s unknown_paramz, valid_namesr zCInvalid type for parameter %s, value: %s, type: %s, valid types: %srr" invalid ranger+z>Invalid value for parameter %s, value: %s, valid min value: %sinvalid lengthz@Invalid length for parameter %s, value: %s, valid min length: %sunable to encode to jsonz2Invalid parameter %s must be json serializable: %s type_error) _get_namer=strtype)rr>r1r additionalr+rrrr<fsL     zValidationErrors._format_errorcCs&|sdS|dr|ddS|SdS)Ninput.r*) startswith)rrrrrrHs   zValidationErrors._get_namecKs|j|||fdSr)r6r;)rrreasonkwargsrrrrszValidationErrors.reportN) __name__ __module__ __qualname__r8r r r<rHrrrrrr4Ws r4c@seZdZdZddZddZddZdd Zee fd d d Z ee j d d dZ eeefd ddZee fd ddZee jd ddZddZeefd ddZeeejfe jd ddZeZee jd ddZddZdd Zd!S)"r z+Validates parameters against a shape model.cCst}|j|||dd|S)aValidate parameters against a shape model. This method will validate the parameters against a provided shape model. All errors will be collected before returning to the caller. This means that this method will not stop at the first error, it will return all possible errors. :param params: User provided dict of parameters :param shape: A shape model describing the expected input. :return: A list of errors. )r)r4 _validate)rr rrrrrr szParamValidator.validatecCst|r|jSdSr)r_validate_jsonvalue_string)rrrrr_check_special_validation_casessz.ParamValidator._check_special_validation_casescCs<||}|r|||||nt|d|j||||dS)Nz _validate_%s)rWgetattrZ type_name)rr rrrZspecial_validatorrrrrUs zParamValidator._validatec CsJzt|Wn6ttfk rD}z|j|d|dW5d}~XYnXdS)NrF)rG)jsondumps ValueError TypeErrorr)rr rrrerrrrVsz)ParamValidator._validate_jsonvalue_stringr%c Cs|jdgD]}||kr|j|d||dq|j}g}|D].}||kr`|j|d|t|dq<||q<|D]&}||||j||d||fqpdS)Nrequiredr?)r@Z user_paramsrA)rBrC%s.%s)r-r/rmemberslistr;rU) rr rrrZrequired_memberr`Z known_paramsrrrr_validate_structures&   z"ParamValidator._validate_structurecCst|t||d|dS)NrE)r3lenrrrr_validate_strings zParamValidator._validate_stringc CsH|j}t|t||d|t|D] \}}||||d||fq"dS)NrEz%s[%s])memberr3rc enumeraterU)rrrrrZ member_shapeiitemrrr_validate_listszParamValidator._validate_listc CsR|j}|j}|D]8\}}||||d||f||||d||fqdS)Nz %s (key: %s)r_)keyr0itemsrU) rrrrrZ key_shapeZ value_shaperjr0rrr _validate_maps zParamValidator._validate_mapcCst|||d|dSNrDr3rrrr_validate_integersz ParamValidator._validate_integercCsHt|tttjfrdSt|dr$dS|j|d|ttttdgddS)Nreadr zfile-like objectr!)r#bytes bytearrayrrr.rrIrrrr_validate_blobs   zParamValidator._validate_blobcCsdSrrrrrr_validate_booleansz ParamValidator._validate_booleancCst|||d|dSrmrnrrrr_validate_doubleszParamValidator._validate_doublecCst|||d|dSrmrnrrrr_validate_longszParamValidator._validate_longcCs2||}|s.ttdg}|j|d||ddS)Nztimestamp-stringr r!)_type_check_datetimerrrr)rrrrrZ is_valid_typer$rrr_validate_timestamps   z"ParamValidator._validate_timestampc Cs0zt|WdStttfk r*YdSXdSr9)rr\r[AttributeError)rr0rrrrws z#ParamValidator._type_check_datetimeN)rQrRrS__doc__r rWrUrVr'dictrbr string_typesrdratuplerirl integer_typesrorsboolrtr,decimalDecimalruZ_validate_floatrvrxrwrrrrr s2               r c@seZdZddZddZdS)ParamValidationDecoratorcCs||_||_dSr)_param_validator _serializer)rZparam_validator serializerrrrr8sz!ParamValidationDecorator.__init__cCsB|j}|dk r4|j||j}|r4t|d|j||S)Nr) input_shaperr r rr rserialize_to_request)r parametersZoperation_modelrrrrrrsz-ParamValidationDecorator.serialize_to_requestN)rQrRrSr8rrrrrrsr)rzZbotocore.compatrrrYrZbotocore.utilsrrZbotocore.exceptionsrrr'r3objectr4r rrrrrs     8