o ?c5@sdZddlZddlZddlmZddlmZddlmZmZddZ dd Z d d Z Gd d d Z GdddZ GdddZdS)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 ----------------- N)datetime)ParamValidationError)is_json_value_headerparse_to_aware_datetimecCs,t}|||}|rt|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)paramsshape validatorrrl/private/var/folders/cw/wlscbxl13mj6wd668h7l9g9sllkg5j/T/pip-target-b31awkwq/lib/python/botocore/validate.pyvalidate_parameterss  rcsfdd}|S)Ncsfdd}fdd|S)Ncs |||r|||||SdSNrselfparamr errorsname _type_checkfuncrr_on_passes_type_check4s zKtype_check.._create_type_check_guard.._on_passes_type_checkcs2t|sddD}|j|d||ddSdS)NcSg|]}t|qSrstr.0trrr :zUtype_check.._create_type_check_guard.._type_check.. invalid typer valid_typesFT) isinstancer)rrrvalid_type_namesr&rrr8s zAtype_check.._create_type_check_guard.._type_checkr)rrr)rr_create_type_check_guard3s  z,type_check.._create_type_check_guardr)r&r*rr)r type_check2s r+cCsrd}td}d|jvr|jd}||krd}nt|dr*|jdr*d}||kr*d}|r7|j||||ddSdS) NFz-infminT serializationZ hostLabel)r min_allowed)floatmetadatahasattrr-getr)rvaluer error_typerfailedr/rrr range_checkIs    r7c@s<eZdZddZddZddZddZd d Zd d Zd S)ValidationErrorscCs g|_dSr_errorsrrrr__init__[s zValidationErrors.__init__cCs|jrdSdSNTFr9r;rrrr ^szValidationErrors.has_errorscCs*g}|jD] }|||qd|S)N )r:append _format_errorjoin)rZerror_messageserrorrrrr cs  z ValidationErrors.generate_reportc Cs|\}}}||}|dkrd|d|ddS|dkr3|d}d|d }d |d|d |S|d krT|d }t|}d|d} d|d|d|d| S|dkrk|d }|d} d|d|d| S|dkr|d }|d} d|d|d| S|dkrd||dS|dkr|d }t|}d|d} d|d|d|d| S|dkrd|d } d!|d"| d#S|d$krd|d } d%|d&| d#SdS)'Nmissing required fieldzMissing required parameter in z: " required_name" unknown field unknown_paramz, valid_nameszUnknown parameter in z", must be one of: r$rr&zInvalid type for parameter z , value: z, type: z, valid types: invalid ranger/zInvalid value for parameter z, valid min value: invalid lengthzInvalid length for parameter z, valid min length: unable to encode to jsonz2Invalid parameter {} must be json serializable: {} type_errorinvalid type for documentz$Invalid type for document parameter more than one inputmembersz||}|r|||||dSt|d|j||||dS)Nz _validate_%s)rcgetattrra)rr r rrZspecial_validatorrrrr_s zParamValidator._validatec CsLzt|WdSttfy%}z|j|d|dWYd}~dSd}~ww)NrK)rL)jsondumps ValueError TypeErrorr)rr r rrerrrr`s z)ParamValidator._validate_jsonvalue_stringc Cs|durdSt|tr|D] }||||||q dSt|tr8t|D]\}}||||d||fq%dSt|tftttfs_ttttttf}dd|D} |j |d|t || ddSdS)Nz%s[%d]cSrrrrrrrr"r#z5ParamValidator._validate_document..rM)rrVr&) r'dictrblist enumeraterintboolr0rrS) rr r rrkeyindexentityr&r(rrrrbs.   z!ParamValidator._validate_documentr)c Cs|jr"t|dkr|j|d|jdnt|dkr"|j|d|jd|jdgD]}||vr8|j|d||dq)|j}g}|D]}||vrR|j|d |t|d q@||q@|D]}||||j|||d |qZdS) NrrQ)rOr.rNrequiredrC)rDZ user_paramsrF)rGrHrP) Zis_tagged_unionlenrrOr1r3rkr?r_) rr r rrZrequired_memberrOZ known_paramsrrrr_validate_structuresF    z"ParamValidator._validate_structurecCst|t||d|dS)NrJ)r7rsrrrr_validate_string!s zParamValidator._validate_stringc CsL|j}t|t||d|t|D]\}}|||||d|dqdS)NrJ[])memberr7rsrlr_)rrr rrZ member_shapeiitemrrr_validate_list-s zParamValidator._validate_listc CsX|j}|j}|D]\}}|||||d|d|||||d|q dS)Nz (key: )rP)ror4itemsr_) rrr rrZ key_shapeZ value_shaperor4rrr _validate_map4s zParamValidator._validate_mapcCt|||d|dSNrIr7rrrr_validate_integer<z ParamValidator._validate_integercCsFt|tttfr dSt|drdS|j|d|ttttdgddS)Nreadr$zfile-like objectr%)r'bytes bytearrayrr2rrrrr_validate_blob@s  zParamValidator._validate_blobcCsdSrrrrrr_validate_booleanNsz ParamValidator._validate_booleancCrrrrrrr_validate_doubleRrzParamValidator._validate_doublecCrrrrrrr_validate_longXrzParamValidator._validate_longcCs4||}|sttdg}|j|d||ddSdS)Nztimestamp-stringr$r%)_type_check_datetimerrr)rrr rrZ is_valid_typer(rrr_validate_timestamp\s   z"ParamValidator._validate_timestampc Cs*zt|WdStttfyYdSwr=)rrhrgAttributeError)rr4rrrrgs z#ParamValidator._type_check_datetimeN)r[r\r]__doc__r rcr_r`rbr+rjrtrrurktupler{r~rmrrrnrr0decimalDecimalrZ_validate_floatrrrrrrrrs6    (            rc@seZdZddZddZdS)ParamValidationDecoratorcCs||_||_dSr)_param_validator _serializer)rZparam_validator serializerrrrr<rs z!ParamValidationDecorator.__init__cCsB|j}|dur|j||j}|rt|d|j||S)Nr) input_shaperr r rr rserialize_to_request)r parametersZoperation_modelrrrrrrvsz-ParamValidationDecorator.serialize_to_requestN)r[r\r]r<rrrrrrqs r)rrrerZbotocore.exceptionsrZbotocore.utilsrrrr+r7r8rrrrrrs  [=