Пример #1
0
    def resolve(self, parameter: inspect.Parameter,
                path_params: ValidatedPathParams,
                query_params: ValidatedQueryParams):
        params = path_params if (parameter.name
                                 in path_params) else query_params
        has_default = parameter.default is not parameter.empty
        allow_null = parameter.default is None

        param_validator = {
            parameter.empty: validators.Any(),
            str: validators.String(allow_null=allow_null),
            int: validators.Integer(allow_null=allow_null),
            float: validators.Number(allow_null=allow_null),
            bool: validators.Boolean(allow_null=allow_null)
        }[parameter.annotation]

        validator = validators.Object(
            properties=[(parameter.name, param_validator)],
            required=[] if has_default else [parameter.name])

        try:
            params = validator.validate(params, allow_coerce=True)
        except validators.ValidationError as exc:
            raise exceptions.NotFound(exc.detail)
        return params.get(parameter.name, parameter.default)
Пример #2
0
    def resolve(self, route: Route,
                query_params: http.QueryParams) -> ValidatedQueryParams:
        query_fields = route.link.get_query_fields()

        validator = validators.Object(
            properties=[(field.name,
                         field.schema if field.schema else validators.Any())
                        for field in query_fields],
            required=[field.name for field in query_fields if field.required])

        try:
            query_params = validator.validate(query_params, allow_coerce=True)
        except validators.ValidationError as exc:
            raise exceptions.BadRequest(exc.detail)
        return ValidatedQueryParams(query_params)
Пример #3
0
    def resolve(self, route: Route,
                path_params: http.PathParams) -> ValidatedPathParams:
        path_fields = route.link.get_path_fields()

        validator = validators.Object(
            properties=[(field.name,
                         field.schema if field.schema else validators.Any())
                        for field in path_fields],
            required=[field.name for field in path_fields])

        try:
            path_params = validator.validate(path_params, allow_coerce=True)
        except validators.ValidationError as exc:
            raise exceptions.NotFound(exc.detail)
        return ValidatedPathParams(path_params)
Пример #4
0
def decode(struct):
    typestrings = get_typestrings(struct)
    if is_any(typestrings, struct):
        return validators.Any()

    allow_null = False
    if 'null' in typestrings:
        allow_null = True
        typestrings.remove('null')

    if len(typestrings) == 1:
        return load_type(typestrings.pop(), struct, allow_null)
    else:
        items = [
            load_type(typename, struct, False) for typename in typestrings
        ]
        return validators.Union(items=items, allow_null=allow_null)
Пример #5
0
    def request(self, name: str, **params):
        link = self.lookup_link(name)

        validator = validators.Object(
            properties={field.name: validators.Any()
                        for field in link.fields},
            required=[field.name for field in link.fields if field.required],
            additional_properties=False)
        validator.validate(params)

        method = link.method
        url = self.get_url(link, params)
        query_params = self.get_query_params(link, params)
        (content, encoding) = self.get_content_and_encoding(link, params)

        return self.transport.send(method,
                                   url,
                                   query_params=query_params,
                                   content=content,
                                   encoding=encoding)
Пример #6
0
     properties=[
         ('description', validators.String(format='textarea')),
         ('url', validators.String(format='url'))
     ],
     required=['url']
 ),
 'Parameter': validators.Object(
     properties=[
         ('name', validators.String()),
         ('in', validators.String(enum=['query', 'header', 'path', 'cookie'])),
         ('description', validators.String(format='textarea')),
         ('required', validators.Boolean()),
         ('deprecated', validators.Boolean()),
         ('allowEmptyValue', validators.Boolean()),
         ('schema', JSON_SCHEMA | SCHEMA_REF),
         ('example', validators.Any())
         # TODO: Other fields
     ],
     required=['name', 'in']
 ),
 'RequestBody': validators.Object(
     properties=[
         ('description', validators.String()),
         ('content', validators.Object(additional_properties=validators.Ref('MediaType'))),
         ('required', validators.Boolean())
     ]
 ),
 'MediaType': validators.Object(
     properties=[
         ('schema', JSON_SCHEMA | SCHEMA_REF),
         ('example', validators.Any())