Exemple #1
0
class JSONRPCResponse(typesystem.Schema):
    jsonrpc = typesystem.String(pattern="2.0", trim_whitespace=False)
    id = typesystem.Union(
        any_of=[
            typesystem.String(allow_null=True, min_length=1, trim_whitespace=False),
            typesystem.Integer(allow_null=True),
        ]
    )
    result = typesystem.Any()
Exemple #2
0
    def request(self, operation_id: str, **params):
        link = self.lookup_operation(operation_id)

        validator = typesystem.Object(
            properties={field.name: typesystem.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 typesystem.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)
Exemple #3
0
    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=typesystem.Object(
                    properties={
                        field.name: typesystem.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,
        )
Exemple #4
0
 typesystem.Reference("Info", definitions=definitions),
 "paths":
 typesystem.Reference("Paths", definitions=definitions),
 "host":
 typesystem.String(),
 "basePath":
 typesystem.String(pattern="^/"),
 "schemes":
 typesystem.Array(items=typesystem.Choice(
     choices=["http", "https", "ws", "wss"])),
 "consumes":
 typesystem.Array(items=typesystem.String()),
 "produces":
 typesystem.Array(items=typesystem.String()),
 "definitions":
 typesystem.Object(additional_properties=typesystem.Any()),
 "parameters":
 typesystem.Object(additional_properties=typesystem.Reference(
     "Parameters", definitions=definitions)),
 "responses":
 typesystem.Object(additional_properties=typesystem.Reference(
     "Responses", definitions=definitions)),
 "securityDefinitions":
 typesystem.Object(additional_properties=typesystem.Reference(
     "SecurityScheme", definitions=definitions)),
 "security":
 typesystem.Array(items=typesystem.Reference("SecurityRequirement",
                                             definitions=definitions)),
 "tags":
 typesystem.Array(
     items=typesystem.Reference("Tag", definitions=definitions)),
Exemple #5
0
        "servers": typesystem.Array(
            items=typesystem.Reference("Server", definitions=definitions)
        ),
        "paths": typesystem.Reference("Paths", definitions=definitions),
        "components": typesystem.Reference("Components", definitions=definitions),
        "security": typesystem.Array(
            items=typesystem.Reference("SecurityRequirement", definitions=definitions)
        ),
        "tags": typesystem.Array(
            items=typesystem.Reference("Tag", definitions=definitions)
        ),
        "externalDocs": typesystem.Reference(
            "ExternalDocumentation", definitions=definitions
        ),
    },
    pattern_properties={"^x-": typesystem.Any()},
    additional_properties=False,
    required=["openapi", "info", "paths"],
)

definitions["Info"] = typesystem.Object(
    properties={
        "title": typesystem.String(allow_blank=True),
        "description": typesystem.Text(allow_blank=True),
        "termsOfService": typesystem.String(format="url"),
        "contact": typesystem.Reference("Contact", definitions=definitions),
        "license": typesystem.Reference("License", definitions=definitions),
        "version": typesystem.String(allow_blank=True),
    },
    pattern_properties={"^x-": typesystem.Any()},
    additional_properties=False,
Exemple #6
0
 def get_validator(self, **kwargs) -> typesystem.Field:
     return typesystem.Any(**kwargs)