Source code for pyemit.remote
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Author: Aaron-Yang [code@jieyu.ai]
Contributors:
"""
import json
import logging
import pickle
import uuid
from typing import Any
from pyemit.emit import rpc_send, rpc_respond
logger = logging.getLogger(__name__)
[docs]class Remote(object):
_proto_ = 4
def __init__(self, timeout=10):
self._sn_ = uuid.uuid4().hex
self._ver_ = '0.1'
self._timeout_ = timeout
def __str__(self):
def default(obj):
return obj.__str__()
return json.dumps(self.__dict__, default=default, indent=2)
def __repr__(self):
return f"{self.__class__} 0x{id(self):0x}\n{self.__str__()}"
@property
def sn(self):
return self._sn_
@property
def timeout(self):
return self._timeout_
[docs] @staticmethod
def loads(s) -> 'Remote':
return pickle.loads(s)
[docs] async def invoke(self):
return await rpc_send(self)
[docs] async def server_impl(self):
raise NotImplementedError
[docs] async def respond(self, result: Any):
response = {
'_sn_': self._sn_,
'_data_': pickle.dumps(result, protocol=Remote._proto_)
}
await rpc_respond(response)