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/06/01 13:35:18 UTC

[6/7] incubator-ariatosca git commit: wip2

wip2


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

Branch: refs/heads/ARIA-262-Inconsistent-node-attributes-behavior
Commit: e67a58fda607b1934ddc3088ffbe7b01038d10aa
Parents: dffcb98
Author: max-orlov <ma...@gigaspaces.com>
Authored: Thu Jun 1 11:25:49 2017 +0300
Committer: max-orlov <ma...@gigaspaces.com>
Committed: Thu Jun 1 11:45:39 2017 +0300

----------------------------------------------------------------------
 .../context/collection_instrumentation.py       | 27 ++++++++++++--------
 aria/orchestrator/context/operation.py          | 10 +++-----
 2 files changed, 20 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/e67a58fd/aria/orchestrator/context/collection_instrumentation.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/context/collection_instrumentation.py b/aria/orchestrator/context/collection_instrumentation.py
index 00a9227..57547ea 100644
--- a/aria/orchestrator/context/collection_instrumentation.py
+++ b/aria/orchestrator/context/collection_instrumentation.py
@@ -13,26 +13,28 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from functools import partial
-
 from aria.modeling import models
 
 
 class _Wrapper(object):
 
-    def __init__(self, instrumented_cls, instrumentation_cls, wrapped, **kwargs):
+    def __init__(self, instrumented_cls, instrumentation_cls, wrapped, original_model, **kwargs):
         self._instrumented_cls = instrumented_cls
         self._instrumentation_cls = instrumentation_cls
         self._wrapped = wrapped
+        self._original_model = original_model
         self._kwargs = kwargs
 
     def _wrap(self, value):
         from aria.modeling.models import aria_declarative_base
         if isinstance(value, self._instrumented_cls):
-            return Instrument(**self._kwargs)
+            return Instrument(original_model=value, **self._kwargs)
         elif isinstance(value, aria_declarative_base):
-            return _Wrapper(
-                self._instrumented_cls, self._instrumentation_cls, value, **self._kwargs)
+            return _Wrapper(self._instrumented_cls,
+                            self._instrumentation_cls,
+                            value,
+                            self._original_model,
+                            **self._kwargs)
         return value
 
     def __getattr__(self, item):
@@ -228,21 +230,26 @@ class _InstrumentedList(_InstrumentedCollection, list):
 
 class Instrument(object):
 
-    def __init__(self, original_model, model_storage, field_names):
+    def __init__(self, original_model, model_storage, field_names, apply_to_downstream=True):
         super(Instrument, self).__init__()
         self._field_names = field_names
         self._model_storage = model_storage
         self._original_model = original_model
         self._instrumentation_cls = self._apply_instrumentation()
+        self._apply_to_downstream = apply_to_downstream
 
     def __getattr__(self, item):
         return_value = getattr(self._original_model, item)
-        if isinstance(return_value, (list, dict)):
+        if self._apply_to_downstream and isinstance(return_value, (list, dict)):
+            if isinstance(return_value, self._original_model.__class__):
+                tracking_instance = return_value
+            else:
+                tracking_instance = self._original_model
             return _Wrapper(self._original_model.__class__,
                             self._instrumentation_cls,
                             return_value,
-                            field_name=self._field_names,
-                            original_model=self._original_model,
+                            field_names=self._field_names,
+                            original_model=tracking_instance,
                             model_storage=self._model_storage,
                             )
         return return_value

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/e67a58fd/aria/orchestrator/context/operation.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/context/operation.py b/aria/orchestrator/context/operation.py
index 07ff3cb..86ed538 100644
--- a/aria/orchestrator/context/operation.py
+++ b/aria/orchestrator/context/operation.py
@@ -21,11 +21,7 @@ import threading
 
 import aria
 from aria.utils import file
-from aria.modeling import models
-from . import (
-    common,
-    collection_instrumentation
-)
+from . import common
 
 
 class BaseOperationContext(common.BaseContext):
@@ -122,7 +118,7 @@ class NodeOperationContext(BaseOperationContext):
         the node of the current operation
         :return:
         """
-        return self.instrument(self.node.node_template, 'attributes', 'properties')
+        return self.instrument(self.node.node_template, 'attributes')
 
     @property
     def node(self):
@@ -130,7 +126,7 @@ class NodeOperationContext(BaseOperationContext):
         The node instance of the current operation
         :return:
         """
-        return self.instrument(self.model.node.get(self._actor_id), 'attributes', 'properties')
+        return self.instrument(self.model.node.get(self._actor_id), 'attributes')
 
 
 class RelationshipOperationContext(BaseOperationContext):