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()
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)
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, )
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)),
"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,
def get_validator(self, **kwargs) -> typesystem.Field: return typesystem.Any(**kwargs)