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 <[email protected]> Authored: Thu Jun 1 11:25:49 2017 +0300 Committer: max-orlov <[email protected]> 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):
