X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=common%2Fpython%2Frift%2Fmano%2Fdts%2Frpc%2Fcore.py;h=72016f1943f15d1627a45c28460a7269172310b0;hb=f314b4af9744068a7ed7a6a6314220c3aa857523;hp=dfa08bb69ed17b87cf9e66e3f8f1aa697d0cc7ab;hpb=6f1a3fe149e4a6b9803382cb299c902f4cf58ec9;p=osm%2FSO.git diff --git a/common/python/rift/mano/dts/rpc/core.py b/common/python/rift/mano/dts/rpc/core.py index dfa08bb6..72016f19 100644 --- a/common/python/rift/mano/dts/rpc/core.py +++ b/common/python/rift/mano/dts/rpc/core.py @@ -36,8 +36,8 @@ from ..core import DtsHandler class AbstractRpcHandler(DtsHandler): """Base class to simplify RPC implementation """ - def __init__(self, log, dts, loop): - super().__init__(log, dts, loop) + def __init__(self, log, dts, loop, project=None): + super().__init__(log, dts, loop, project) if not asyncio.iscoroutinefunction(self.callback): raise ValueError('%s has to be a coroutine' % (self.callback)) @@ -61,6 +61,9 @@ class AbstractRpcHandler(DtsHandler): def on_prepare(self, xact_info, action, ks_path, msg): assert action == rwdts.QueryAction.RPC + if self.project and not self.project.rpc_check(msg, xact_info=xact_info): + return + try: rpc_op = yield from self.callback(ks_path, msg) xact_info.respond_xpath( @@ -76,6 +79,11 @@ class AbstractRpcHandler(DtsHandler): @asyncio.coroutine def register(self): + if self.reg: + self._log.warning("RPC already registered for project {}". + format(self._project.name)) + return + reg_event = asyncio.Event(loop=self.loop) @asyncio.coroutine @@ -94,6 +102,10 @@ class AbstractRpcHandler(DtsHandler): yield from reg_event.wait() + def deregister(self): + self.reg.deregister() + self.reg = None + @abc.abstractmethod @asyncio.coroutine def callback(self, ks_path, msg):