aliased methods
Both callbacks and fetchers can contain aliased methods, which means that the methods appear under different names on the remote side. This is particularly useful for fetchers, as it allows multiple fetchers with different names and internal logic to point to a single callback.
calculator_service.py
content:
import logging
from daffi import Global
from daffi.registry import Callback
logging.basicConfig(level=logging.INFO)
class CalculatorService(Callback):
auto_init = True
def calculate_sum(self, num1, num2):
return num1 + num2
if __name__ == '__main__':
Global(init_controller=True, host="localhost", port=8888).join()
calculator_client.py
content:
import logging
from daffi import Global
from daffi.registry import Fetcher, Args
from daffi.decorators import alias
logging.basicConfig(level=logging.INFO)
class CalculatorClient(Fetcher):
def __post_init__(self):
self.multiplier = 2
def calculate_sum(self, num1, num2):
"""Default proxy behavior"""
pass
@alias("calculate_sum")
def calculate_sum_with_multiplier(self, num1, num2):
"""Alias to the same `calculate_sum` callback but with different internal logic"""
num1 *= self.multiplier
num2 *= self.multiplier
return Args(num1, num2)
if __name__ == '__main__':
g = Global(host="localhost", port=8888)
calc_client = CalculatorClient()
result = calc_client.calculate_sum(1, 2)
print(result)
result = calc_client.calculate_sum_with_multiplier(1, 2)
print(result)
g.stop()
Execute in two separate terminals:
python3 calculator_service.py
python3 calculator_client.py
calculator_service.py
content:
import logging
from daffi import Global
from daffi.decorators import callback
logging.basicConfig(level=logging.INFO)
@callback
def calculate_sum(num1, num2):
return num1 + num2
if __name__ == '__main__':
Global(init_controller=True, host="localhost", port=8888).join()
calculator_client.py
content:
import logging
from daffi import Global
from daffi.decorators import fetcher, alias
from daffi.registry import Args
logging.basicConfig(level=logging.INFO)
multiplier = 2
@fetcher
def calculate_sum(num1, num2):
"""Default proxy behavior"""
pass
@fetcher
@alias("calculate_sum")
def calculate_sum_with_multiplier(num1, num2):
"""Alias to the same `calculate_sum` callback but with different internal logic"""
num1 *= multiplier
num2 *= multiplier
return Args(num1, num2)
if __name__ == '__main__':
g = Global(host="localhost", port=8888)
result = calculate_sum(1, 2)
print(result)
result = calculate_sum_with_multiplier(1, 2)
print(result)
g.stop()
Execute in two separate terminals:
python3 calculator_service.py
python3 calculator_client.py
Note
To use UNIX socket instead of TCP for communication, you should remove the host
and port
parameters from
the initialization of the Global object, and optionally include the unix_sock_path
parameter.