herolib_python/_archive/openrpc/model/methods.py
2025-08-05 15:15:36 +02:00

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),
)