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/27 14:13:08 UTC
incubator-ariatosca git commit: ARIA-158 Restore support for
relationship ordering [Forced Update!]
Repository: incubator-ariatosca
Updated Branches:
refs/heads/ARIA-158-Restore-support-for-relationship-ordering f1e97e608 -> eb04bd182 (forced update)
ARIA-158 Restore support for relationship ordering
Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/eb04bd18
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/eb04bd18
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/eb04bd18
Branch: refs/heads/ARIA-158-Restore-support-for-relationship-ordering
Commit: eb04bd182a058c37451b579b1b52e2358c7cb5cc
Parents: 5bc28b6
Author: max-orlov <ma...@gigaspaces.com>
Authored: Thu Apr 27 17:09:14 2017 +0300
Committer: max-orlov <ma...@gigaspaces.com>
Committed: Thu Apr 27 17:13:02 2017 +0300
----------------------------------------------------------------------
aria/modeling/relationship.py | 9 ++++++---
aria/modeling/service_instance.py | 27 ++++++++++++++++++++-------
tests/modeling/test_mixins.py | 7 +++++--
3 files changed, 31 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/eb04bd18/aria/modeling/relationship.py
----------------------------------------------------------------------
diff --git a/aria/modeling/relationship.py b/aria/modeling/relationship.py
index e6830b8..f5e63af 100644
--- a/aria/modeling/relationship.py
+++ b/aria/modeling/relationship.py
@@ -14,7 +14,7 @@
# limitations under the License.
# pylint: disable=invalid-name, redefined-outer-name
-
+from sqlalchemy.ext.orderinglist import ordering_list
from sqlalchemy.orm import relationship, backref
from sqlalchemy.orm.collections import attribute_mapped_collection
from sqlalchemy import (
@@ -161,7 +161,8 @@ def one_to_many(model_class,
child_table,
child_fk=None,
dict_key=None,
- back_populates=None):
+ back_populates=None,
+ rel_kwargs=None):
"""
Declare a one-to-many relationship property. The property value would be a list or dict of
instances of the child table's model.
@@ -186,6 +187,8 @@ def one_to_many(model_class,
false to disable
:type back_populates: basestring|bool
"""
+ rel_kwargs = rel_kwargs or {}
+ rel_kwargs.setdefault('cascade', 'all')
if back_populates is None:
back_populates = model_class.__tablename__
return _relationship(
@@ -194,7 +197,7 @@ def one_to_many(model_class,
back_populates=back_populates,
other_fk=child_fk,
dict_key=dict_key,
- relationship_kwargs=dict(cascade='all'))
+ relationship_kwargs=rel_kwargs)
def many_to_one(model_class,
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/eb04bd18/aria/modeling/service_instance.py
----------------------------------------------------------------------
diff --git a/aria/modeling/service_instance.py b/aria/modeling/service_instance.py
index 6d8f3fe..d5391ef 100644
--- a/aria/modeling/service_instance.py
+++ b/aria/modeling/service_instance.py
@@ -25,6 +25,7 @@ from sqlalchemy import (
from sqlalchemy import DateTime
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.ext.declarative import declared_attr
+from sqlalchemy.ext.orderinglist import ordering_list
from .mixins import InstanceModelMixin
from ..orchestrator import execution_plugin
@@ -485,12 +486,22 @@ class NodeBase(InstanceModelMixin):
@declared_attr
def outbound_relationships(cls):
return relationship.one_to_many(
- cls, 'relationship', child_fk='source_node_fk', back_populates='source_node')
+ cls, 'relationship', child_fk='source_node_fk', back_populates='source_node',
+ rel_kwargs=dict(
+ order_by='Relationship.source_position',
+ collection_class=ordering_list('source_position', count_from=0)
+ )
+ )
@declared_attr
def inbound_relationships(cls):
return relationship.one_to_many(
- cls, 'relationship', child_fk='target_node_fk', back_populates='target_node')
+ cls, 'relationship', child_fk='target_node_fk', back_populates='target_node',
+ rel_kwargs=dict(
+ order_by='Relationship.target_position',
+ collection_class=ordering_list('target_position', count_from=0)
+ )
+ )
# endregion
@@ -1166,9 +1177,9 @@ class RelationshipBase(InstanceModelMixin):
:vartype properties: {basestring: :class:`Parameter`}
:ivar interfaces: Bundles of operations
:vartype interfaces: {basestring: :class:`Interfaces`}
- :ivar source_position: ??
+ :ivar source_position: The position of the relationship in the outbound relationships.
:vartype source_position: int
- :ivar target_position: ??
+ :ivar target_position: The position of the relationship in the inbound relationships.
:vartype target_position: int
:ivar source_node: Source node
:vartype source_node: :class:`Node`
@@ -1185,7 +1196,9 @@ class RelationshipBase(InstanceModelMixin):
'target_node_fk',
'target_capability_fk',
'requirement_template_fk',
- 'relationship_template_fk']
+ 'relationship_template_fk',
+ 'target_position',
+ 'source_position']
# region foreign keys
@@ -1289,8 +1302,8 @@ class RelationshipBase(InstanceModelMixin):
# endregion
- source_position = Column(Integer) # ???
- target_position = Column(Integer) # ???
+ source_position = Column(Integer)
+ target_position = Column(Integer)
def configure_operations(self):
for interface in self.interfaces.itervalues():
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/eb04bd18/tests/modeling/test_mixins.py
----------------------------------------------------------------------
diff --git a/tests/modeling/test_mixins.py b/tests/modeling/test_mixins.py
index 651f53f..cd7cadf 100644
--- a/tests/modeling/test_mixins.py
+++ b/tests/modeling/test_mixins.py
@@ -155,7 +155,10 @@ def test_relationship_model_ordering(context):
"""
assert direction in ('inbound', 'outbound')
- relationships = getattr(node, direction + '_relationships')
+ def get_relationships():
+ return getattr(node, direction + '_relationships')
+
+ relationships = get_relationships()
assert len(relationships) == 2
reversed_relationship = list(reversed(relationships))
@@ -163,7 +166,7 @@ def test_relationship_model_ordering(context):
relationships[:] = reversed_relationship
context.model.node.update(node)
- assert relationships == reversed_relationship
+ assert get_relationships() == reversed_relationship
flip_and_assert(source_node, 'outbound')
flip_and_assert(target_node, 'inbound')