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

85 lines
2.2 KiB
Python

from typing import Any, Dict, List, Optional, Union
class ServerVariableObject:
def __init__(
self,
default: str,
enum: Optional[List[str]] = None,
description: Optional[str] = None,
):
self.enum = enum
self.default = default
self.description = description
@classmethod
def load(cls, data: Dict[str, Any]) -> "ServerVariableObject":
return cls(
enum=data.get("enum"),
default=data["default"],
description=data.get("description"),
)
class ServerObject:
def __init__(
self,
name: str,
url: str,
summary: Optional[str] = None,
description: Optional[str] = None,
variables: Optional[Dict[str, ServerVariableObject]] = None,
):
self.name = name
self.url = url
self.summary = summary
self.description = description
self.variables = variables
@classmethod
def load(cls, data: Dict[str, Any]) -> "ServerObject":
variables = (
{
k: ServerVariableObject.load(v)
for k, v in data.get("variables", {}).items()
}
if "variables" in data
else None
)
return cls(
name=data["name"],
url=data["url"],
summary=data.get("summary"),
description=data.get("description"),
variables=variables,
)
class LinkObject:
def __init__(
self,
name: str,
method: str,
params: Dict[str, Any],
description: Optional[str] = None,
summary: Optional[str] = None,
server: Optional[ServerObject] = None,
):
self.name = name
self.description = description
self.summary = summary
self.method = method
self.params = params
self.server = server
@classmethod
def load(cls, data: Dict[str, Any]) -> "LinkObject":
return cls(
name=data["name"],
description=data.get("description"),
summary=data.get("summary"),
method=data["method"],
params=data["params"],
server=ServerObject.load(data["server"]) if "server" in data else None,
)