You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ariatosca.apache.org by mx...@apache.org on 2017/04/19 12:15:18 UTC

[08/10] incubator-ariatosca git commit: various review fixes

various review fixes


Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/c1f8eb6a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/c1f8eb6a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/c1f8eb6a

Branch: refs/heads/ARIA-138-Make-logging-more-informative
Commit: c1f8eb6a924f93656dee6d82ded2dc83ed6b4cc9
Parents: 79f5d78
Author: Ran Ziv <ra...@gigaspaces.com>
Authored: Tue Apr 18 18:44:34 2017 +0300
Committer: Ran Ziv <ra...@gigaspaces.com>
Committed: Tue Apr 18 18:44:34 2017 +0300

----------------------------------------------------------------------
 aria/cli/commands/node_templates.py    |  3 ---
 aria/cli/commands/plugins.py           |  4 ++--
 aria/cli/commands/service_templates.py | 21 +++++----------------
 aria/cli/commands/services.py          | 29 ++++++++++++++---------------
 aria/cli/core/aria.py                  |  4 ++--
 aria/cli/inputs.py                     |  2 +-
 aria/cli/utils.py                      | 18 ++++++++++++------
 aria/core.py                           | 19 ++++---------------
 aria/modeling/exceptions.py            | 19 +++++++++++++------
 aria/modeling/service_template.py      |  3 ++-
 aria/orchestrator/workflow_runner.py   | 14 +++++++-------
 tox.ini                                |  2 +-
 12 files changed, 63 insertions(+), 75 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c1f8eb6a/aria/cli/commands/node_templates.py
----------------------------------------------------------------------
diff --git a/aria/cli/commands/node_templates.py b/aria/cli/commands/node_templates.py
index b63b630..c79e125 100644
--- a/aria/cli/commands/node_templates.py
+++ b/aria/cli/commands/node_templates.py
@@ -41,10 +41,7 @@ def show(node_template_id, model_storage, logger):
 
     `NODE_TEMPLATE_ID` is the node id to get information on.
     """
-    # logger.info('Showing node template {0} for service template {1}'.format(
-    #     node_template_id, service_template_name))
     logger.info('Showing node template {0}'.format(node_template_id))
-    #TODO get node template of a specific service template instead?
     node_template = model_storage.node_template.get(node_template_id)
 
     print_data(NODE_TEMPLATE_COLUMNS, node_template.to_dict(), 'Node template:', max_width=50)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c1f8eb6a/aria/cli/commands/plugins.py
----------------------------------------------------------------------
diff --git a/aria/cli/commands/plugins.py b/aria/cli/commands/plugins.py
index 680284f..41a272e 100644
--- a/aria/cli/commands/plugins.py
+++ b/aria/cli/commands/plugins.py
@@ -15,10 +15,10 @@
 
 import zipfile
 
+from .. import utils
 from ..core import aria
 from ..exceptions import AriaCliError
 from ..table import print_data
-from ..utils import storage_sort_param
 
 
 PLUGIN_COLUMNS = ['id', 'package_name', 'package_version', 'supported_platform',
@@ -129,5 +129,5 @@ def list(sort_by, descending, model_storage, logger):
     """
     logger.info('Listing all plugins...')
     plugins_list = [p.to_dict() for p in model_storage.plugin.list(
-        sort=storage_sort_param(sort_by, descending))]
+        sort=utils.storage_sort_param(sort_by, descending))]
     print_data(PLUGIN_COLUMNS, plugins_list, 'Plugins:')

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c1f8eb6a/aria/cli/commands/service_templates.py
----------------------------------------------------------------------
diff --git a/aria/cli/commands/service_templates.py b/aria/cli/commands/service_templates.py
index 93dc188..2ef37c0 100644
--- a/aria/cli/commands/service_templates.py
+++ b/aria/cli/commands/service_templates.py
@@ -16,15 +16,12 @@
 
 import os
 
-from .. import utils
 from .. import csar
 from .. import service_template_utils
+from .. import utils
 from ..core import aria
 from ..table import print_data
-from ..exceptions import AriaCliError
-from ..utils import handle_storage_exception
 from ...core import Core
-from ...exceptions import AriaException
 from ...storage import exceptions as storage_exceptions
 
 
@@ -124,7 +121,8 @@ def store(service_template_path, service_template_name, service_template_filenam
                                      os.path.dirname(service_template_path),
                                      service_template_name)
     except storage_exceptions.StorageError as e:
-        handle_storage_exception(e, 'service template', service_template_name)
+        utils.check_overriding_storage_exceptions(e, 'service template', service_template_name)
+        raise
     logger.info('Service template {0} stored'.format(service_template_name))
 
 
@@ -143,10 +141,7 @@ def delete(service_template_name, model_storage, resource_storage, plugin_manage
     logger.info('Deleting service template {0}...'.format(service_template_name))
     service_template = model_storage.service_template.get_by_name(service_template_name)
     core = Core(model_storage, resource_storage, plugin_manager)
-    try:
-        core.delete_service_template(service_template.id)
-    except storage_exceptions.NotFoundError:
-        raise AriaCliError()
+    core.delete_service_template(service_template.id)
     logger.info('Service template {0} deleted'.format(service_template_name))
 
 
@@ -183,13 +178,7 @@ def validate(service_template, service_template_filename,
     logger.info('Validating service template: {0}'.format(service_template))
     service_template_path = service_template_utils.get(service_template, service_template_filename)
     core = Core(model_storage, resource_storage, plugin_manager)
-
-    try:
-        core.validate_service_template(service_template_path)
-    except AriaException as e:
-        # TODO: gather errors from parser and dump them via CLI?
-        raise AriaCliError(str(e))
-
+    core.validate_service_template(service_template_path)
     logger.info('Service template validated successfully')
 
 

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c1f8eb6a/aria/cli/commands/services.py
----------------------------------------------------------------------
diff --git a/aria/cli/commands/services.py b/aria/cli/commands/services.py
index 4728509..afa5e42 100644
--- a/aria/cli/commands/services.py
+++ b/aria/cli/commands/services.py
@@ -19,12 +19,11 @@ from StringIO import StringIO
 
 from . import service_templates
 from .. import helptexts
+from .. import utils
 from ..core import aria
-from ..exceptions import AriaCliError
 from ..table import print_data
-from ..utils import storage_sort_param, handle_storage_exception
 from ...core import Core
-from ...exceptions import AriaException
+from ...modeling import exceptions as modeling_exceptions
 from ...storage import exceptions as storage_exceptions
 
 
@@ -66,7 +65,7 @@ def list(service_template_name,
         filters = {}
 
     services_list = [d.to_dict() for d in model_storage.service.list(
-        sort=storage_sort_param(sort_by=sort_by, descending=descending),
+        sort=utils.storage_sort_param(sort_by=sort_by, descending=descending),
         filters=filters)]
     print_data(SERVICE_COLUMNS, services_list, 'Services:')
 
@@ -95,18 +94,18 @@ def create(service_template_name,
     """
     logger.info('Creating new service from service template {0}...'.format(
         service_template_name))
+    core = Core(model_storage, resource_storage, plugin_manager)
+    service_template = model_storage.service_template.get_by_name(service_template_name)
 
     try:
-        core = Core(model_storage, resource_storage, plugin_manager)
-        service_template = model_storage.service_template.get_by_name(service_template_name)
         service = core.create_service(service_template.id, inputs, service_name)
     except storage_exceptions.StorageError as e:
-        handle_storage_exception(e, 'service', service_name)
-    except AriaException as e:
-        logger.info(str(e))
+        utils.check_overriding_storage_exceptions(e, 'service', service_name)
+        raise
+    except modeling_exceptions.InputsException:
         service_templates.print_service_template_inputs(model_storage, service_template_name,
                                                         logger)
-        raise AriaCliError(str(e))
+        raise
     logger.info("Service created. The service's name is {0}".format(service.name))
 
 
@@ -171,11 +170,11 @@ def inputs(service_name, model_storage, logger):
     logger.info('Showing inputs for service {0}...'.format(service_name))
     service = model_storage.service.get_by_name(service_name)
     if service.inputs:
-        inputs_ = StringIO()
-        for input_name, input in service.inputs.iteritems():
-            inputs_.write(' - "{0}":{1}'.format(input_name, os.linesep))
-            inputs_.write('     Value: {0}{1}'.format(input.value, os.linesep))
-        logger.info(inputs_.getvalue())
+        inputs_string = StringIO()
+        for input_name, input_ in service.inputs.iteritems():
+            inputs_string.write(' - "{0}":{1}'.format(input_name, os.linesep))
+            inputs_string.write('     Value: {0}{1}'.format(input_.value, os.linesep))
+        logger.info(inputs_string.getvalue())
     else:
         logger.info('\tNo inputs')
     logger.info('')

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c1f8eb6a/aria/cli/core/aria.py
----------------------------------------------------------------------
diff --git a/aria/cli/core/aria.py b/aria/cli/core/aria.py
index cd1036e..fb5a81b 100644
--- a/aria/cli/core/aria.py
+++ b/aria/cli/core/aria.py
@@ -354,7 +354,7 @@ class Options(object):
             help=help)
 
     @staticmethod
-    def task_max_attempts(default=1):
+    def task_max_attempts(default=30):
         return click.option(
             '--task-max-attempts',
             type=int,
@@ -370,7 +370,7 @@ class Options(object):
             help=helptexts.SORT_BY)
 
     @staticmethod
-    def task_retry_interval(default=1):
+    def task_retry_interval(default=30):
         return click.option(
             '--task-retry-interval',
             type=int,

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c1f8eb6a/aria/cli/inputs.py
----------------------------------------------------------------------
diff --git a/aria/cli/inputs.py b/aria/cli/inputs.py
index 78db846..0ff48dc 100644
--- a/aria/cli/inputs.py
+++ b/aria/cli/inputs.py
@@ -18,7 +18,7 @@ import glob
 import yaml
 
 from .env import logger
-from.exceptions import AriaCliError
+from .exceptions import AriaCliError
 
 
 def inputs_to_dict(resources):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c1f8eb6a/aria/cli/utils.py
----------------------------------------------------------------------
diff --git a/aria/cli/utils.py b/aria/cli/utils.py
index fad1b07..3cc68c9 100644
--- a/aria/cli/utils.py
+++ b/aria/cli/utils.py
@@ -152,10 +152,16 @@ def generate_progress_handler(file_path, action='', max_bar_length=80):
     return print_progress
 
 
-def handle_storage_exception(e, model_class, name):
+def check_overriding_storage_exceptions(e, model_class, name):
+    """
+    This method checks whether the storage exception is a known type where we'd like to override
+     the exception message; If so, it raises a new error. Otherwise it simply returns.
+    """
+    assert isinstance(e, BaseException)
     if 'UNIQUE constraint failed' in e.message:
-        msg = 'Could not store {model_class} `{name}`{linesep}' \
-              'There already a exists a {model_class} with the same name' \
-              .format(model_class=model_class, name=name, linesep=os.linesep)
-        raise AriaCliError(msg)
-    raise AriaCliError()
+        new_message = \
+            'Could not store {model_class} `{name}`{linesep}' \
+            '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

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c1f8eb6a/aria/core.py
----------------------------------------------------------------------
diff --git a/aria/core.py b/aria/core.py
index f5e2025..af1984a 100644
--- a/aria/core.py
+++ b/aria/core.py
@@ -16,7 +16,6 @@
 from . import exceptions
 from .parser import consumption
 from .parser.loading.location import UriLocation
-from .storage import exceptions as storage_exceptions
 
 
 class Core(object):
@@ -69,14 +68,12 @@ class Core(object):
         # creating an empty ConsumptionContext, initiating a threadlocal context
         context = consumption.ConsumptionContext()
 
+        storage_session = self.model_storage._all_api_kwargs['session']
         # setting no autoflush for the duration of instantiation - this helps avoid dependency
         # constraints as they're being set up
-        with self.model_storage._all_api_kwargs['session'].no_autoflush:
+        with storage_session.no_autoflush:
             service = service_template.instantiate(None, self.model_storage, inputs=inputs)
 
-        self.model_storage._all_api_kwargs['session'].flush()
-
-        with self.model_storage._all_api_kwargs['session'].no_autoflush:
             consumption.ConsumerChain(
                 context,
                 (
@@ -88,17 +85,9 @@ class Core(object):
             if context.validation.dump_issues():
                 raise exceptions.InstantiationError('Failed to instantiate service template')
 
-        # If the user didn't enter a name for this service, we'll want to auto generate it.
-        # But how will we ensure a unique but simple name? We'll append the services' unique id
-        # to the service_templates name. Since this service is not in the storage yet, we'll put it
-        # there, and pull out its id.
-        self.model_storage.service.put(service)
+        storage_session.flush()  # flushing so service.id would auto-populate
         service.name = service_name or '{0}_{1}'.format(service_template.name, service.id)
-        try:
-            self.model_storage.service.update(service)
-        except storage_exceptions.StorageError:
-            self.model_storage.service.delete(service)
-            raise
+        self.model_storage.service.put(service)
         return service
 
     def delete_service(self, service_id, force=False):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c1f8eb6a/aria/modeling/exceptions.py
----------------------------------------------------------------------
diff --git a/aria/modeling/exceptions.py b/aria/modeling/exceptions.py
index 8225f37..19fd942 100644
--- a/aria/modeling/exceptions.py
+++ b/aria/modeling/exceptions.py
@@ -22,6 +22,13 @@ class ModelingException(AriaException):
     """
 
 
+class InputsException(ModelingException):
+    """
+    ARIA inputs exception.
+    """
+    pass
+
+
 class ValueFormatException(ModelingException):
     """
     ARIA modeling exception: the value is in the wrong format.
@@ -34,19 +41,19 @@ class CannotEvaluateFunctionException(ModelingException):
     """
 
 
-class MissingRequiredInputsException(ModelingException):
+class MissingRequiredInputsException(InputsException):
     """
-    ARIA modeling exception: Required inputs have been omitted
+    ARIA modeling exception: Required inputs have been omitted.
     """
 
 
-class InputsOfWrongTypeException(ModelingException):
+class InputsOfWrongTypeException(InputsException):
     """
-    ARIA modeling exception: Inputs of the wrong types have been provided
+    ARIA modeling exception: Inputs of the wrong types have been provided.
     """
 
 
-class UndeclaredInputsException(ModelingException):
+class UndeclaredInputsException(InputsException):
     """
-    ARIA modeling exception: Undeclared inputs have been provided
+    ARIA modeling exception: Undeclared inputs have been provided.
     """

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c1f8eb6a/aria/modeling/service_template.py
----------------------------------------------------------------------
diff --git a/aria/modeling/service_template.py b/aria/modeling/service_template.py
index 9a07b53..f1c2bcb 100644
--- a/aria/modeling/service_template.py
+++ b/aria/modeling/service_template.py
@@ -1237,7 +1237,8 @@ class RequirementTemplateBase(TemplateModelMixin):
 
         # Find first node that matches the type
         elif self.target_node_type is not None:
-            for target_node_template in context.modeling.template.node_templates.itervalues():
+            for target_node_template in \
+                    self.node_template.service_template.node_templates.values():
                 if self.target_node_type.get_descendant(target_node_template.type.name) is None:
                     continue
 

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c1f8eb6a/aria/orchestrator/workflow_runner.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflow_runner.py b/aria/orchestrator/workflow_runner.py
index 7b043c5..0051e8e 100644
--- a/aria/orchestrator/workflow_runner.py
+++ b/aria/orchestrator/workflow_runner.py
@@ -23,7 +23,7 @@ from datetime import datetime
 
 from . import exceptions
 from .context.workflow import WorkflowContext
-from .workflows.builtin import BUILTIN_WORKFLOWS, BUILTIN_WORKFLOWS_PATH_PREFIX
+from .workflows import builtin
 from .workflows.core.engine import Engine
 from .workflows.executor.process import ProcessExecutor
 from ..modeling import models
@@ -31,8 +31,8 @@ from ..modeling import utils as modeling_utils
 from ..utils.imports import import_fullname
 
 
-DEFAULT_TASK_MAX_ATTEMPTS = 1
-DEFAULT_TASK_RETRY_INTERVAL = 1
+DEFAULT_TASK_MAX_ATTEMPTS = 30
+DEFAULT_TASK_RETRY_INTERVAL = 30
 
 
 class WorkflowRunner(object):
@@ -110,7 +110,7 @@ class WorkflowRunner(object):
             workflow_name=self._workflow_name,
             inputs={})
 
-        if self._workflow_name in BUILTIN_WORKFLOWS:
+        if self._workflow_name in builtin.BUILTIN_WORKFLOWS:
             workflow_inputs = dict()  # built-in workflows don't have any inputs
         else:
             workflow_inputs = self.service.workflows[self._workflow_name].inputs
@@ -123,7 +123,7 @@ class WorkflowRunner(object):
 
     def _validate_workflow_exists_for_service(self):
         if self._workflow_name not in self.service.workflows and \
-                        self._workflow_name not in BUILTIN_WORKFLOWS:
+                        self._workflow_name not in builtin.BUILTIN_WORKFLOWS:
             raise exceptions.UndeclaredWorkflowError(
                 'No workflow policy {0} declared in service {1}'
                 .format(self._workflow_name, self.service.name))
@@ -137,8 +137,8 @@ class WorkflowRunner(object):
                 .format(self.service.name, active_executions[0].id))
 
     def _get_workflow_fn(self):
-        if self._workflow_name in BUILTIN_WORKFLOWS:
-            return import_fullname('{0}.{1}'.format(BUILTIN_WORKFLOWS_PATH_PREFIX,
+        if self._workflow_name in builtin.BUILTIN_WORKFLOWS:
+            return import_fullname('{0}.{1}'.format(builtin.BUILTIN_WORKFLOWS_PATH_PREFIX,
                                                     self._workflow_name))
 
         workflow = self.service.workflows[self._workflow_name]

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/c1f8eb6a/tox.ini
----------------------------------------------------------------------
diff --git a/tox.ini b/tox.ini
index fa4bd5c..6ad048f 100644
--- a/tox.ini
+++ b/tox.ini
@@ -41,7 +41,7 @@ commands=pytest tests --cov-report term-missing --cov aria
 commands=pytest tests --cov-report term-missing --cov aria
 
 [testenv:pylint_code]
-commands=pylint --rcfile=aria/.pylintrc --disable=fixme,missing-docstring --ignore=commands.py aria
+commands=pylint --rcfile=aria/.pylintrc --disable=fixme,missing-docstring aria
 
 [testenv:pylint_tests]
 commands=pylint --rcfile=tests/.pylintrc --disable=fixme,missing-docstring tests