You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ariatosca.apache.org by em...@apache.org on 2017/08/07 20:13:11 UTC
incubator-ariatosca git commit: Fixes, cleanups,
more tests [Forced Update!]
Repository: incubator-ariatosca
Updated Branches:
refs/heads/ARIA-324-refactor-ctx-access 5b95c26fd -> 1baaedf5c (forced update)
Fixes, cleanups, more tests
Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/1baaedf5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/1baaedf5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/1baaedf5
Branch: refs/heads/ARIA-324-refactor-ctx-access
Commit: 1baaedf5c42fc66ba44e360854456c7e64002b4a
Parents: 607f1dd
Author: Tal Liron <ta...@gmail.com>
Authored: Mon Aug 7 12:05:34 2017 -0500
Committer: Tal Liron <ta...@gmail.com>
Committed: Mon Aug 7 15:12:59 2017 -0500
----------------------------------------------------------------------
.../execution_plugin/ctx_proxy/server.py | 44 ++++++++++----------
.../execution_plugin/test_ctx_proxy_server.py | 22 +++++++---
tests/requirements.txt | 6 +--
tox.ini | 8 ++--
4 files changed, 47 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1baaedf5/aria/orchestrator/execution_plugin/ctx_proxy/server.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/execution_plugin/ctx_proxy/server.py b/aria/orchestrator/execution_plugin/ctx_proxy/server.py
index b248a5d..5f4b72b 100644
--- a/aria/orchestrator/execution_plugin/ctx_proxy/server.py
+++ b/aria/orchestrator/execution_plugin/ctx_proxy/server.py
@@ -121,7 +121,7 @@ class CtxProxy(object):
def _process(self, request):
try:
with self.ctx.model.instrument(*self.ctx.INSTRUMENTATION_FIELDS):
- payload = _parse_request(self.ctx, request)
+ payload = _process_request(self.ctx, request)
result_type = 'result'
if isinstance(payload, exceptions.ScriptException):
payload = dict(message=str(payload))
@@ -146,41 +146,44 @@ class CtxProxy(object):
self.close()
-class ProcessingError(RuntimeError):
+class CtxError(RuntimeError):
pass
-class ParsingError(ProcessingError):
+class CtxParsingError(CtxError):
pass
-def _parse_request(ctx, request):
+def _process_request(ctx, request):
request = json.loads(request)
args = request['args']
- return _parse_arguments(ctx, args)
+ return _process_arguments(ctx, args)
-def _parse_arguments(obj, args):
+def _process_arguments(obj, args):
# Modifying?
try:
# TODO: should there be a way to escape "=" in case it is needed as real argument?
equals_index = args.index('=') # raises ValueError if not found
+ except ValueError:
+ equals_index = None
+ if equals_index is not None:
if equals_index == 0:
- raise ParsingError('The "=" argument cannot be first')
- if equals_index != len(args) - 2:
- raise ParsingError('The "=" argument must be penultimate')
+ raise CtxParsingError('The "=" argument cannot be first')
+ elif equals_index != len(args) - 2:
+ raise CtxParsingError('The "=" argument must be penultimate')
modifying = True
modifying_key = args[-3]
modifying_value = args[-1]
args = args[:-3]
- except ValueError:
+ else:
modifying = False
modifying_key = None
modifying_value = None
# Parse all arguments
while len(args) > 0:
- obj, args = _parse_argument(obj, args, modifying)
+ obj, args = _process_next_operation(obj, args, modifying)
if modifying:
if hasattr(obj, '__setitem__'):
@@ -192,13 +195,12 @@ def _parse_arguments(obj, args):
# Modify object attribute
setattr(obj, modifying_key, modifying_value)
else:
- raise ProcessingError('Cannot modify `{0}` of `{1!r}`'
- .format(modifying_key, obj))
+ raise CtxError('Cannot modify `{0}` of `{1!r}`'.format(modifying_key, obj))
return obj
-def _parse_argument(obj, args, modifying):
+def _process_next_operation(obj, args, modifying):
args = list(args)
arg = args.pop(0)
@@ -207,22 +209,22 @@ def _parse_argument(obj, args, modifying):
# TODO: should there be a way to escape "[" and "]" in case they are needed as real
# arguments?
try:
- closing_index = args.index(']')
+ closing_index = args.index(']') # raises ValueError if not found
except ValueError:
- raise ParsingError('Opening "[" without a closing "]')
+ raise CtxParsingError('Opening "[" without a closing "]')
callable_args = args[:closing_index]
args = args[closing_index + 1:]
if not callable(obj):
- raise ProcessingError('Used "[" and "] on an object that is not callable')
+ raise CtxError('Used "[" and "] on an object that is not callable')
return obj(*callable_args), args
# Attribute?
if isinstance(arg, basestring):
if hasattr(obj, arg):
return getattr(obj, arg), args
- arg_sugared = arg.replace('-', '_')
- if hasattr(obj, arg_sugared):
- return getattr(obj, arg_sugared), args
+ token_sugared = arg.replace('-', '_')
+ if hasattr(obj, token_sugared):
+ return getattr(obj, token_sugared), args
# Item? (dict, lists, and similar)
if hasattr(obj, '__getitem__'):
@@ -230,7 +232,7 @@ def _parse_argument(obj, args, modifying):
obj[arg] = {}
return obj[arg], args
- raise ParsingError('Cannot parse argument: `{0!r}`'.format(arg))
+ raise CtxParsingError('Cannot parse argument: `{0!r}`'.format(arg))
def _get_unused_port():
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1baaedf5/tests/orchestrator/execution_plugin/test_ctx_proxy_server.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/execution_plugin/test_ctx_proxy_server.py b/tests/orchestrator/execution_plugin/test_ctx_proxy_server.py
index 4b92787..94b7409 100644
--- a/tests/orchestrator/execution_plugin/test_ctx_proxy_server.py
+++ b/tests/orchestrator/execution_plugin/test_ctx_proxy_server.py
@@ -73,6 +73,15 @@ class TestCtxProxy(object):
response = self.request(server, 'stub-method', '[', ']')
assert response == []
+ def test_method_return_value(self, server, ctx):
+ response_args = self.request(server, 'node', 'get_prop', '[', 'prop2', ']', 'nested_prop1')
+ assert response_args == 'nested_value1'
+
+ def test_method_return_value_set(self, server, ctx):
+ self.request(
+ server, 'node', 'get_prop', '[', 'prop2', ']', 'nested_prop1', '=', 'new_value')
+ assert ctx.node.properties['prop2']['nested_prop1'] == 'new_value'
+
def test_empty_return_value(self, server):
response = self.request(server, 'stub_none')
assert response is None
@@ -103,6 +112,9 @@ class TestCtxProxy(object):
def __init__(self, properties):
self.properties = properties
+ def get_prop(self, name):
+ return self.properties[name]
+
@staticmethod
def stub_method(*args):
return args
@@ -141,11 +153,11 @@ class TestCtxProxy(object):
}
}
ctx.stub_none = None
- ctx.stub_method = self.stub_method
- ctx.stub_sleep = self.stub_sleep
- ctx.stub_args = self.stub_args
- ctx.stub_attr = self.StubAttribute()
- ctx.node = self.NodeAttribute(properties)
+ ctx.stub_method = TestCtxProxy.stub_method
+ ctx.stub_sleep = TestCtxProxy.stub_sleep
+ ctx.stub_args = TestCtxProxy.stub_args
+ ctx.stub_attr = TestCtxProxy.StubAttribute()
+ ctx.node = TestCtxProxy.NodeAttribute(properties)
ctx.model = mocker.MagicMock()
return ctx
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1baaedf5/tests/requirements.txt
----------------------------------------------------------------------
diff --git a/tests/requirements.txt b/tests/requirements.txt
index d86750b..56a7bf5 100644
--- a/tests/requirements.txt
+++ b/tests/requirements.txt
@@ -16,7 +16,7 @@ sh==1.12.14
psutil==5.2.2
mock==2.0.0
pylint==1.6.5
-pytest==3.1.3
+pytest==3.2.0
pytest-cov==2.5.1
-pytest-mock==1.6.0
-pytest-xdist==1.18.1
+pytest-mock==1.6.2
+pytest-xdist==1.18.2
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1baaedf5/tox.ini
----------------------------------------------------------------------
diff --git a/tox.ini b/tox.ini
index 129c557..ff71e05 100644
--- a/tox.ini
+++ b/tox.ini
@@ -97,14 +97,14 @@ commands=
[testenv:pylint_code]
commands=
pylint aria extensions/aria_extension_tosca/ \
- --rcfile=aria/.pylintrc \
- --disable=fixme,missing-docstring
+ --rcfile=aria/.pylintrc \
+ --disable=fixme,missing-docstring
[testenv:pylint_tests]
commands=
pylint tests \
- --rcfile=tests/.pylintrc \
- --disable=fixme,missing-docstring
+ --rcfile=tests/.pylintrc \
+ --disable=fixme,missing-docstring
[testenv:docs]
install_command=