This is an automated email from the ASF dual-hosted git repository. mxmrlv pushed a commit to branch ARIA-422-Parsing-CSARs-is-broken in repository https://gitbox.apache.org/repos/asf/incubator-ariatosca.git
commit c2f55dec7da74cfa8328cc8a00877ed415b2ccbf Author: max-orlov <[email protected]> AuthorDate: Mon Dec 4 16:10:25 2017 +0200 ARIA-422 Parsing CSARs is broken --- aria/cli/csar.py | 2 +- aria/orchestrator/workflows/executor/process.py | 17 ++++++++++-- aria/utils/yaml.py | 4 +++ tests/cli/csar.py | 37 +++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/aria/cli/csar.py b/aria/cli/csar.py index ba80bad..5017ab9 100644 --- a/aria/cli/csar.py +++ b/aria/cli/csar.py @@ -77,7 +77,6 @@ def write(service_template_path, destination, logger): logger.debug('Writing new metadata file to {0}'.format(META_FILE)) f.writestr(META_FILE, yaml.dump(metadata, default_flow_style=False)) - class _CSARReader(object): def __init__(self, source, destination, logger): @@ -143,6 +142,7 @@ class _CSARReader(object): raise ValueError('Metadata file {0} is missing from the CSAR'.format(csar_metafile)) self.logger.debug('CSAR metadata file: {0}'.format(csar_metafile)) self.logger.debug('Attempting to parse CSAR metadata YAML') + with open(csar_metafile) as f: self.metadata.update(yaml.load(f, Loader=yaml.SafeLoader)) self.logger.debug('CSAR metadata:{0}{1}'.format(os.linesep, pprint.pformat(self.metadata))) diff --git a/aria/orchestrator/workflows/executor/process.py b/aria/orchestrator/workflows/executor/process.py index 4143127..d4b4514 100644 --- a/aria/orchestrator/workflows/executor/process.py +++ b/aria/orchestrator/workflows/executor/process.py @@ -69,9 +69,17 @@ class ProcessExecutor(base.BaseExecutor): Sub-process task executor. """ - def __init__(self, plugin_manager=None, python_path=None, *args, **kwargs): + def __init__( + self, + plugin_manager=None, + python_path=None, + strict_loading=True, + *args, + **kwargs + ): super(ProcessExecutor, self).__init__(*args, **kwargs) self._plugin_manager = plugin_manager + self._strict_loading = strict_loading # Optional list of additional directories that should be added to # subprocesses python path @@ -173,7 +181,8 @@ class ProcessExecutor(base.BaseExecutor): 'function': ctx.task.function, 'operation_arguments': dict(arg.unwrapped for arg in ctx.task.arguments.itervalues()), 'port': self._server_port, - 'context': ctx.serialization_dict + 'context': ctx.serialization_dict, + 'strict_loading': self._strict_loading, } def _construct_subprocess_env(self, task): @@ -326,6 +335,7 @@ def _main(): function = arguments['function'] operation_arguments = arguments['operation_arguments'] context_dict = arguments['context'] + strict = arguments['strict_loading'] try: ctx = context_dict['context_cls'].instantiate_from_dict(**context_dict['context']) @@ -336,7 +346,7 @@ def _main(): try: messenger.started() task_func = imports.load_attribute(function) - aria.install_aria_extensions() + aria.install_aria_extensions(strict) for decorate in process_executor.decorate(): task_func = decorate(task_func) task_func(ctx=ctx, **operation_arguments) @@ -346,5 +356,6 @@ def _main(): ctx.close() messenger.failed(e) + if __name__ == '__main__': _main() diff --git a/aria/utils/yaml.py b/aria/utils/yaml.py index 4c9c557..0bf58a7 100644 --- a/aria/utils/yaml.py +++ b/aria/utils/yaml.py @@ -48,3 +48,7 @@ except ImportError: finally: from ruamel import yaml # pylint: disable=unused-import + + +# Enables support for writing python unicode class with yaml +yaml.SafeLoader.add_constructor('tag:yaml.org,2002:python/unicode', lambda _, node: node.value) diff --git a/tests/cli/csar.py b/tests/cli/csar.py new file mode 100644 index 0000000..ab8e919 --- /dev/null +++ b/tests/cli/csar.py @@ -0,0 +1,37 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import os + +from aria.cli import csar +from ..helpers import get_resource_uri + + +def _create_archive(tmpdir, mocker): + service_template_dir = get_resource_uri(os.path.join( + 'service-templates', 'tosca-simple-1.0', 'node-cellar', 'node-cellar.yaml')) + csar_path = str(tmpdir.join('csar_archive.csar')) + csar.write(service_template_dir, csar_path, mocker.MagicMock()) + return csar_path + + +def test_create_csar(tmpdir, mocker): + csar_path = _create_archive(tmpdir, mocker) + assert os.path.exists(csar_path) + + +def test_read_csar(tmpdir, mocker): + csar_path = _create_archive(tmpdir, mocker) + csar_reader = csar.read(csar_path) + assert csar_reader -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
