Add barebone files for rest section.

This commit is contained in:
Davide Casale
2022-11-30 18:25:15 +01:00
parent 48f1745f10
commit 4cfeab8a79
9 changed files with 67 additions and 1 deletions

View File

@@ -0,0 +1,12 @@
import requests
from . import serializers
from .typings import PlatformStatus
class BfxRestInterface(object):
def __init__(self, host):
self.host = host
def platform_status(self) -> PlatformStatus:
return serializers.PlatformStatus.parse(
*requests.get(f"{self.host}/platform/status").json()
)

1
bfxapi/rest/__init__.py Normal file
View File

@@ -0,0 +1 @@
from .BfxRestInterface import BfxRestInterface

View File

@@ -0,0 +1,6 @@
class BfxRestException(Exception):
"""
Base class for all exceptions defined in bfxapi/rest/exceptions.py.
"""
pass

View File

@@ -0,0 +1,30 @@
from typing import Generic, TypeVar, Iterable, List, Any
from . import typings
from .exceptions import BfxRestException
T = TypeVar("T")
class _Serializer(Generic[T]):
def __init__(self, name: str, labels: List[str]):
self.name, self.__labels = name, labels
def __serialize(self, *args: Any, IGNORE: List[str] = [ "_PLACEHOLDER" ]) -> Iterable[T]:
if len(self.__labels) != len(args):
raise BfxRestException("<self.__labels> and <*args> arguments should contain the same amount of elements.")
for index, label in enumerate(self.__labels):
if label not in IGNORE:
yield label, args[index]
def parse(self, *values: Any) -> T:
return dict(self.__serialize(*values))
#region Serializers definition for Rest Public Endpoints
PlatformStatus = _Serializer[typings.PlatformStatus]("PlatformStatus", labels=[
"OPERATIVE"
])
#endregion

9
bfxapi/rest/typings.py Normal file
View File

@@ -0,0 +1,9 @@
from typing import Type, Tuple, List, Dict, TypedDict, Union, Optional, Any
#region Type hinting for Rest Public Endpoints
PlatformStatus = TypedDict("PlatformStatus", {
"OPERATIVE": int
})
#endregion