From b646e66972e0b9b4f72973e618c45dd05ee30e92 Mon Sep 17 00:00:00 2001 From: lukasheinrich Date: Wed, 18 Oct 2017 12:12:03 -0500 Subject: [PATCH] python-based proxy deserialization --- packtivity/backendutils.py | 26 +++++++++++++++++++------- packtivity/statecontexts/__init__.py | 4 ++++ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/packtivity/backendutils.py b/packtivity/backendutils.py index 83294f0..75062d5 100644 --- a/packtivity/backendutils.py +++ b/packtivity/backendutils.py @@ -9,8 +9,27 @@ def load_proxy(jsondata, deserialization_opts = None, best_effort_backend = True, raise_on_unknown = False): + log.debug('load_proxy opts %s', deserialization_opts) deserialization_opts = deserialization_opts or {} proxy, backend = None, None + + if 'proxy' in deserialization_opts: + proxystring = deserialization_opts.pop('proxy') + if proxystring.startswith('py:'): + _, module, proxyclass = proxystring.split(':') + module = importlib.import_module(module) + proxyclass = getattr(module,proxyclass) + proxyopts = {} + return proxyclass.fromJSON(jsondata,**proxyopts) + + if 'PACKTIVITY_ASYNCBACKEND' in os.environ: + module, _, proxyclass = os.environ['PACKTIVITY_ASYNCBACKEND'].split(':') + module = importlib.import_module(module) + proxyclass = getattr(module,proxyclass) + proxy = proxyclass.fromJSON(jsondata) + if best_effort_backend: + _, backend = backend_from_string('fromenv') + if jsondata['proxyname'] == 'CeleryProxy': from .asyncbackends import CeleryProxy proxy = CeleryProxy.fromJSON(jsondata) @@ -28,13 +47,6 @@ def load_proxy(jsondata, deserialization_opts = None, best_effort_backend = True if best_effort_backend: _, backend = backend_from_string('foregroundasync') - if 'PACKTIVITY_ASYNCBACKEND' in os.environ: - module, _, proxyclass = os.environ['PACKTIVITY_ASYNCBACKEND'].split(':') - module = importlib.import_module(module) - proxyclass = getattr(module,proxyclass) - proxy = proxyclass.fromJSON(jsondata) - if best_effort_backend: - _, backend = backend_from_string('fromenv') if not proxy and raise_on_unknown: raise RuntimeError('unknown proxy type: %s', jsondata['proxyname']) if best_effort_backend: diff --git a/packtivity/statecontexts/__init__.py b/packtivity/statecontexts/__init__.py index 2052392..12a8c53 100644 --- a/packtivity/statecontexts/__init__.py +++ b/packtivity/statecontexts/__init__.py @@ -1,7 +1,10 @@ import os import importlib +import logging from .posixfs_context import LocalFSState,LocalFSProvider +log = logging.getLogger(__name__) + def load_state(jsondata): if jsondata['state_type'] == 'localfs': return LocalFSState.fromJSON(jsondata) @@ -11,6 +14,7 @@ def load_state(jsondata): raise TypeError('unknown state type {}'.format(jsondata['state_type'])) def load_provider(jsondata,deserialization_opts = None): + log.debug('load_provider opts %s', deserialization_opts) deserialization_opts = deserialization_opts or {} if jsondata == None: return None