92 lines
3.6 KiB
Python
92 lines
3.6 KiB
Python
from typing import Any, Dict, List, Optional, Union
|
|
|
|
from heroserver.openrpc.model.common import (
|
|
ContentDescriptorObject,
|
|
ErrorObject,
|
|
ExamplePairingObject,
|
|
ExternalDocumentationObject,
|
|
ReferenceObject,
|
|
TagObject,
|
|
)
|
|
from heroserver.openrpc.model.server import LinkObject, ServerObject
|
|
|
|
|
|
class MethodObject:
|
|
def __init__(
|
|
self,
|
|
name: str,
|
|
params: List[Union[ContentDescriptorObject, ReferenceObject]],
|
|
result: Union[ContentDescriptorObject, ReferenceObject, None],
|
|
tags: Optional[List[Union[TagObject, ReferenceObject]]] = None,
|
|
summary: Optional[str] = None,
|
|
description: Optional[str] = None,
|
|
externalDocs: Optional[ExternalDocumentationObject] = None,
|
|
deprecated: Optional[bool] = None,
|
|
servers: Optional[List[ServerObject]] = None,
|
|
errors: Optional[List[Union[ErrorObject, ReferenceObject]]] = None,
|
|
links: Optional[List[Union[LinkObject, ReferenceObject]]] = None,
|
|
paramStructure: Optional[str] = None,
|
|
examples: Optional[List[ExamplePairingObject]] = None,
|
|
):
|
|
self.name = name
|
|
self.tags = tags
|
|
self.summary = summary
|
|
self.description = description
|
|
self.externalDocs = externalDocs
|
|
self.params = params
|
|
self.result = result
|
|
self.deprecated = deprecated
|
|
self.servers = servers
|
|
self.errors = errors
|
|
self.links = links
|
|
self.paramStructure = paramStructure
|
|
self.examples = examples
|
|
|
|
@classmethod
|
|
def load(cls, data: Dict[str, Any]) -> "MethodObject":
|
|
return cls(
|
|
name=data["name"],
|
|
tags=(
|
|
[
|
|
(TagObject.load(item) if isinstance(item, dict) and "name" in item else ReferenceObject.load(item))
|
|
for item in data.get("tags", [])
|
|
]
|
|
if "tags" in data
|
|
else None
|
|
),
|
|
summary=data.get("summary"),
|
|
description=data.get("description"),
|
|
externalDocs=(ExternalDocumentationObject.load(data["externalDocs"]) if "externalDocs" in data else None),
|
|
params=[
|
|
(ContentDescriptorObject.load(item) if isinstance(item, dict) and "name" in item else ReferenceObject.load(item))
|
|
for item in data["params"]
|
|
],
|
|
result=(
|
|
ContentDescriptorObject.load(data["result"])
|
|
if isinstance(data["result"], dict) and "name" in data["result"]
|
|
else ReferenceObject.load(data["result"])
|
|
if "result" in data
|
|
else None
|
|
),
|
|
deprecated=data.get("deprecated"),
|
|
servers=([ServerObject.load(item) for item in data.get("servers", [])] if "servers" in data else None),
|
|
errors=(
|
|
[
|
|
(ErrorObject.load(item) if isinstance(item, dict) and "code" in item else ReferenceObject.load(item))
|
|
for item in data.get("errors", [])
|
|
]
|
|
if "errors" in data
|
|
else None
|
|
),
|
|
links=(
|
|
[
|
|
(LinkObject.load(item) if isinstance(item, dict) and "name" in item else ReferenceObject.load(item))
|
|
for item in data.get("links", [])
|
|
]
|
|
if "links" in data
|
|
else None
|
|
),
|
|
paramStructure=data.get("paramStructure"),
|
|
examples=([ExamplePairingObject.load(item) for item in data.get("examples", [])] if "examples" in data else None),
|
|
)
|