From 699fec023a9d18b7e15fe9fc8761921366ed12d1 Mon Sep 17 00:00:00 2001 From: max-orlov Date: Thu, 30 Mar 2017 17:36:47 +0300 Subject: [PATCH] fixes --- aria/modeling/__init__.py | 2 ++ aria/modeling/utils.py | 14 ++++++++++++++ aria/orchestrator/context/common.py | 2 +- .../execution_plugin/ctx_proxy/server.py | 3 ++- 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/aria/modeling/__init__.py b/aria/modeling/__init__.py index 4dfc39df..4ac79e73 100644 --- a/aria/modeling/__init__.py +++ b/aria/modeling/__init__.py @@ -19,6 +19,7 @@ mixins, types, models, + utils, service_template as _service_template_bases, service_instance as _service_instance_bases, service_changes as _service_changes_bases, @@ -45,4 +46,5 @@ 'types', 'models', 'model_bases', + 'utils' ) diff --git a/aria/modeling/utils.py b/aria/modeling/utils.py index a0caa681..e3a2700f 100644 --- a/aria/modeling/utils.py +++ b/aria/modeling/utils.py @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +from json import JSONEncoder from StringIO import StringIO from . import exceptions @@ -24,6 +25,19 @@ from ..utils.conversion import convert_value_to_type +class ModelJSONEncoder(JSONEncoder): + def default(self, o): + from .mixins import ModelMixin + if isinstance(o, ModelMixin): + if hasattr(o, 'value'): + dict_to_return = o.to_dict(fields=('value',)) + return dict_to_return['value'] + else: + return o.to_dict() + else: + return JSONEncoder.default(self, o) + + def create_inputs(inputs, template_inputs): """ :param inputs: key-value dict diff --git a/aria/orchestrator/context/common.py b/aria/orchestrator/context/common.py index 06e283c5..3861982b 100644 --- a/aria/orchestrator/context/common.py +++ b/aria/orchestrator/context/common.py @@ -195,7 +195,7 @@ def get_resource(self, path=None): try: return self.resource.service.read(entry_id=str(self.service.id), path=path) except exceptions.StorageError: - return self.resource.service.read(entry_id=str(self.service_template.id), path=path) + return self.resource.service_template.read(entry_id=str(self.service_template.id), path=path) def get_resource_and_render(self, path=None, variables=None): """ diff --git a/aria/orchestrator/execution_plugin/ctx_proxy/server.py b/aria/orchestrator/execution_plugin/ctx_proxy/server.py index 817d064a..52a53121 100644 --- a/aria/orchestrator/execution_plugin/ctx_proxy/server.py +++ b/aria/orchestrator/execution_plugin/ctx_proxy/server.py @@ -24,6 +24,7 @@ import wsgiref.simple_server import bottle +from aria import modeling from .. import exceptions @@ -111,7 +112,7 @@ def _process(self, request): result = json.dumps({ 'type': result_type, 'payload': payload - }) + }, cls=modeling.utils.ModelJSONEncoder) except Exception as e: traceback_out = StringIO.StringIO() traceback.print_exc(file=traceback_out)