Usage

Basic

EasyRpcServer

# server.py
from fastapi import FastAPI
from easyrpc.server import EasyRpcServer

server = FastAPI()

rpc_server = EasyRpcServer(
    server, 
    '/ws/server_a',
    server_secret='abcd1234'
)

@rpc_server.origin(namespace='database')
async def get_data_from_db(key):
    return await db.select('*', where={'name': key})
# start server
uvicorn --host 0.0.0.0 --port 8090 server:server

EasyRpcProxy

# client.py
import asyncio
from easyrpc.proxy import EasyRpcProxy

async def main():
    proxy = await EasyRpcProxy.create(
        '0.0.0.0', 
        8090, 
        '/ws/server_a', 
        server_secret='abcd1234',
        namespace='database'
    )

    get_data_from_db = proxy['get_data_from_db']
    result = await get_data_from_db('foo')
    print(result)

asyncio.run(main())

Multiple Namespaces

EasyRpcServer

# server.py
from fastapi import FastAPI
from easyrpc.server import EasyRpcServer

server = FastAPI()

easy_server = EasyRpcServer(server, '/ws/easy', server_secret='abcd1234')

@easy_server.origin(namespace='private')
def private_function(a, b, c):
    print(f"private_function {a} {b} {c}")
    return {"private_function": [a, b, c]}

@easy_server.origin(namespace='public')
def public_func(a, b, c):
    print(f"public_func {a} {b} {c}")
    return {"public_func": [a, b, c]}

@easy_server.origin(namespace='public')
@easy_server.origin(namespace='private')
def open_function(a, **kw):
    print(f"open_function {a} {kw}")
    return {"open_function": [a, kw]}

# start server
uvicorn --host 0.0.0.0 --port 8090 server:server

EasyRpcProxy

# client.py
import asyncio
from easyrpc.proxy import EasyRpcProxy

async def main():
    easy_proxy = await EasyRpcProxy.create(
        '0.0.0.0', 
        8220, 
        '/ws/easy', 
        server_secret='abcd1234',
        namespace='private'
    )

    result = await easy_proxy['private_function'](1, 5, 7)
    print(result)

    result = await easy_proxy.proxy_funcs['open_function'](
        1, 
        keyword='value'
    )
    print(result)

    print(easy_proxy.proxy_funcs)

asyncio.run(main())

Output

# Start server
$ uvicorn --host 0.0.0.0 --port 8220 bsc_server:server
11-06 22:10 EasyRpc-server /ws/easy WARNING  ORIGIN - registered function private_function in private namespace
11-06 22:10 EasyRpc-server /ws/easy WARNING  ORIGIN - registered function public_func in public namespace
11-06 22:10 EasyRpc-server /ws/easy WARNING  ORIGIN - registered function open_function in private namespace
11-06 22:10 EasyRpc-server /ws/easy WARNING  ORIGIN - registered function open_function in public namespace
# Client
$ python client.py
{'private_function': [1, 5, 7]}
{'open_function': [1, {'keyword': 'value'}]}
{'private_function': <function create_proxy_from_config.<locals>.__proxy__ at 0x7fa0be5b4dd0>, 'open_function': <function create_proxy_from_config.<locals>.__proxy__ at 0x7fa0bdf3f050>}