Source code for ebonite.ext.flask.client

import requests

from ebonite.runtime.client.base import BaseClient
from ebonite.runtime.interface.base import ExecutionError, InterfaceDescriptor


[docs]class HTTPClient(BaseClient): """ Simple implementation of HTTP-based Ebonite runtime client. Interface definition is acquired via HTTP GET call to `/interface.json`, method calls are performed via HTTP POST calls to `/<name>`. :param host: host of server to connect to, if no host given connects to host `localhost` :param port: port of server to connect to, if no port given connects to port 9000 """ def __init__(self, host=None, port=None): self.base_url = f'http://{host or "localhost"}:{port or 9000}' super().__init__() def _interface_factory(self) -> InterfaceDescriptor: resp = requests.get(f'{self.base_url}/interface.json') resp.raise_for_status() return InterfaceDescriptor.from_dict(resp.json()) def _call_method(self, name, args): ret = requests.post(f'{self.base_url}/{name}', json=args) if ret.status_code == 200: return ret.json()['data'] elif ret.status_code == 400: raise ExecutionError(ret.json()['error']) # TODO tests else: ret.raise_for_status()