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/11/01 18:11:57 UTC
[9/9] incubator-ariatosca git commit: ARIA-1 Parser test suite
ARIA-1 Parser test suite
This commit additionally fixes many parser bugs revealed by the test
suite, which includes adding validations that were missing.
A new "extensions" tox suite is introduced.
The /tests/parser cases were refactored into /tests/topology and
/tests/extensions.
The Hello World example was fixed and refactored, as it in fact had
invalid TOSCA (it previously passed due to a missing validation).
Parser performance was greatly improved by:
1. Switching to the YAML C library
2. Aggressive caching of parsed presentations
3. The ability to skip importing the TOSCA profile
4. A new deepcopy_fast util
5. A new BlockingExecutor that is much faster for single-threaded use
Unicode is now fully supported for all validation and log message. This
requires the use a unicode (u'' notation) for all .format specs.
Additionally, PyLint comment directives have been standardized by
pushing them to column 100.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/a7c37467
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/a7c37467
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/a7c37467
Branch: refs/heads/ARIA-1-parser-test-suite
Commit: a7c3746738808066dec79a651c2d155e050cdf2a
Parents: b1f03ef
Author: Tal Liron <ta...@gmail.com>
Authored: Thu Aug 17 17:50:27 2017 -0500
Committer: Tal Liron <ta...@gmail.com>
Committed: Wed Nov 1 13:11:33 2017 -0500
----------------------------------------------------------------------
.travis.yml | 20 +-
Makefile | 3 +
README.rst | 53 +-
aria/__init__.py | 4 +-
aria/cli/commands/services.py | 2 +-
aria/cli/utils.py | 4 +-
aria/modeling/functions.py | 2 +-
aria/modeling/mixins.py | 4 +-
aria/modeling/orchestration.py | 2 +-
aria/modeling/service_common.py | 8 +-
aria/modeling/service_instance.py | 2 +-
aria/modeling/service_template.py | 4 +-
aria/modeling/utils.py | 2 +-
aria/orchestrator/context/common.py | 6 +-
aria/orchestrator/context/operation.py | 12 +-
aria/orchestrator/context/workflow.py | 4 +-
aria/orchestrator/decorators.py | 2 +-
aria/orchestrator/execution_plugin/common.py | 12 +-
.../execution_plugin/ctx_proxy/client.py | 4 +-
.../execution_plugin/ctx_proxy/server.py | 10 +-
.../execution_plugin/instantiation.py | 20 +-
aria/orchestrator/execution_plugin/local.py | 4 +-
.../execution_plugin/ssh/operations.py | 46 +-
.../orchestrator/execution_plugin/ssh/tunnel.py | 4 +-
aria/orchestrator/plugin.py | 12 +-
aria/orchestrator/topology/instance_handler.py | 106 +--
aria/orchestrator/topology/template_handler.py | 91 +-
aria/orchestrator/topology/topology.py | 10 +-
aria/orchestrator/workflow_runner.py | 6 +-
aria/orchestrator/workflows/api/task.py | 10 +-
aria/orchestrator/workflows/api/task_graph.py | 8 +-
.../workflows/builtin/execute_operation.py | 2 +-
aria/orchestrator/workflows/core/engine.py | 2 +-
.../workflows/core/events_handler.py | 4 +-
.../workflows/core/graph_compiler.py | 4 +-
aria/orchestrator/workflows/events_logging.py | 18 +-
aria/orchestrator/workflows/exceptions.py | 8 +-
aria/orchestrator/workflows/executor/celery.py | 2 +-
aria/orchestrator/workflows/executor/dry.py | 6 +-
aria/orchestrator/workflows/executor/process.py | 8 +-
aria/orchestrator/workflows/executor/thread.py | 2 +-
aria/parser/consumption/context.py | 6 +-
aria/parser/consumption/inputs.py | 2 +-
aria/parser/consumption/presentation.py | 254 ++++--
aria/parser/consumption/validation.py | 2 +-
aria/parser/loading/file.py | 15 +-
aria/parser/loading/literal.py | 3 +
aria/parser/loading/loader.py | 3 +
aria/parser/loading/location.py | 27 +-
aria/parser/loading/request.py | 14 +-
aria/parser/loading/uri.py | 47 +-
aria/parser/presentation/__init__.py | 14 +-
aria/parser/presentation/context.py | 23 +-
aria/parser/presentation/field_validators.py | 23 +-
aria/parser/presentation/fields.py | 125 +--
aria/parser/presentation/presentation.py | 14 +-
aria/parser/presentation/presenter.py | 8 +-
aria/parser/presentation/source.py | 2 +-
aria/parser/presentation/utils.py | 28 +-
aria/parser/reading/__init__.py | 5 +-
aria/parser/reading/context.py | 3 -
aria/parser/reading/exceptions.py | 6 -
aria/parser/reading/jinja.py | 4 +-
aria/parser/reading/json.py | 2 +-
aria/parser/reading/locator.py | 20 +-
aria/parser/reading/reader.py | 11 +-
aria/parser/reading/source.py | 4 +-
aria/parser/reading/yaml.py | 42 +-
aria/parser/specification.py | 2 +-
aria/parser/validation/issue.py | 22 +-
aria/storage/filesystem_rapi.py | 4 +-
aria/utils/caching.py | 2 +-
aria/utils/collections.py | 31 +-
aria/utils/formatting.py | 2 +-
aria/utils/threading.py | 153 +++-
aria/utils/uris.py | 2 +-
aria/utils/versions.py | 4 +-
.../clearwater/clearwater-single-existing.yaml | 12 +-
examples/hello-world/hello-world.yaml | 34 +-
examples/hello-world/scripts/start.sh | 2 +-
.../use-cases/non-normative-types.yaml | 2 +
.../profiles/aria-1.0/aria-1.0.yaml | 3 +
.../profiles/tosca-simple-1.0/artifacts.yaml | 8 +
.../profiles/tosca-simple-1.0/capabilities.yaml | 12 +
.../profiles/tosca-simple-1.0/data.yaml | 14 +
.../profiles/tosca-simple-1.0/groups.yaml | 1 +
.../profiles/tosca-simple-1.0/interfaces.yaml | 3 +
.../profiles/tosca-simple-1.0/nodes.yaml | 14 +
.../profiles/tosca-simple-1.0/policies.yaml | 5 +
.../tosca-simple-1.0/relationships.yaml | 8 +
.../tosca-simple-nfv-1.0/artifacts.yaml | 1 +
.../tosca-simple-nfv-1.0/capabilities.yaml | 3 +
.../profiles/tosca-simple-nfv-1.0/data.yaml | 10 +
.../profiles/tosca-simple-nfv-1.0/nodes.yaml | 25 +-
.../tosca-simple-nfv-1.0/relationships.yaml | 2 +
.../simple_nfv_v1_0/presenter.py | 4 +-
.../simple_v1_0/__init__.py | 12 +-
.../simple_v1_0/assignments.py | 27 +-
.../simple_v1_0/data_types.py | 111 ++-
.../simple_v1_0/definitions.py | 58 +-
.../aria_extension_tosca/simple_v1_0/misc.py | 18 +-
.../simple_v1_0/modeling/__init__.py | 56 +-
.../simple_v1_0/modeling/capabilities.py | 56 +-
.../simple_v1_0/modeling/copy.py | 2 +-
.../simple_v1_0/modeling/data_types.py | 65 +-
.../simple_v1_0/modeling/functions.py | 135 +--
.../simple_v1_0/modeling/groups.py | 43 +
.../simple_v1_0/modeling/interfaces.py | 160 ++--
.../simple_v1_0/modeling/parameters.py | 45 +-
.../simple_v1_0/modeling/requirements.py | 105 ++-
.../modeling/substitution_mappings.py | 51 +-
.../simple_v1_0/presentation/extensible.py | 2 +-
.../simple_v1_0/presentation/field_getters.py | 22 +-
.../presentation/field_validators.py | 142 ++-
.../simple_v1_0/presentation/types.py | 2 +-
.../simple_v1_0/presenter.py | 6 +-
.../simple_v1_0/templates.py | 23 +-
.../aria_extension_tosca/simple_v1_0/types.py | 52 +-
requirements.in | 2 +-
requirements.txt | 14 +-
setup.py | 4 +-
tests/end2end/test_hello_world.py | 2 +-
tests/extensions/__init__.py | 14 +
.../extensions/aria_extension_tosca/__init__.py | 14 +
.../aria_extension_tosca/aria_v1_0/__init__.py | 14 +
.../aria_v1_0/test_profile.py | 22 +
.../extensions/aria_extension_tosca/conftest.py | 45 +
.../simple_nfv_v1_0/__init__.py | 14 +
.../simple_nfv_v1_0/test_profile.py | 20 +
.../simple_v1_0/__init__.py | 14 +
.../aria_extension_tosca/simple_v1_0/data.py | 82 ++
.../simple_v1_0/functions/__init__.py | 14 +
.../functions/test_function_concat.py | 102 +++
.../functions/test_function_get_artifact.py | 156 ++++
.../functions/test_function_get_input.py | 94 ++
.../test_function_get_nodes_of_type.py | 70 ++
.../test_function_get_operation_output.py | 84 ++
.../functions/test_function_token.py | 119 +++
.../test_functions_modelable_entity.py | 247 +++++
.../simple_v1_0/templates/__init__.py | 14 +
.../simple_v1_0/templates/common/__init__.py | 14 +
.../simple_v1_0/templates/common/test_copy.py | 68 ++
.../templates/common/test_template_interface.py | 914 +++++++++++++++++++
.../common/test_template_parameters.py | 781 ++++++++++++++++
.../test_template_parameters_properties.py | 132 +++
.../templates/common/test_templates.py | 128 +++
.../templates/node_template/__init__.py | 14 +
.../test_node_template_artifacts.py | 307 +++++++
.../test_node_template_directives.py | 77 ++
...est_node_template_node_filter_constraints.py | 346 +++++++
.../test_node_template_node_filters.py | 313 +++++++
.../test_node_template_requirements.py | 853 +++++++++++++++++
.../simple_v1_0/templates/test_group.py | 159 ++++
.../simple_v1_0/templates/test_policy.py | 272 ++++++
.../templates/test_substitution_mappings.py | 449 +++++++++
.../templates/test_topology_template.py | 61 ++
.../simple_v1_0/test_dsl_definitions.py | 47 +
.../simple_v1_0/test_imports.py | 200 ++++
.../simple_v1_0/test_metadata.py | 98 ++
.../simple_v1_0/test_names.py | 57 ++
.../simple_v1_0/test_profile.py | 20 +
.../simple_v1_0/test_repositories.py | 179 ++++
.../simple_v1_0/test_service_template.py | 22 +
.../simple_v1_0/types/__init__.py | 14 +
.../simple_v1_0/types/common/__init__.py | 14 +
.../types/common/test_type_interfaces.py | 469 ++++++++++
.../types/common/test_type_parameters.py | 418 +++++++++
.../common/test_type_parameters_inheritance.py | 114 +++
.../common/test_type_parameters_properties.py | 312 +++++++
.../simple_v1_0/types/common/test_types.py | 185 ++++
.../simple_v1_0/types/node_type/__init__.py | 14 +
.../node_type/test_node_type_capabilities.py | 302 ++++++
.../test_node_type_relationship_interfaces.py | 54 ++
.../node_type/test_node_type_requirements.py | 361 ++++++++
.../simple_v1_0/types/test_artifact_type.py | 74 ++
.../simple_v1_0/types/test_capability_type.py | 85 ++
.../simple_v1_0/types/test_data_type.py | 68 ++
.../simple_v1_0/types/test_group_type.py | 85 ++
.../simple_v1_0/types/test_interface_type.py | 149 +++
.../simple_v1_0/types/test_policy_type.py | 123 +++
.../simple_v1_0/types/test_relationship_type.py | 85 ++
tests/instantiation/__init__.py | 14 -
tests/instantiation/test_configuration.py | 172 ----
tests/mechanisms/__init__.py | 14 +
tests/mechanisms/parsing/__init__.py | 75 ++
tests/mechanisms/parsing/aria.py | 75 ++
tests/mechanisms/utils.py | 71 ++
tests/mechanisms/web_server.py | 84 ++
tests/parser/__init__.py | 14 -
tests/parser/service_templates.py | 86 --
tests/parser/test_reqs_caps.py | 29 -
tests/parser/test_tosca_simple_v1_0/__init__.py | 14 -
.../presentation/__init__.py | 0
.../presentation/test_types.py | 23 -
.../test_tosca_simple_v1_0/test_end2end.py | 112 ---
tests/parser/utils.py | 67 --
tests/requirements.txt | 3 +-
.../node-cellar/node-cellar.yaml | 8 +-
.../types/shorthand-1/shorthand-1.yaml | 23 -
.../types/typequalified-1/typequalified-1.yaml | 23 -
tests/topology/__init__.py | 14 +
tests/topology/service_templates.py | 70 ++
tests/topology/test_configuration.py | 173 ++++
tests/topology/test_end2end.py | 112 +++
tests/topology/test_reqs_caps.py | 29 +
tests/topology/utils.py | 69 ++
tests/utils/test_versions.py | 8 +-
tox.ini | 30 +-
208 files changed, 12164 insertions(+), 1664 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index b264ab3..9bd98d1 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,7 +13,6 @@
# We need to set "sudo: true" in order to use a virtual machine instead of a container, because
# SSH tests fail in the container. See:
# https://docs.travis-ci.com/user/reference/overview/#Virtualization-environments
-
dist: trusty
sudo: true
@@ -24,15 +23,16 @@ python:
env:
# The PYTEST_PROCESSES environment var is used in tox.ini to override the --numprocesses argument
- # for PyTest's xdist plugin. The reason this is necessary is that conventional Travis environments
- # may report a large amount of available CPUs, but they they are greatly restricted. Through trial
- # and error we found that more than 1 process may result in failures.
- - PYTEST_PROCESSES=1 TOX_ENV=pylint_core
- - PYTEST_PROCESSES=1 TOX_ENV=pylint_tests
- - PYTEST_PROCESSES=1 TOX_ENV=core
- - PYTEST_PROCESSES=1 TOX_ENV=e2e
- - PYTEST_PROCESSES=1 TOX_ENV=ssh
- - PYTEST_PROCESSES=1 TOX_ENV=docs
+ # for PyTest's xdist plugin. The reason this is necessary is that the Travis environments may
+ # report a large amount of available CPUs, but they they are greatly restricted. Through trial and
+ # error we found that more than 1 process may result in failures.
+ - PYTEST_PROCESSES=2 TOX_ENV=pylint_core
+ - PYTEST_PROCESSES=2 TOX_ENV=pylint_tests
+ - PYTEST_PROCESSES=2 TOX_ENV=core
+ - PYTEST_PROCESSES=2 TOX_ENV=extensions
+ - PYTEST_PROCESSES=2 TOX_ENV=e2e
+ - PYTEST_PROCESSES=2 TOX_ENV=ssh
+ - PYTEST_PROCESSES=2 TOX_ENV=docs
before_install:
# Create SSH keys for SSH tests
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/Makefile
----------------------------------------------------------------------
diff --git a/Makefile b/Makefile
index e68538e..584ca45 100644
--- a/Makefile
+++ b/Makefile
@@ -31,6 +31,7 @@ clean:
-find . -maxdepth 1 -type f -name '.coverage' -delete
-find . -type f -name '*.pyc' -delete
-find . -type d -name '__pycache__' -prune -exec rm -rf {} \; 2>/dev/null
+ -find . -type d -name '*.egg-info' -exec rm -rf {} \; 2>/dev/null
install:
pip install .[ssh]
@@ -54,10 +55,12 @@ test:
tox -e pylint_core \
-e pylint_tests \
-e core \
+ -e extensions \
-e e2e \
-e ssh \
-e docs
./requirements.txt: ./requirements.in
pip install --upgrade "pip-tools>=1.9.0"
+ rm ./requirements.txt
pip-compile --output-file ./requirements.txt ./requirements.in
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/README.rst
----------------------------------------------------------------------
diff --git a/README.rst b/README.rst
index c905277..42b5fb3 100644
--- a/README.rst
+++ b/README.rst
@@ -63,7 +63,7 @@ and run::
yum install -y python-devel gcc libffi-devel openssl-devel
pip install apache-ariatosca[ssh]
-**Archlinux**::
+**Arch Linux**::
pacman -Syu --noconfirm python2 gcc libffi openssl
pip2 install apache-ariatosca[ssh]
@@ -73,7 +73,7 @@ and run::
# no additional system requirements are needed
pip install apache-ariatosca[ssh]
-**MacOS**::
+**macOS**::
# TODO
@@ -112,26 +112,14 @@ To uninstall and clean your environment, follow these steps::
aria service-templates delete my-service-template
-Contribution
-------------
-
-You are welcome and encouraged to participate and contribute to the ARIA project.
-
-Please see our guide to
-`Contributing to ARIA
-<https://cwiki.apache.org/confluence/display/ARIATOSCA/Contributing+to+ARIA>`__.
-
-Feel free to also provide feedback on the mailing lists (see `Resources <#user-content-resources>`__
-section).
-
-
Resources
---------
-- `ARIA homepage <http://ariatosca.incubator.apache.org/>`__
-- `ARIA wiki <https://cwiki.apache.org/confluence/display/AriaTosca>`__
-- `Issue tracker <https://issues.apache.org/jira/browse/ARIA>`__
-- `ARIA revisions released <https://dist.apache.org/repos/dist/dev/incubator/ariatosca//>`__
+- `Main site <http://ariatosca.incubator.apache.org/>`__
+- `API and CLI documentation <http://ariatosca.incubator.apache.org/docs/html/>`__
+- `Wiki <https://cwiki.apache.org/confluence/display/AriaTosca>`__
+- `Releases <https://dist.apache.org/repos/dist/dev/incubator/ariatosca//>`__
+- `Issue tracker <https://issues.apache.org/jira/browse/ARIA>`__
- Dev mailing list: dev@ariatosca.incubator.apache.org
- User mailing list: user@ariatosca.incubator.apache.org
@@ -150,6 +138,27 @@ License
ARIA is licensed under the
`Apache License 2.0 <https://github.com/apache/incubator-ariatosca/blob/master/LICENSE>`__.
+
+Contribution
+------------
+
+You are welcome and encouraged to participate and contribute to the ARIA project.
+
+Please see our guide to
+`Contributing to ARIA
+<https://cwiki.apache.org/confluence/display/ARIATOSCA/Contributing+to+ARIA>`__.
+
+Feel free to also provide feedback on the mailing lists (see `Resources <#user-content-resources>`__
+section).
+
+
+Code of Conduct
+---------------
+
+The ARIA TOSCA Project follows
+`the Apache Code of Conduct <https://www.apache.org/foundation/policies/conduct.html>`__.
+
+
.. |Build Status| image:: https://img.shields.io/travis/apache/incubator-ariatosca/master.svg
:target: https://travis-ci.org/apache/incubator-ariatosca
.. |Appveyor Build Status| image:: https://img.shields.io/appveyor/ci/ApacheSoftwareFoundation/incubator-ariatosca/master.svg
@@ -165,9 +174,3 @@ ARIA is licensed under the
:target: https://github.com/apache/incubator-ariatosca/pulls
.. |Closed Pull Requests| image:: https://img.shields.io/github/issues-pr-closed-raw/apache/incubator-ariatosca.svg
:target: https://github.com/apache/incubator-ariatosca/pulls?q=is%3Apr+is%3Aclosed
-
-
-Code of Conduct
----------------
-
-The ARIA TOSCA Project follows `The Apache Code of Conduct <https://www.apache.org/foundation/policies/conduct.html>`__.
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/__init__.py
----------------------------------------------------------------------
diff --git a/aria/__init__.py b/aria/__init__.py
index 9fe8b3d..41402f3 100644
--- a/aria/__init__.py
+++ b/aria/__init__.py
@@ -25,8 +25,8 @@ import pkg_resources
aria_package_name = 'apache-ariatosca'
__version__ = pkg_resources.get_distribution(aria_package_name).version
-from .orchestrator.decorators import workflow, operation # pylint: disable=wrong-import-position
-from . import ( # pylint: disable=wrong-import-position
+from .orchestrator.decorators import workflow, operation # pylint: disable=wrong-import-position
+from . import ( # pylint: disable=wrong-import-position
extension,
utils,
parser,
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/cli/commands/services.py
----------------------------------------------------------------------
diff --git a/aria/cli/commands/services.py b/aria/cli/commands/services.py
index 6752899..32622a9 100644
--- a/aria/cli/commands/services.py
+++ b/aria/cli/commands/services.py
@@ -137,7 +137,7 @@ def list(service_template_name,
@aria.pass_logger
def create(service_template_name,
service_name,
- inputs, # pylint: disable=redefined-outer-name
+ inputs, # pylint: disable=redefined-outer-name
model_storage,
resource_storage,
plugin_manager,
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/cli/utils.py
----------------------------------------------------------------------
diff --git a/aria/cli/utils.py b/aria/cli/utils.py
index 697ff37..1b5d666 100644
--- a/aria/cli/utils.py
+++ b/aria/cli/utils.py
@@ -58,7 +58,7 @@ def check_overriding_storage_exceptions(e, model_class, name):
'There already a exists a {model_class} with the same name' \
.format(model_class=model_class, name=name, linesep=os.linesep)
trace = sys.exc_info()[2]
- raise type(e), type(e)(new_message), trace # pylint: disable=raising-non-exception
+ raise type(e), type(e)(new_message), trace # pylint: disable=raising-non-exception
def download_file(url):
@@ -107,7 +107,7 @@ def generate_progress_handler(file_path, action='', max_bar_length=80):
filled_length = min(bar_length, int(round(bar_length * read_bytes / float(total_bytes))))
percents = min(100.00, round(100.00 * (read_bytes / float(total_bytes)), 2))
- bar = '#' * filled_length + '-' * (bar_length - filled_length) # pylint: disable=blacklisted-name
+ bar = '#' * filled_length + '-' * (bar_length - filled_length) # pylint: disable=blacklisted-name
# The \r caret makes sure the cursor moves back to the beginning of the line
sys.stdout.write('\r{0} {1} |{2}| {3}%'.format(action, file_name, bar, percents))
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/modeling/functions.py
----------------------------------------------------------------------
diff --git a/aria/modeling/functions.py b/aria/modeling/functions.py
index 554bbfb..f3f0f22 100644
--- a/aria/modeling/functions.py
+++ b/aria/modeling/functions.py
@@ -66,7 +66,7 @@ class Evaluation(object):
self.final = final
-def evaluate(value, container_holder, report_issues=False): # pylint: disable=too-many-branches
+def evaluate(value, container_holder, report_issues=False): # pylint: disable=too-many-branches
"""
Recursively attempts to call ``__evaluate__``. If an evaluation occurred will return an
:class:`Evaluation`, otherwise it will be ``None``. If any evaluation is non-final, then the
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/modeling/mixins.py
----------------------------------------------------------------------
diff --git a/aria/modeling/mixins.py b/aria/modeling/mixins.py
index d58c25a..eb1ac83 100644
--- a/aria/modeling/mixins.py
+++ b/aria/modeling/mixins.py
@@ -201,7 +201,7 @@ class ParameterMixin(TemplateModelMixin, caching.HasCachedMethods):
@property
@caching.cachedmethod
- def container(self): # pylint: disable=too-many-return-statements,too-many-branches
+ def container(self): # pylint: disable=too-many-return-statements,too-many-branches
"""
The logical container for this parameter, which would be another model: service, node,
group, or policy (or their templates).
@@ -319,7 +319,7 @@ class ParameterMixin(TemplateModelMixin, caching.HasCachedMethods):
type_name = canonical_type_name(value)
if type_name is None:
type_name = full_type_name(value)
- return cls(name=name, # pylint: disable=unexpected-keyword-arg
+ return cls(name=name, # pylint: disable=unexpected-keyword-arg
type_name=type_name,
value=value,
description=description)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/modeling/orchestration.py
----------------------------------------------------------------------
diff --git a/aria/modeling/orchestration.py b/aria/modeling/orchestration.py
index 4d4f0fe..da91295 100644
--- a/aria/modeling/orchestration.py
+++ b/aria/modeling/orchestration.py
@@ -436,7 +436,7 @@ class TaskBase(mixins.ModelMixin):
return self.node or self.relationship
@orm.validates('max_attempts')
- def validate_max_attempts(self, _, value): # pylint: disable=no-self-use
+ def validate_max_attempts(self, _, value): # pylint: disable=no-self-use
"""
Validates that max attempts is either -1 or a positive number.
"""
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/modeling/service_common.py
----------------------------------------------------------------------
diff --git a/aria/modeling/service_common.py b/aria/modeling/service_common.py
index d1f6b00..6ca80ee 100644
--- a/aria/modeling/service_common.py
+++ b/aria/modeling/service_common.py
@@ -22,7 +22,8 @@ ARIA modeling service common module
from sqlalchemy import (
Column,
Text,
- Boolean
+ Boolean,
+ PickleType
)
from sqlalchemy.ext.declarative import declared_attr
@@ -90,7 +91,7 @@ class InputBase(ParameterMixin):
""")
@classmethod
- def wrap(cls, name, value, description=None, required=True): # pylint: disable=arguments-differ
+ def wrap(cls, name, value, description=None, required=True): # pylint: disable=arguments-differ
input = super(InputBase, cls).wrap(name, value, description)
input.required = required
return input
@@ -587,12 +588,11 @@ class MetadataBase(TemplateModelMixin):
:ivar name: name
:vartype name: basestring
:ivar value: value
- :vartype value: basestring
"""
__tablename__ = 'metadata'
- value = Column(Text)
+ value = Column(PickleType)
@property
def as_raw(self):
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/modeling/service_instance.py
----------------------------------------------------------------------
diff --git a/aria/modeling/service_instance.py b/aria/modeling/service_instance.py
index 01c4da9..b0e426c 100644
--- a/aria/modeling/service_instance.py
+++ b/aria/modeling/service_instance.py
@@ -319,7 +319,7 @@ class NodeBase(InstanceModelMixin):
# region one_to_one relationships
@declared_attr
- def host(cls): # pylint: disable=method-hidden
+ def host(cls): # pylint: disable=method-hidden
"""
Node in which we are hosted (can be ``None``).
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/modeling/service_template.py
----------------------------------------------------------------------
diff --git a/aria/modeling/service_template.py b/aria/modeling/service_template.py
index cd0adb4..0933407 100644
--- a/aria/modeling/service_template.py
+++ b/aria/modeling/service_template.py
@@ -1415,7 +1415,7 @@ class InterfaceTemplateBase(TemplateModelMixin):
('name', self.name),
('description', self.description),
('type_name', self.type.name),
- ('inputs', formatting.as_raw_dict(self.inputs)), # pylint: disable=no-member
+ ('inputs', formatting.as_raw_dict(self.inputs)), # pylint: disable=no-member
# TODO fix self.properties reference
('operation_templates', formatting.as_raw_list(self.operation_templates))))
@@ -1714,7 +1714,7 @@ class PluginSpecificationBase(TemplateModelMixin):
return relationship.many_to_one(cls, 'service_template')
@declared_attr
- def plugin(cls): # pylint: disable=method-hidden
+ def plugin(cls): # pylint: disable=method-hidden
"""
Matched plugin.
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/modeling/utils.py
----------------------------------------------------------------------
diff --git a/aria/modeling/utils.py b/aria/modeling/utils.py
index 6e851f2..1b6b375 100644
--- a/aria/modeling/utils.py
+++ b/aria/modeling/utils.py
@@ -35,7 +35,7 @@ class ModelJSONEncoder(JSONEncoder):
# Just here to make sure Sphinx doesn't grab the base constructor's docstring
super(ModelJSONEncoder, self).__init__(*args, **kwargs)
- def default(self, o): # pylint: disable=method-hidden
+ def default(self, o): # pylint: disable=method-hidden
from .mixins import ModelMixin
if isinstance(o, ModelMixin):
if hasattr(o, 'value'):
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/orchestrator/context/common.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/context/common.py b/aria/orchestrator/context/common.py
index 3c5f618..90205fd 100644
--- a/aria/orchestrator/context/common.py
+++ b/aria/orchestrator/context/common.py
@@ -108,9 +108,9 @@ class BaseContext(object):
execution_id=self._execution_id)
def __repr__(self):
- return (
- '{name}(name={self.name}, '
- 'deployment_id={self._service_id}, '
+ return ( # pylint: disable=redundant-keyword-arg
+ u'{name}(name={self.name}, '
+ u'deployment_id={self._service_id}, '
.format(name=self.__class__.__name__, self=self))
@contextmanager
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/orchestrator/context/operation.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/context/operation.py b/aria/orchestrator/context/operation.py
index 8613ec3..7f6612e 100644
--- a/aria/orchestrator/context/operation.py
+++ b/aria/orchestrator/context/operation.py
@@ -40,10 +40,10 @@ class BaseOperationContext(common.BaseContext):
self._register_logger(task_id=self.task.id, level=logger_level)
def __repr__(self):
- details = 'function={task.function}; ' \
- 'operation_arguments={task.arguments}'\
+ details = u'function={task.function}; ' \
+ u'operation_arguments={task.arguments}'\
.format(task=self.task)
- return '{name}({0})'.format(details, name=self.name)
+ return u'{name}({0})'.format(details, name=self.name)
@property
def task(self):
@@ -65,9 +65,9 @@ class BaseOperationContext(common.BaseContext):
"""
if self.task.plugin is None:
return None
- plugin_workdir = '{0}/plugins/{1}/{2}'.format(self._workdir,
- self.service.id,
- self.task.plugin.name)
+ plugin_workdir = u'{0}/plugins/{1}/{2}'.format(self._workdir,
+ self.service.id,
+ self.task.plugin.name)
file.makedirs(plugin_workdir)
return plugin_workdir
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/orchestrator/context/workflow.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/context/workflow.py b/aria/orchestrator/context/workflow.py
index 738d2fd..5a323a6 100644
--- a/aria/orchestrator/context/workflow.py
+++ b/aria/orchestrator/context/workflow.py
@@ -73,7 +73,7 @@ class WorkflowContext(BaseContext):
"""
Iterates over nodes templates.
"""
- key = 'service_{0}'.format(self.model.node_template.model_cls.name_column_name())
+ key = u'service_{0}'.format(self.model.node_template.model_cls.name_column_name())
return self.model.node_template.iter(
filters={
@@ -86,7 +86,7 @@ class WorkflowContext(BaseContext):
"""
Iterates over nodes.
"""
- key = 'service_{0}'.format(self.model.node.model_cls.name_column_name())
+ key = u'service_{0}'.format(self.model.node.model_cls.name_column_name())
return self.model.node.iter(
filters={
key: getattr(self.service, self.service.name_column_name())
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/orchestrator/decorators.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/decorators.py b/aria/orchestrator/decorators.py
index 4b163d6..4de0397 100644
--- a/aria/orchestrator/decorators.py
+++ b/aria/orchestrator/decorators.py
@@ -80,6 +80,6 @@ def operation(func=None, toolbelt=False, suffix_template='', logging_handlers=No
def _generate_name(func_name, ctx, suffix_template, **custom_kwargs):
- return '{func_name}.{suffix}'.format(
+ return u'{func_name}.{suffix}'.format(
func_name=func_name,
suffix=suffix_template.format(ctx=ctx, **custom_kwargs) or generate_uuid(variant='uuid'))
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/orchestrator/execution_plugin/common.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/execution_plugin/common.py b/aria/orchestrator/execution_plugin/common.py
index ce6746c..1c279d3 100644
--- a/aria/orchestrator/execution_plugin/common.py
+++ b/aria/orchestrator/execution_plugin/common.py
@@ -35,13 +35,13 @@ def download_script(ctx, script_path):
split = script_path.split('://')
schema = split[0]
suffix = script_path.split('/')[-1]
- file_descriptor, dest_script_path = tempfile.mkstemp(suffix='-{0}'.format(suffix))
+ file_descriptor, dest_script_path = tempfile.mkstemp(suffix=u'-{0}'.format(suffix))
os.close(file_descriptor)
try:
if schema in ('http', 'https'):
response = requests.get(script_path)
if response.status_code == 404:
- ctx.task.abort('Failed to download script: {0} (status code: {1})'
+ ctx.task.abort(u'Failed to download script: {0} (status code: {1})'
.format(script_path, response.status_code))
content = response.text
with open(dest_script_path, 'wb') as f:
@@ -84,7 +84,7 @@ def create_process_config(script_path, process, operation_kwargs, quote_json_env
if isinstance(v, (dict, list, tuple, bool, int, float)):
v = json.dumps(v)
if quote_json_env_vars:
- v = "'{0}'".format(v)
+ v = u"'{0}'".format(v)
if is_windows():
# These <k,v> environment variables will subsequently
# be used in a subprocess.Popen() call, as the `env` parameter.
@@ -102,9 +102,9 @@ def create_process_config(script_path, process, operation_kwargs, quote_json_env
command = script_path
command_prefix = process.get('command_prefix')
if command_prefix:
- command = '{0} {1}'.format(command_prefix, command)
+ command = u'{0} {1}'.format(command_prefix, command)
if args:
- command = ' '.join([command] + [str(a) for a in args])
+ command = u' '.join([command] + [str(a) for a in args])
process['command'] = command
return process
@@ -150,5 +150,5 @@ def check_error(ctx, error_check_func=None, reraise=False):
error_check_func()
# if this function is called from within an ``except`` clause, a re-raise maybe required
if reraise:
- raise # pylint: disable=misplaced-bare-raise
+ raise # pylint: disable=misplaced-bare-raise
return _error
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/orchestrator/execution_plugin/ctx_proxy/client.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/execution_plugin/ctx_proxy/client.py b/aria/orchestrator/execution_plugin/ctx_proxy/client.py
index 84d66f1..a569c78 100644
--- a/aria/orchestrator/execution_plugin/ctx_proxy/client.py
+++ b/aria/orchestrator/execution_plugin/ctx_proxy/client.py
@@ -32,7 +32,7 @@ CTX_SOCKET_URL = 'CTX_SOCKET_URL'
class _RequestError(RuntimeError):
def __init__(self, ex_message, ex_type, ex_traceback):
- super(_RequestError, self).__init__(self, '{0}: {1}'.format(ex_type, ex_message))
+ super(_RequestError, self).__init__(self, u'{0}: {1}'.format(ex_type, ex_message))
self.ex_type = ex_type
self.ex_message = ex_message
self.ex_traceback = ex_traceback
@@ -45,7 +45,7 @@ def _http_request(socket_url, request, method, timeout):
response = opener.open(request, timeout=timeout)
if response.code != 200:
- raise RuntimeError('Request failed: {0}'.format(response))
+ raise RuntimeError(u'Request failed: {0}'.format(response))
return json.loads(response.read())
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/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 91b95d9..d8aa8fb 100644
--- a/aria/orchestrator/execution_plugin/ctx_proxy/server.py
+++ b/aria/orchestrator/execution_plugin/ctx_proxy/server.py
@@ -37,7 +37,7 @@ class CtxProxy(object):
self.ctx = ctx
self._ctx_patcher = ctx_patcher
self.port = _get_unused_port()
- self.socket_url = 'http://localhost:{0}'.format(self.port)
+ self.socket_url = 'http://localhost:{0:d}'.format(self.port)
self.server = None
self._started = Queue.Queue(1)
self.thread = self._start_server()
@@ -73,7 +73,7 @@ class CtxProxy(object):
def address_string(self):
return self.client_address[0]
- def log_request(*args, **kwargs): # pylint: disable=no-method-argument
+ def log_request(*args, **kwargs): # pylint: disable=no-method-argument
if not self.quiet:
return wsgiref.simple_server.WSGIRequestHandler.log_request(*args,
**kwargs)
@@ -110,7 +110,7 @@ class CtxProxy(object):
self.server.server_close()
def _request_handler(self):
- request = bottle.request.body.read() # pylint: disable=no-member
+ request = bottle.request.body.read() # pylint: disable=no-member
response = self._process(request)
return bottle.LocalResponse(
body=json.dumps(response, cls=modeling.utils.ModelJSONEncoder),
@@ -195,7 +195,7 @@ def _process_arguments(obj, args):
# Modify object attribute
setattr(obj, modifying_key, modifying_value)
else:
- raise CtxError('Cannot modify `{0}` of `{1!r}`'.format(modifying_key, obj))
+ raise CtxError(u'Cannot modify `{0}` of `{1!r}`'.format(modifying_key, obj))
return obj
@@ -233,7 +233,7 @@ def _process_next_operation(obj, args, modifying):
obj[arg] = {}
return obj[arg], args
- raise CtxParsingError('Cannot parse argument: `{0!r}`'.format(arg))
+ raise CtxParsingError(u'Cannot parse argument: `{0!r}`'.format(arg))
def _get_unused_port():
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/orchestrator/execution_plugin/instantiation.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/execution_plugin/instantiation.py b/aria/orchestrator/execution_plugin/instantiation.py
index 8b52015..d859043 100644
--- a/aria/orchestrator/execution_plugin/instantiation.py
+++ b/aria/orchestrator/execution_plugin/instantiation.py
@@ -64,8 +64,8 @@ def _configure_local(operation):
"""
from . import operations
- operation.function = '{0}.{1}'.format(operations.__name__,
- operations.run_script_locally.__name__)
+ operation.function = u'{0}.{1}'.format(operations.__name__,
+ operations.run_script_locally.__name__)
def _configure_remote(operation, reporter):
@@ -105,7 +105,7 @@ def _configure_remote(operation, reporter):
# Make sure we have a user
if fabric_env.get('user') is None:
- reporter.report('must configure "ssh.user" for "{0}"'.format(operation.implementation),
+ reporter.report(u'must configure "ssh.user" for "{0}"'.format(operation.implementation),
level=reporter.Issue.BETWEEN_TYPES)
# Make sure we have an authentication value
@@ -120,8 +120,8 @@ def _configure_remote(operation, reporter):
operation.arguments['fabric_env'] = Argument.wrap('fabric_env', fabric_env,
'Fabric configuration.')
- operation.function = '{0}.{1}'.format(operations.__name__,
- operations.run_script_with_ssh.__name__)
+ operation.function = u'{0}.{1}'.format(operations.__name__,
+ operations.run_script_with_ssh.__name__)
def _get_process(operation, reporter):
@@ -144,7 +144,7 @@ def _get_process(operation, reporter):
elif k == 'env':
_validate_type(v, dict, 'process.env', reporter)
else:
- reporter.report('unsupported configuration parameter: "process.{0}"'.format(k),
+ reporter.report(u'unsupported configuration parameter: "process.{0}"'.format(k),
level=reporter.Issue.BETWEEN_TYPES)
return value
@@ -175,7 +175,7 @@ def _get_ssh(operation, reporter):
elif k == 'address':
_validate_type(v, basestring, 'ssh.address', reporter)
else:
- reporter.report('unsupported configuration parameter: "ssh.{0}"'.format(k),
+ reporter.report(u'unsupported configuration parameter: "ssh.{0}"'.format(k),
level=reporter.Issue.BETWEEN_TYPES)
return value
@@ -185,7 +185,7 @@ def _validate_type(value, the_type, name, reporter):
return
if not isinstance(value, the_type):
reporter.report(
- '"{0}" configuration is not a {1}: {2}'.format(
+ u'"{0}" configuration is not a {1}: {2}'.format(
name, utils.type.full_type_name(the_type), utils.formatting.safe_repr(value)),
level=reporter.Issue.BETWEEN_TYPES)
@@ -202,7 +202,7 @@ def _coerce_bool(value, name, reporter):
return False
else:
reporter.report(
- '"{0}" configuration is not "true" or "false": {1}'.format(
+ u'"{0}" configuration is not "true" or "false": {1}'.format(
name, utils.formatting.safe_repr(value)),
level=reporter.Issue.BETWEEN_TYPES)
@@ -212,6 +212,6 @@ def _dict_to_list_of_strings(the_dict, name, reporter):
value = []
for k in sorted(the_dict):
v = the_dict[k]
- _validate_type(v, basestring, '{0}.{1}'.format(name, k), reporter)
+ _validate_type(v, basestring, u'{0}.{1}'.format(name, k), reporter)
value.append(v)
return value
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/orchestrator/execution_plugin/local.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/execution_plugin/local.py b/aria/orchestrator/execution_plugin/local.py
index 04b9ecd..abb5b52 100644
--- a/aria/orchestrator/execution_plugin/local.py
+++ b/aria/orchestrator/execution_plugin/local.py
@@ -78,7 +78,7 @@ def _execute_func(script_path, ctx, process, operation_kwargs):
command = process['command']
env = os.environ.copy()
env.update(process['env'])
- ctx.logger.info('Executing: {0}'.format(command))
+ ctx.logger.info(u'Executing: {0}'.format(command))
with ctx_proxy.server.CtxProxy(ctx, common.patch_ctx) as proxy:
env[ctx_proxy.client.CTX_SOCKET_URL] = proxy.socket_url
running_process = subprocess.Popen(
@@ -95,7 +95,7 @@ def _execute_func(script_path, ctx, process, operation_kwargs):
exit_code = running_process.wait()
stdout_consumer.join()
stderr_consumer.join()
- ctx.logger.info('Execution done (exit_code={0}): {1}'.format(exit_code, command))
+ ctx.logger.info(u'Execution done (exit_code={0}): {1}'.format(exit_code, command))
def error_check_func():
if exit_code:
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/orchestrator/execution_plugin/ssh/operations.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/execution_plugin/ssh/operations.py b/aria/orchestrator/execution_plugin/ssh/operations.py
index c40e783..759f1d2 100644
--- a/aria/orchestrator/execution_plugin/ssh/operations.py
+++ b/aria/orchestrator/execution_plugin/ssh/operations.py
@@ -48,7 +48,7 @@ def run_commands(ctx, commands, fabric_env, use_sudo, hide_output, **_):
with fabric.api.settings(_hide_output(ctx, groups=hide_output),
**_fabric_env(ctx, fabric_env, warn_only=True)):
for command in commands:
- ctx.logger.info('Running command: {0}'.format(command))
+ ctx.logger.info(u'Running command: {0}'.format(command))
run = fabric.api.sudo if use_sudo else fabric.api.run
result = run(command)
if result.failed:
@@ -70,8 +70,8 @@ def run_script(ctx, script_path, fabric_env, process, use_sudo, hide_output, **k
# there may be race conditions with other operations that
# may be running in parallel, so we pass -p to make sure
# we get 0 exit code if the directory already exists
- fabric.api.run('mkdir -p {0} && mkdir -p {1}'.format(paths.remote_scripts_dir,
- paths.remote_work_dir))
+ fabric.api.run(u'mkdir -p {0} && mkdir -p {1}'.format(paths.remote_scripts_dir,
+ paths.remote_work_dir))
# this file has to be present before using ctx
fabric.api.put(_PROXY_CLIENT_PATH, paths.remote_ctx_path)
process = common.create_process_config(
@@ -82,7 +82,7 @@ def run_script(ctx, script_path, fabric_env, process, use_sudo, hide_output, **k
fabric.api.put(paths.local_script_path, paths.remote_script_path)
with ctx_proxy.server.CtxProxy(ctx, _patch_ctx) as proxy:
local_port = proxy.port
- with fabric.context_managers.cd(process.get('cwd', paths.remote_work_dir)): # pylint: disable=not-context-manager
+ with fabric.context_managers.cd(process.get('cwd', paths.remote_work_dir)): # pylint: disable=not-context-manager
with tunnel.remote(ctx, local_port=local_port) as remote_port:
local_socket_url = proxy.socket_url
remote_socket_url = local_socket_url.replace(str(local_port), str(remote_port))
@@ -93,8 +93,8 @@ def run_script(ctx, script_path, fabric_env, process, use_sudo, hide_output, **k
remote_socket_url=remote_socket_url)
fabric.api.put(env_script, paths.remote_env_script_path)
try:
- command = 'source {0} && {1}'.format(paths.remote_env_script_path,
- process['command'])
+ command = u'source {0} && {1}'.format(paths.remote_env_script_path,
+ process['command'])
run = fabric.api.sudo if use_sudo else fabric.api.run
run(command)
except exceptions.TaskException:
@@ -136,8 +136,8 @@ def _hide_output(ctx, groups):
""" Hides Fabric's output for every 'entity' in `groups` """
groups = set(groups or [])
if not groups.issubset(constants.VALID_FABRIC_GROUPS):
- ctx.task.abort('`hide_output` must be a subset of {0} (Provided: {1})'
- .format(', '.join(constants.VALID_FABRIC_GROUPS), ', '.join(groups)))
+ ctx.task.abort(u'`hide_output` must be a subset of {0} (Provided: {1})'
+ .format(u', '.join(constants.VALID_FABRIC_GROUPS), u', '.join(groups)))
return fabric.api.hide(*groups)
@@ -165,16 +165,16 @@ def _fabric_env(ctx, fabric_env, warn_only):
def _write_environment_script_file(process, paths, local_socket_url, remote_socket_url):
env_script = StringIO.StringIO()
env = process['env']
- env['PATH'] = '{0}:$PATH'.format(paths.remote_ctx_dir)
- env['PYTHONPATH'] = '{0}:$PYTHONPATH'.format(paths.remote_ctx_dir)
- env_script.write('chmod +x {0}\n'.format(paths.remote_script_path))
- env_script.write('chmod +x {0}\n'.format(paths.remote_ctx_path))
+ env['PATH'] = u'{0}:$PATH'.format(paths.remote_ctx_dir)
+ env['PYTHONPATH'] = u'{0}:$PYTHONPATH'.format(paths.remote_ctx_dir)
+ env_script.write(u'chmod +x {0}\n'.format(paths.remote_script_path))
+ env_script.write(u'chmod +x {0}\n'.format(paths.remote_ctx_path))
env.update({
ctx_proxy.client.CTX_SOCKET_URL: remote_socket_url,
- 'LOCAL_{0}'.format(ctx_proxy.client.CTX_SOCKET_URL): local_socket_url
+ u'LOCAL_{0}'.format(ctx_proxy.client.CTX_SOCKET_URL): local_socket_url
})
for key, value in env.iteritems():
- env_script.write('export {0}={1}\n'.format(key, value))
+ env_script.write(u'export {0}={1}\n'.format(key, value))
return env_script
@@ -184,12 +184,12 @@ class _Paths(object):
self.local_script_path = local_script_path
self.remote_ctx_dir = base_dir
self.base_script_path = os.path.basename(self.local_script_path)
- self.remote_ctx_path = '{0}/ctx'.format(self.remote_ctx_dir)
- self.remote_scripts_dir = '{0}/scripts'.format(self.remote_ctx_dir)
- self.remote_work_dir = '{0}/work'.format(self.remote_ctx_dir)
- random_suffix = ''.join(random.choice(string.ascii_lowercase + string.digits)
- for _ in range(8))
- remote_path_suffix = '{0}-{1}'.format(self.base_script_path, random_suffix)
- self.remote_env_script_path = '{0}/env-{1}'.format(self.remote_scripts_dir,
- remote_path_suffix)
- self.remote_script_path = '{0}/{1}'.format(self.remote_scripts_dir, remote_path_suffix)
+ self.remote_ctx_path = u'{0}/ctx'.format(self.remote_ctx_dir)
+ self.remote_scripts_dir = u'{0}/scripts'.format(self.remote_ctx_dir)
+ self.remote_work_dir = u'{0}/work'.format(self.remote_ctx_dir)
+ random_suffix = u''.join(random.choice(string.ascii_lowercase + string.digits)
+ for _ in range(8))
+ remote_path_suffix = u'{0}-{1}'.format(self.base_script_path, random_suffix)
+ self.remote_env_script_path = u'{0}/env-{1}'.format(self.remote_scripts_dir,
+ remote_path_suffix)
+ self.remote_script_path = u'{0}/{1}'.format(self.remote_scripts_dir, remote_path_suffix)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/orchestrator/execution_plugin/ssh/tunnel.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/execution_plugin/ssh/tunnel.py b/aria/orchestrator/execution_plugin/ssh/tunnel.py
index e76d525..05ea4ed 100644
--- a/aria/orchestrator/execution_plugin/ssh/tunnel.py
+++ b/aria/orchestrator/execution_plugin/ssh/tunnel.py
@@ -64,10 +64,10 @@ def remote(ctx, local_port, remote_port=0, local_host='localhost', remote_bind_a
try:
channel.close()
except Exception as ex2:
- close_error = ' (While trying to close channel: {0})'.format(ex2)
+ close_error = u' (While trying to close channel: {0})'.format(ex2)
else:
close_error = ''
- ctx.task.abort('[{0}] rtunnel: cannot connect to {1}:{2} ({3}){4}'
+ ctx.task.abort(u'[{0}] rtunnel: cannot connect to {1}:{2} ({3}){4}'
.format(fabric.api.env.host_string, local_host, local_port, e,
close_error))
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/orchestrator/plugin.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/plugin.py b/aria/orchestrator/plugin.py
index 756a28e..4f29e4f 100644
--- a/aria/orchestrator/plugin.py
+++ b/aria/orchestrator/plugin.py
@@ -67,8 +67,8 @@ class PluginManager(object):
if len(self._model.plugin.list(filters={'package_name': plugin.package_name,
'package_version': plugin.package_version})):
raise exceptions.PluginAlreadyExistsError(
- 'Plugin {0}, version {1} already exists'.format(plugin.package_name,
- plugin.package_version))
+ u'Plugin {0}, version {1} already exists'.format(plugin.package_name,
+ plugin.package_version))
self._install_wagon(source=source, prefix=self.get_plugin_dir(plugin))
self._model.plugin.put(plugin)
return plugin
@@ -120,8 +120,8 @@ class PluginManager(object):
"""
if not zipfile.is_zipfile(source):
raise exceptions.InvalidPluginError(
- 'Archive {0} is of an unsupported type. Only '
- 'zip/wgn is allowed'.format(source))
+ u'Archive {0} is of an unsupported type. Only '
+ u'zip/wgn is allowed'.format(source))
with zipfile.ZipFile(source, 'r') as zip_file:
infos = zip_file.infolist()
try:
@@ -130,8 +130,8 @@ class PluginManager(object):
zip_file.getinfo(package_json_path)
except (KeyError, ValueError, IndexError):
raise exceptions.InvalidPluginError(
- 'Failed to validate plugin {0} '
- '(package.json was not found in archive)'.format(source))
+ u'Failed to validate plugin {0} '
+ u'(package.json was not found in archive)'.format(source))
def _install_wagon(self, source, prefix):
pip_freeze_output = self._pip_freeze()
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/a7c37467/aria/orchestrator/topology/instance_handler.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/topology/instance_handler.py b/aria/orchestrator/topology/instance_handler.py
index 51f26c6..fad00b9 100644
--- a/aria/orchestrator/topology/instance_handler.py
+++ b/aria/orchestrator/topology/instance_handler.py
@@ -34,18 +34,18 @@ class Artifact(common.InstanceHandlerBase):
out_stream.write(out_stream.node_style(self._model.name))
out_stream.write(out_stream.meta_style(self._model.description))
with out_stream.indent():
- out_stream.write('Artifact type: {0}'.format(out_stream.type_style(
+ out_stream.write(u'Artifact type: {0}'.format(out_stream.type_style(
self._model.type.name)))
- out_stream.write('Source path: {0}'.format(
+ out_stream.write(u'Source path: {0}'.format(
out_stream.literal_style(self._model.source_path)))
if self._model.target_path is not None:
- out_stream.write('Target path: {0}'.format(
+ out_stream.write(u'Target path: {0}'.format(
out_stream.literal_style(self._model.target_path)))
if self._model.repository_url is not None:
- out_stream.write('Repository URL: {0}'.format(
+ out_stream.write(u'Repository URL: {0}'.format(
out_stream.literal_style(self._model.repository_url)))
if self._model.repository_credential:
- out_stream.write('Repository credential: {0}'.format(
+ out_stream.write(u'Repository credential: {0}'.format(
out_stream.literal_style(self._model.repository_credential)))
self._topology.dump(self._model.properties, out_stream, title='Properties')
@@ -60,11 +60,11 @@ class Capability(common.InstanceHandlerBase):
def dump(self, out_stream):
out_stream.write(out_stream.node_style(self._model.name))
with out_stream.indent():
- out_stream.write('Type: {0}'.format(out_stream.type_style(self._model.type.name)))
- out_stream.write('Occurrences: {0:d} ({1:d}{2})'.format(
+ out_stream.write(u'Type: {0}'.format(out_stream.type_style(self._model.type.name)))
+ out_stream.write(u'Occurrences: {0:d} ({1:d}{2})'.format(
self._model.occurrences,
self._model.min_occurrences or 0,
- ' to {0:d}'.format(self._model.max_occurrences)
+ u' to {0:d}'.format(self._model.max_occurrences)
if self._model.max_occurrences is not None
else ' or more'))
self._topology.dump(self._model.properties, out_stream, title='Properties')
@@ -81,9 +81,9 @@ class Group(common.ActorHandlerBase):
**kwargs)
def dump(self, out_stream):
- out_stream.write('Group: {0}'.format(out_stream.node_style(self._model.name)))
+ out_stream.write(u'Group: {0}'.format(out_stream.node_style(self._model.name)))
with out_stream.indent():
- out_stream.write('Type: {0}'.format(out_stream.type_style(self._model.type.name)))
+ out_stream.write(u'Type: {0}'.format(out_stream.type_style(self._model.type.name)))
self._topology.dump(self._model.properties, out_stream, title='Properties')
self._topology.dump(self._model.interfaces, out_stream, title='Interfaces')
if self._model.nodes:
@@ -111,7 +111,7 @@ class Interface(common.ActorHandlerBase):
if self._model.description:
out_stream.write(out_stream.meta_style(self._model.description))
with out_stream.indent():
- out_stream.write('Interface type: {0}'.format(
+ out_stream.write(u'Interface type: {0}'.format(
out_stream.type_style(self._model.type.name)))
self._topology.dump(self._model.inputs, out_stream, title='Inputs')
self._topology.dump(self._model.operations, out_stream, title='Operations')
@@ -134,7 +134,7 @@ class Node(common.ActorHandlerBase):
def validate(self, **kwargs):
if len(self._model.name) > context.ID_MAX_LENGTH:
self._topology.report(
- '"{0}" has an ID longer than the limit of {1:d} characters: {2:d}'.format(
+ u'"{0}" has an ID longer than the limit of {1:d} characters: {2:d}'.format(
self._model.name, context.ID_MAX_LENGTH, len(self._model.name)),
level=self._topology.Issue.BETWEEN_INSTANCES)
@@ -146,10 +146,10 @@ class Node(common.ActorHandlerBase):
self._model.outbound_relationships)
def dump(self, out_stream):
- out_stream.write('Node: {0}'.format(out_stream.node_style(self._model.name)))
+ out_stream.write(u'Node: {0}'.format(out_stream.node_style(self._model.name)))
with out_stream.indent():
- out_stream.write('Type: {0}'.format(out_stream.type_style(self._model.type.name)))
- out_stream.write('Template: {0}'.format(
+ out_stream.write(u'Type: {0}'.format(out_stream.type_style(self._model.type.name)))
+ out_stream.write(u'Template: {0}'.format(
out_stream.node_style(self._model.node_template.name)))
self._topology.dump(self._model.properties, out_stream, title='Properties')
self._topology.dump(self._model.attributes, out_stream, title='Attributes')
@@ -170,11 +170,11 @@ class Node(common.ActorHandlerBase):
for capability in self._model.capabilities.itervalues():
if not capability.has_enough_relationships:
self._topology.report(
- 'capability "{0}" of node "{1}" requires at least {2:d} '
- 'relationships but has {3:d}'.format(capability.name,
- self._model.name,
- capability.min_occurrences,
- capability.occurrences),
+ u'capability "{0}" of node "{1}" requires at least {2:d} '
+ u'relationships but has {3:d}'.format(capability.name,
+ self._model.name,
+ capability.min_occurrences,
+ capability.occurrences),
level=self._topology.Issue.BETWEEN_INSTANCES)
satisfied = False
return satisfied
@@ -197,8 +197,8 @@ class Node(common.ActorHandlerBase):
satisfied = self._satisfy_capability(
target_node_capability, target_node_template, requirement_template)
else:
- self._topology.report('requirement "{0}" of node "{1}" has no target node template'.
- format(requirement_template.name, self._model.name),
+ self._topology.report(u'requirement "{0}" of node "{1}" has no target node template'
+ .format(requirement_template.name, self._model.name),
level=self._topology.Issue.BETWEEN_INSTANCES)
satisfied = False
return satisfied
@@ -237,16 +237,16 @@ class Node(common.ActorHandlerBase):
return True
else:
self._topology.report(
- 'requirement "{0}" of node "{1}" targets node '
- 'template "{2}" but its instantiated nodes do not '
- 'have enough capacity'.format(
+ u'requirement "{0}" of node "{1}" targets node '
+ u'template "{2}" but its instantiated nodes do not '
+ u'have enough capacity'.format(
requirement_template.name, self._model.name, target_node_template.name),
level=self._topology.Issue.BETWEEN_INSTANCES)
return False
else:
self._topology.report(
- 'requirement "{0}" of node "{1}" targets node template '
- '"{2}" but it has no instantiated nodes'.format(
+ u'requirement "{0}" of node "{1}" targets node template '
+ u'"{2}" but it has no instantiated nodes'.format(
requirement_template.name, self._model.name, target_node_template.name),
level=self._topology.Issue.BETWEEN_INSTANCES)
return False
@@ -258,8 +258,8 @@ class Node(common.ActorHandlerBase):
if not self._model.node_template.is_target_node_template_valid(
requirement_template.target_node_template):
self._topology.report(
- 'requirement "{0}" of node template "{1}" is for node '
- 'template "{2}" but it does not match constraints'.format(
+ u'requirement "{0}" of node template "{1}" is for node '
+ u'template "{2}" but it does not match constraints'.format(
requirement_template.name,
requirement_template.target_node_template.name,
self._model.node_template.name),
@@ -359,28 +359,28 @@ class Operation(common.ActorHandlerBase):
out_stream.write(out_stream.meta_style(self._model.description))
with out_stream.indent():
if self._model.implementation is not None:
- out_stream.write('Implementation: {0}'.format(
+ out_stream.write(u'Implementation: {0}'.format(
out_stream.literal_style(self._model.implementation)))
if self._model.dependencies:
out_stream.write(
- 'Dependencies: {0}'.format(', '.join((str(out_stream.literal_style(v))
- for v in self._model.dependencies))))
+ u'Dependencies: {0}'.format(u', '.join((str(out_stream.literal_style(v))
+ for v in self._model.dependencies))))
self._topology.dump(self._model.inputs, out_stream, title='Inputs')
if self._model.executor is not None:
- out_stream.write('Executor: {0}'.format(out_stream.literal_style(
+ out_stream.write(u'Executor: {0}'.format(out_stream.literal_style(
self._model.executor)))
if self._model.max_attempts is not None:
- out_stream.write('Max attempts: {0}'.format(out_stream.literal_style(
+ out_stream.write(u'Max attempts: {0}'.format(out_stream.literal_style(
self._model.max_attempts)))
if self._model.retry_interval is not None:
- out_stream.write('Retry interval: {0}'.format(
+ out_stream.write(u'Retry interval: {0}'.format(
out_stream.literal_style(self._model.retry_interval)))
if self._model.plugin is not None:
- out_stream.write('Plugin: {0}'.format(
+ out_stream.write(u'Plugin: {0}'.format(
out_stream.literal_style(self._model.plugin.name)))
self._topology.dump(self._model.configurations, out_stream, title='Configuration')
if self._model.function is not None:
- out_stream.write('Function: {0}'.format(out_stream.literal_style(
+ out_stream.write(u'Function: {0}'.format(out_stream.literal_style(
self._model.function)))
self._topology.dump(self._model.arguments, out_stream, title='Arguments')
@@ -418,7 +418,7 @@ class Operation(common.ActorHandlerBase):
self._model.arguments.keys())
if used_reserved_names:
self._topology.report(
- 'using reserved arguments in operation "{0}": {1}'.format(
+ u'using reserved arguments in operation "{0}": {1}'.format(
self._model.name, formatting.string_list_as_string(used_reserved_names)),
level=self._topology.Issue.EXTERNAL)
@@ -431,9 +431,9 @@ class Policy(common.InstanceHandlerBase):
self._topology.validate(self._model.properties, **kwargs)
def dump(self, out_stream):
- out_stream.write('Policy: {0}'.format(out_stream.node_style(self._model.name)))
+ out_stream.write(u'Policy: {0}'.format(out_stream.node_style(self._model.name)))
with out_stream.indent():
- out_stream.write('Type: {0}'.format(out_stream.type_style(self._model.type.name)))
+ out_stream.write(u'Type: {0}'.format(out_stream.type_style(self._model.type.name)))
self._topology.dump(self._model.properties, out_stream, title='Properties')
if self._model.nodes:
out_stream.write('Target nodes:')
@@ -460,21 +460,21 @@ class Relationship(common.ActorHandlerBase):
def dump(self, out_stream):
if self._model.name:
- out_stream.write('{0} ->'.format(out_stream.node_style(self._model.name)))
+ out_stream.write(u'{0} ->'.format(out_stream.node_style(self._model.name)))
else:
out_stream.write('->')
with out_stream.indent():
- out_stream.write('Node: {0}'.format(out_stream.node_style(
+ out_stream.write(u'Node: {0}'.format(out_stream.node_style(
self._model.target_node.name)))
if self._model.target_capability:
- out_stream.write('Capability: {0}'.format(out_stream.node_style(
+ out_stream.write(u'Capability: {0}'.format(out_stream.node_style(
self._model.target_capability.name)))
if self._model.type is not None:
- out_stream.write('Relationship type: {0}'.format(
+ out_stream.write(u'Relationship type: {0}'.format(
out_stream.type_style(self._model.type.name)))
if (self._model.relationship_template is not None and
self._model.relationship_template.name):
- out_stream.write('Relationship template: {0}'.format(
+ out_stream.write(u'Relationship template: {0}'.format(
out_stream.node_style(self._model.relationship_template.name)))
self._topology.dump(self._model.properties, out_stream, title='Properties')
self._topology.dump(self._model.interfaces, out_stream, title='Interfaces')
@@ -549,7 +549,7 @@ class Substitution(common.InstanceHandlerBase):
def dump(self, out_stream):
out_stream.write('Substitution:')
with out_stream.indent():
- out_stream.write('Node type: {0}'.format(out_stream.type_style(
+ out_stream.write(u'Node type: {0}'.format(out_stream.type_style(
self._model.node_type.name)))
self._topology.dump(self._model.mappings, out_stream, title='Mappings')
@@ -562,19 +562,19 @@ class SubstitutionMapping(common.InstanceHandlerBase):
def validate(self, **_):
if (self._model.capability is None) and (self._model.requirement_template is None):
self._topology.report(
- 'mapping "{0}" refers to neither capability nor a requirement'
- ' in node: {1}'.format(
+ u'mapping "{0}" refers to neither capability nor a requirement'
+ u' in node: {1}'.format(
self._model.name, formatting.safe_repr(self._model.node_style.name)),
level=self._topology.Issue.BETWEEN_TYPES)
def dump(self, out_stream):
if self._model.capability is not None:
- out_stream.write('{0} -> {1}.{2}'.format(
+ out_stream.write(u'{0} -> {1}.{2}'.format(
out_stream.node_style(self._model.name),
out_stream.node_style(self._model.capability.node.name),
out_stream.node_style(self._model.capability.name)))
else:
- out_stream.write('{0} -> {1}.{2}'.format(
+ out_stream.write(u'{0} -> {1}.{2}'.format(
out_stream.node_style(self._model.name),
out_stream.node_style(self._model.node.name),
out_stream.node_style(self._model.requirement_template.name)))
@@ -583,7 +583,7 @@ class SubstitutionMapping(common.InstanceHandlerBase):
class Metadata(common.InstanceHandlerBase):
def dump(self, out_stream):
- out_stream.write('{0}: {1}'.format(
+ out_stream.write(u'{0}: {1}'.format(
out_stream.property_style(self._model.name),
out_stream.literal_style(self._model.value)))
@@ -601,12 +601,12 @@ class _Parameter(common.InstanceHandlerBase):
def dump(self, out_stream):
if self._model.type_name is not None:
- out_stream.write('{0}: {1} ({2})'.format(
+ out_stream.write(u'{0}: {1} ({2})'.format(
out_stream.property_style(self._model.name),
out_stream.literal_style(formatting.as_raw(self._model.value)),
out_stream.type_style(self._model.type_name)))
else:
- out_stream.write('{0}: {1}'.format(
+ out_stream.write(u'{0}: {1}'.format(
out_stream.property_style(self._model.name),
out_stream.literal_style(formatting.as_raw(self._model.value))))
if self._model.description: