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 <ma...@gigaspaces.com>
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
"comm...@ariatosca.apache.org" <comm...@ariatosca.apache.org>.

Reply via email to