コード例 #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
ファイル: swagger.py プロジェクト: zaarab001/apistar
    def get_link(self, base_url, path, path_info, operation, operation_info,
                 schema_definitions):
        """
        Return a single link in the document.
        """
        name = operation_info.get('operationId')
        title = operation_info.get('summary')
        description = operation_info.get('description')

        if name is None:
            name = _simple_slugify(title)
            if not name:
                return None

        # Parameters are taken both from the path info, and from the operation.
        parameters = path_info.get('parameters', [])
        parameters += operation_info.get('parameters', [])

        fields = [
            self.get_field(parameter, schema_definitions)
            for parameter in parameters
        ]

        default_encoding = None
        if any([field.location == 'body' for field in fields]):
            default_encoding = 'application/json'
        elif any([field.location == 'formData' for field in fields]):
            default_encoding = 'application/x-www-form-urlencoded'
            form_fields = [
                field for field in fields if field.location == 'formData'
            ]
            body_field = Field(
                name='body',
                location='body',
                schema=validators.Object(properties={
                    field.name:
                    validators.Any() if field.schema is None else field.schema
                    for field in form_fields
                },
                                         required=[
                                             field.name
                                             for field in form_fields
                                             if field.required
                                         ]))
            fields = [
                field for field in fields if field.location != 'formData'
            ]
            fields.append(body_field)

        encoding = lookup(operation_info, ['consumes', 0], default_encoding)

        return Link(name=name,
                    url=urljoin(base_url, path),
                    method=operation,
                    title=title,
                    description=description,
                    fields=fields,
                    encoding=encoding)
コード例 #3
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)
コード例 #4
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)
コード例 #5
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)
コード例 #6
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)
コード例 #7
0
ファイル: client.py プロジェクト: zaarab001/apistar
    def request(self, operation_id: str, **params):
        link = self.lookup_operation(operation_id)

        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)
        try:
            validator.validate(params)
        except exceptions.ValidationError as exc:
            raise exceptions.ClientError(messages=exc.messages) from None

        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)
コード例 #8
0
OPEN_API = validators.Object(
    def_name='OpenAPI',
    title='OpenAPI',
    properties=[
        ('openapi', validators.String()),
        ('info', validators.Ref('Info')),
        ('servers', validators.Array(items=validators.Ref('Server'))),
        ('paths', validators.Ref('Paths')),
        ('components', validators.Ref('Components')),
        ('security', validators.Ref('SecurityRequirement')),
        ('tags', validators.Array(items=validators.Ref('Tag'))),
        ('externalDocs', validators.Ref('ExternalDocumentation')),
    ],
    pattern_properties={
        '^x-': validators.Any(),
    },
    additional_properties=False,
    required=['openapi', 'info'],
    definitions={
        'Info': validators.Object(
            properties=[
                ('title', validators.String()),
                ('description', validators.String(format='textarea')),
                ('termsOfService', validators.String(format='url')),
                ('contact', validators.Ref('Contact')),
                ('license', validators.Ref('License')),
                ('version', validators.String()),
            ],
            pattern_properties={
                '^x-': validators.Any(),
コード例 #9
0
    properties={"$ref": validators.String(pattern="^#/components/responses/")})

SWAGGER = validators.Object(
    def_name="Swagger",
    title="Swagger",
    properties=[
        ("swagger", validators.String()),
        ("info", validators.Ref("Info")),
        ("paths", validators.Ref("Paths")),
        ("host", validators.String()),
        ("basePath", validators.String()),
        ("schemes", validators.Array(items=validators.String())),
        ("consumes", validators.Array(items=validators.String())),
        ("produces", validators.Array(items=validators.String())),
        ("definitions",
         validators.Object(additional_properties=validators.Any())),
        (
            "parameters",
            validators.Object(
                additional_properties=validators.Ref("Parameters")),
        ),
        (
            "responses",
            validators.Object(
                additional_properties=validators.Ref("Responses")),
        ),
        (
            "securityDefinitions",
            validators.Object(
                additional_properties=validators.Ref("SecurityScheme")),
        ),
コード例 #10
0
OPEN_API = validators.Object(
    def_name="OpenAPI",
    title="OpenAPI",
    properties=[
        ("openapi", validators.String()),
        ("info", validators.Ref("Info")),
        ("servers", validators.Array(items=validators.Ref("Server"))),
        ("paths", validators.Ref("Paths")),
        ("components", validators.Ref("Components")),
        ("security",
         validators.Array(items=validators.Ref("SecurityRequirement"))),
        ("tags", validators.Array(items=validators.Ref("Tag"))),
        ("externalDocs", validators.Ref("ExternalDocumentation")),
    ],
    pattern_properties={"^x-": validators.Any()},
    additional_properties=False,
    required=["openapi", "info", "paths"],
    definitions={
        "Info":
        validators.Object(
            properties=[
                ("title", validators.String()),
                ("description", validators.String(format="textarea")),
                ("termsOfService", validators.String(format="url")),
                ("contact", validators.Ref("Contact")),
                ("license", validators.Ref("License")),
                ("version", validators.String()),
            ],
            pattern_properties={"^x-": validators.Any()},
            additional_properties=False,
コード例 #11
0
class DataIn(types.Type):
    name = validators.String(max_length=100)
    request_id = validators.Any()
    payload = validators.String()
コード例 #12
0
class SuperHero(types.Type):
    id = validators.Integer(allow_null=True)
    name = validators.String(allow_null=True)
    ID = validators.Any(allow_null=True)
    ALIGN = validators.Any(allow_null=True)
    ALIVE = validators.Any(allow_null=True)
コード例 #13
0
ファイル: blockchain.py プロジェクト: jorgewqs/blockchain-1
class BlockType(types.Type):
    index = validators.Integer()
    timestamp = validators.DateTime()
    data = validators.Any()
    previous_hash = validators.String()
    hash = validators.String()
コード例 #14
0
ファイル: openapi.py プロジェクト: wuzechuan/apistar
     ('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())
                 # TODO 'examples', 'encoding'
コード例 #15
0
ファイル: openapi.py プロジェクト: rhelms/apistar
OPEN_API = validators.Object(
    def_name='OpenAPI',
    title='OpenAPI',
    properties=[
        ('openapi', validators.String()),
        ('info', validators.Ref('Info')),
        ('servers', validators.Array(items=validators.Ref('Server'))),
        ('paths', validators.Ref('Paths')),
        ('components', validators.Ref('Components')),
        ('security', validators.Array(items=validators.Ref('SecurityRequirement'))),
        ('tags', validators.Array(items=validators.Ref('Tag'))),
        ('externalDocs', validators.Ref('ExternalDocumentation')),
    ],
    pattern_properties={
        '^x-': validators.Any(),
    },
    additional_properties=False,
    required=['openapi', 'info', 'paths'],
    definitions={
        'Info': validators.Object(
            properties=[
                ('title', validators.String()),
                ('description', validators.String(format='textarea')),
                ('termsOfService', validators.String(format='url')),
                ('contact', validators.Ref('Contact')),
                ('license', validators.Ref('License')),
                ('version', validators.String()),
            ],
            pattern_properties={
                '^x-': validators.Any(),
コード例 #16
0
    properties={'$ref': validators.String(pattern='^#/components/responses/')})

SWAGGER = validators.Object(
    def_name='Swagger',
    title='Swagger',
    properties=[
        ('swagger', validators.String()),
        ('info', validators.Ref('Info')),
        ('paths', validators.Ref('Paths')),
        ('host', validators.String()),
        ('basePath', validators.String()),
        ('schemes', validators.Array(items=validators.String())),
        ('consumes', validators.Array(items=validators.String())),
        ('produces', validators.Array(items=validators.String())),
        ('definitions',
         validators.Object(additional_properties=validators.Any())),
        ('parameters',
         validators.Object(
             additional_properties=validators.Ref('Parameters'))),
        ('responses',
         validators.Object(additional_properties=validators.Ref('Responses'))),
        ('securityDefinitions',
         validators.Object(
             additional_properties=validators.Ref('SecurityScheme'))),
        ('security',
         validators.Array(items=validators.Ref('SecurityRequirement'))),
        ('tags', validators.Array(items=validators.Ref('Tag'))),
        ('externalDocs', validators.Ref('ExternalDocumentation')),
    ],
    pattern_properties={
        '^x-': validators.Any(),
コード例 #17
0
ファイル: swagger.py プロジェクト: zaarab001/apistar
    properties={'$ref': validators.String(pattern='^#/responses/')})

SWAGGER = validators.Object(
    def_name='Swagger',
    title='Swagger',
    properties=[
        ('swagger', validators.String()),
        ('info', validators.Ref('Info')),
        ('paths', validators.Ref('Paths')),
        ('host', validators.String()),
        ('basePath', validators.String()),
        ('schemes', validators.Array(items=validators.String())),
        ('consumes', validators.Array(items=validators.String())),
        ('produces', validators.Array(items=validators.String())),
        ('definitions',
         validators.Object(additional_properties=validators.Any())),
        ('parameters',
         validators.Object(
             additional_properties=validators.Ref('Parameters'))),
        ('responses',
         validators.Object(additional_properties=validators.Ref('Responses'))),
        ('securityDefinitions',
         validators.Object(
             additional_properties=validators.Ref('SecurityScheme'))),
        ('security',
         validators.Array(items=validators.Ref('SecurityRequirement'))),
        ('tags', validators.Array(items=validators.Ref('Tag'))),
        ('externalDocs', validators.Ref('ExternalDocumentation')),
    ],
    pattern_properties={
        '^x-': validators.Any(),