Add property many-to-one relationships

To:
node template, node,
group template, group,
policy template, policy,
relationship template, relationship,
capability template, capability,
artifact template, artifact.


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

Branch: refs/heads/ARIA-180-convert-parameter-to-one-to-many
Commit: 3e562785ce389d2f9d748729a96115cad7f19def
Parents: b0d251f
Author: Avia Efrat <a...@gigaspaces.com>
Authored: Wed May 24 17:59:27 2017 +0300
Committer: Avia Efrat <a...@gigaspaces.com>
Committed: Thu Jun 1 12:05:17 2017 +0300

----------------------------------------------------------------------
 aria/modeling/service_common.py   | 178 +++++++++++++++++++++++++++------
 aria/modeling/service_instance.py |  58 +++++------
 aria/modeling/service_template.py |  56 +++++------
 3 files changed, 194 insertions(+), 98 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3e562785/aria/modeling/service_common.py
----------------------------------------------------------------------
diff --git a/aria/modeling/service_common.py b/aria/modeling/service_common.py
index 1606e78..11f9d01 100644
--- a/aria/modeling/service_common.py
+++ b/aria/modeling/service_common.py
@@ -85,7 +85,6 @@ class ParameterBase(TemplateModelMixin, 
caching.HasCachedMethods):
 
         raise ValueError('orphaned parameter: does not have an owner: 
{0}'.format(self.name))
 
-
     @property
     @caching.cachedmethod
     def container(self): # pylint: 
disable=too-many-return-statements,too-many-branches
@@ -875,6 +874,121 @@ class PropertyBase(TemplateModelMixin, 
caching.HasCachedMethods):
     def value(self, value):
         self._value = value
 
+    # region foreign keys
+
+    @declared_attr
+    def node_template_fk(cls):
+        """For Property many-to-one to NodeTemplate"""
+        return relationship.foreign_key('node_template', nullable=True)
+
+    @declared_attr
+    def group_template_fk(cls):
+        """For Property many-to-one to GroupTemplate"""
+        return relationship.foreign_key('group_template', nullable=True)
+
+    @declared_attr
+    def policy_template_fk(cls):
+        """For Property many-to-one to PolicyTemplate"""
+        return relationship.foreign_key('policy_template', nullable=True)
+
+    @declared_attr
+    def relationship_template_fk(cls):
+        """For Property many-to-one to RelationshipTemplate"""
+        return relationship.foreign_key('relationship_template', nullable=True)
+
+    @declared_attr
+    def capability_template_fk(cls):
+        """For Property many-to-one to CapabilityTemplate"""
+        return relationship.foreign_key('capability_template', nullable=True)
+
+    @declared_attr
+    def artifact_template_fk(cls):
+        """For Property many-to-one to ArtifactTemplate"""
+        return relationship.foreign_key('artifact_template', nullable=True)
+
+    @declared_attr
+    def node_fk(cls):
+        """For Property many-to-one to Node"""
+        return relationship.foreign_key('node', nullable=True)
+
+    @declared_attr
+    def group_fk(cls):
+        """For Property many-to-one to Group"""
+        return relationship.foreign_key('group', nullable=True)
+
+    @declared_attr
+    def policy_fk(cls):
+        """For Property many-to-one to Policy"""
+        return relationship.foreign_key('policy', nullable=True)
+
+    @declared_attr
+    def relationship_fk(cls):
+        """For Property many-to-one to Relationship"""
+        return relationship.foreign_key('relationship', nullable=True)
+
+    @declared_attr
+    def capability_fk(cls):
+        """For Property many-to-one to Capability"""
+        return relationship.foreign_key('capability', nullable=True)
+
+    @declared_attr
+    def artifact_fk(cls):
+        """For Property many-to-one to Artifact"""
+        return relationship.foreign_key('artifact', nullable=True)
+    # endregion
+
+    # region many_to_one relationships
+
+    @declared_attr
+    def node_template(cls):
+        return relationship.many_to_one(cls, 'node_template')
+
+    @declared_attr
+    def group_template(cls):
+        return relationship.many_to_one(cls, 'group_template')
+
+    @declared_attr
+    def policy_template(cls):
+        return relationship.many_to_one(cls, 'policy_template')
+
+    @declared_attr
+    def relationship_template(cls):
+        return relationship.many_to_one(cls, 'relationship_template')
+
+    @declared_attr
+    def capability_template(cls):
+        return relationship.many_to_one(cls, 'capability_template')
+
+    @declared_attr
+    def artifact_template(cls):
+        return relationship.many_to_one(cls, 'artifact_template')
+
+    @declared_attr
+    def node(cls):
+        return relationship.many_to_one(cls, 'node')
+
+    @declared_attr
+    def group(cls):
+        return relationship.many_to_one(cls, 'group')
+
+    @declared_attr
+    def policy(cls):
+        return relationship.many_to_one(cls, 'policy')
+
+    @declared_attr
+    def relationship(cls):
+        return relationship.many_to_one(cls, 'relationship')
+
+    @declared_attr
+    def capability(cls):
+        return relationship.many_to_one(cls, 'capability')
+
+    @declared_attr
+    def artifact(cls):
+        return relationship.many_to_one(cls, 'artifact')
+
+    # endregion
+
     @property
     @caching.cachedmethod
     def owner(self):
@@ -889,7 +1003,7 @@ class PropertyBase(TemplateModelMixin, 
caching.HasCachedMethods):
         for the_relationship in self.__mapper__.relationships:
             v = getattr(self, the_relationship.key)
             if v:
-                return v[0] # because we are many-to-many, the back reference 
will be a list
+                return v
 
         raise ValueError('orphaned property: does not have an owner: 
{0}'.format(self.name))
 
@@ -943,36 +1057,36 @@ class PropertyBase(TemplateModelMixin, 
caching.HasCachedMethods):
 
         raise ValueError('orphaned property: does not have a container: 
{0}'.format(self.name))
 
-    # @property
-    # @caching.cachedmethod
-    # def service(self):
-    #     """
-    #     The :class:`Service` containing this parameter, or None if not 
contained in a service.
-    #     """
-    #
-    #     from . import models
-    #     container = self.container
-    #     if isinstance(container, models.Service):
-    #         return container
-    #     elif hasattr(container, 'service'):
-    #         return container.service
-    #     return None
-    #
-    # @property
-    # @caching.cachedmethod
-    # def service_template(self):
-    #     """
-    #     The :class:`ServiceTemplate` containing this parameter, or None if 
not contained in a
-    #     service template.
-    #     """
-    #
-    #     from . import models
-    #     container = self.container
-    #     if isinstance(container, models.ServiceTemplate):
-    #         return container
-    #     elif hasattr(container, 'service_template'):
-    #         return container.service_template
-    #     return None
+    @property
+    @caching.cachedmethod
+    def service(self):
+        """
+        The :class:`Service` containing this parameter, or None if not 
contained in a service.
+        """
+
+        from . import models
+        container = self.container
+        if isinstance(container, models.Service):
+            return container
+        elif hasattr(container, 'service'):
+            return container.service
+        return None
+
+    @property
+    @caching.cachedmethod
+    def service_template(self):
+        """
+        The :class:`ServiceTemplate` containing this parameter, or None if not 
contained in a
+        service template.
+        """
+
+        from . import models
+        container = self.container
+        if isinstance(container, models.ServiceTemplate):
+            return container
+        elif hasattr(container, 'service_template'):
+            return container.service_template
+        return None
 
     @property
     def as_raw(self):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3e562785/aria/modeling/service_instance.py
----------------------------------------------------------------------
diff --git a/aria/modeling/service_instance.py 
b/aria/modeling/service_instance.py
index fcd7a55..e6fbc6c 100644
--- a/aria/modeling/service_instance.py
+++ b/aria/modeling/service_instance.py
@@ -465,6 +465,10 @@ class NodeBase(InstanceModelMixin):
         return relationship.one_to_many(cls, 'interface', dict_key='name')
 
     @declared_attr
+    def properties(cls):
+        return relationship.one_to_many(cls, 'property', dict_key='name')
+
+    @declared_attr
     def artifacts(cls):
         return relationship.one_to_many(cls, 'artifact', dict_key='name')
 
@@ -513,10 +517,6 @@ class NodeBase(InstanceModelMixin):
     # region many_to_many relationships
 
     @declared_attr
-    def properties(cls):
-        return relationship.many_to_many(cls, 'property', dict_key='name')
-
-    @declared_attr
     def attributes(cls):
         return relationship.many_to_many(cls, 'parameter', 
prefix='attributes', dict_key='name')
 
@@ -758,6 +758,10 @@ class GroupBase(InstanceModelMixin):
     # region one_to_many relationships
 
     @declared_attr
+    def properties(cls):
+        return relationship.one_to_many(cls, 'property', dict_key='name')
+
+    @declared_attr
     def interfaces(cls):
         return relationship.one_to_many(cls, 'interface', dict_key='name')
 
@@ -785,10 +789,6 @@ class GroupBase(InstanceModelMixin):
     def nodes(cls):
         return relationship.many_to_many(cls, 'node')
 
-    @declared_attr
-    def properties(cls):
-        return relationship.many_to_many(cls, 'property', dict_key='name')
-
     # endregion
 
     description = Column(Text)
@@ -881,6 +881,10 @@ class PolicyBase(InstanceModelMixin):
 
     # region one_to_many relationships
 
+    @declared_attr
+    def properties(cls):
+        return relationship.one_to_many(cls, 'property', dict_key='name')
+
     # endregion
 
     # region many_to_one relationships
@@ -902,10 +906,6 @@ class PolicyBase(InstanceModelMixin):
     # region many_to_many relationships
 
     @declared_attr
-    def properties(cls):
-        return relationship.many_to_many(cls, 'property', dict_key='name')
-
-    @declared_attr
     def nodes(cls):
         return relationship.many_to_many(cls, 'node')
 
@@ -1255,6 +1255,10 @@ class RelationshipBase(InstanceModelMixin):
     def interfaces(cls):
         return relationship.one_to_many(cls, 'interface', dict_key='name')
 
+    @declared_attr
+    def properties(cls):
+        return relationship.one_to_many(cls, 'property', dict_key='name')
+
     # endregion
 
     # region many_to_one relationships
@@ -1283,14 +1287,6 @@ class RelationshipBase(InstanceModelMixin):
 
     # endregion
 
-    # region many_to_many relationships
-
-    @declared_attr
-    def properties(cls):
-        return relationship.many_to_many(cls, 'property', dict_key='name')
-
-    # endregion
-
     source_position = Column(Integer)
     target_position = Column(Integer)
 
@@ -1401,6 +1397,10 @@ class CapabilityBase(InstanceModelMixin):
 
     # region one_to_many relationships
 
+    @declared_attr
+    def properties(cls):
+        return relationship.one_to_many(cls, 'property', dict_key='name')
+
     # endregion
 
     # region many_to_one relationships
@@ -1419,14 +1419,6 @@ class CapabilityBase(InstanceModelMixin):
 
     # endregion
 
-    # region many_to_many relationships
-
-    @declared_attr
-    def properties(cls):
-        return relationship.many_to_many(cls, 'property', dict_key='name')
-
-    # endregion
-
     min_occurrences = Column(Integer, default=None)
     max_occurrences = Column(Integer, default=None)
     occurrences = Column(Integer, default=0)
@@ -1886,6 +1878,10 @@ class ArtifactBase(InstanceModelMixin):
 
     # region one_to_many relationships
 
+    @declared_attr
+    def properties(cls):
+        return relationship.one_to_many(cls, 'property', dict_key='name')
+
     # endregion
 
     # region many_to_one relationships
@@ -1902,12 +1898,6 @@ class ArtifactBase(InstanceModelMixin):
         return relationship.many_to_one(cls, 'type', 
back_populates=relationship.NO_BACK_POP)
     # endregion
 
-    # region many_to_many relationships
-    @declared_attr
-    def properties(cls):
-        return relationship.many_to_many(cls, 'property', dict_key='name')
-    # endregion
-
     description = Column(Text)
     source_path = Column(Text)
     target_path = Column(Text)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3e562785/aria/modeling/service_template.py
----------------------------------------------------------------------
diff --git a/aria/modeling/service_template.py 
b/aria/modeling/service_template.py
index 5739d18..9ddaae8 100644
--- a/aria/modeling/service_template.py
+++ b/aria/modeling/service_template.py
@@ -495,6 +495,10 @@ class NodeTemplateBase(TemplateModelMixin):
     def requirement_templates(cls):
         return relationship.one_to_many(cls, 'requirement_template', 
child_fk='node_template_fk')
 
+    @declared_attr
+    def properties(cls):
+        return relationship.one_to_many(cls, 'property', dict_key='name')
+
     # endregion
 
     # region many_to_one relationships
@@ -512,10 +516,6 @@ class NodeTemplateBase(TemplateModelMixin):
     # region many_to_many relationships
 
     @declared_attr
-    def properties(cls):
-        return relationship.many_to_many(cls, 'property', dict_key='name')
-
-    @declared_attr
     def attributes(cls):
         return relationship.many_to_many(cls, 'parameter', 
prefix='attributes', dict_key='name')
 
@@ -677,6 +677,10 @@ class GroupTemplateBase(TemplateModelMixin):
     def interface_templates(cls):
         return relationship.one_to_many(cls, 'interface_template', 
dict_key='name')
 
+    @declared_attr
+    def properties(cls):
+        return relationship.one_to_many(cls, 'property', dict_key='name')
+
     # endregion
 
     # region many_to_one relationships
@@ -697,10 +701,6 @@ class GroupTemplateBase(TemplateModelMixin):
     def node_templates(cls):
         return relationship.many_to_many(cls, 'node_template')
 
-    @declared_attr
-    def properties(cls):
-        return relationship.many_to_many(cls, 'property', dict_key='name')
-
     # endregion
 
     description = Column(Text)
@@ -804,6 +804,10 @@ class PolicyTemplateBase(TemplateModelMixin):
     def policies(cls):
         return relationship.one_to_many(cls, 'policy')
 
+    @declared_attr
+    def properties(cls):
+        return relationship.one_to_many(cls, 'property', dict_key='name')
+
     # endregion
 
     # region many_to_one relationships
@@ -828,10 +832,6 @@ class PolicyTemplateBase(TemplateModelMixin):
     def group_templates(cls):
         return relationship.many_to_many(cls, 'group_template')
 
-    @declared_attr
-    def properties(cls):
-        return relationship.many_to_many(cls, 'property', dict_key='name')
-
     # endregion
 
     description = Column(Text)
@@ -1371,6 +1371,10 @@ class RelationshipTemplateBase(TemplateModelMixin):
     def interface_templates(cls):
         return relationship.one_to_many(cls, 'interface_template', 
dict_key='name')
 
+    @declared_attr
+    def properties(cls):
+        return relationship.one_to_many(cls, 'property', dict_key='name')
+
     # endregion
 
     # region many_to_one relationships
@@ -1381,14 +1385,6 @@ class RelationshipTemplateBase(TemplateModelMixin):
 
     # endregion
 
-    # region many_to_many relationships
-
-    @declared_attr
-    def properties(cls):
-        return relationship.many_to_many(cls, 'property', dict_key='name')
-
-    # endregion
-
     description = Column(Text)
 
     @property
@@ -1493,6 +1489,10 @@ class CapabilityTemplateBase(TemplateModelMixin):
     def capabilities(cls):
         return relationship.one_to_many(cls, 'capability')
 
+    @declared_attr
+    def properties(cls):
+        return relationship.one_to_many(cls, 'property', dict_key='name')
+
     # endregion
 
     # region many_to_one relationships
@@ -1513,10 +1513,6 @@ class CapabilityTemplateBase(TemplateModelMixin):
     def valid_source_node_types(cls):
         return relationship.many_to_many(cls, 'type', prefix='valid_sources')
 
-    @declared_attr
-    def properties(cls):
-        return relationship.many_to_many(cls, 'property', dict_key='name')
-
     # endregion
 
     description = Column(Text)
@@ -1986,6 +1982,10 @@ class ArtifactTemplateBase(TemplateModelMixin):
     def artifacts(cls):
         return relationship.one_to_many(cls, 'artifact')
 
+    @declared_attr
+    def properties(cls):
+        return relationship.one_to_many(cls, 'property', dict_key='name')
+
     # endregion
 
     # region many_to_one relationships
@@ -2000,14 +2000,6 @@ class ArtifactTemplateBase(TemplateModelMixin):
 
     # endregion
 
-    # region many_to_many relationships
-
-    @declared_attr
-    def properties(cls):
-        return relationship.many_to_many(cls, 'property', prefix='properties', 
dict_key='name')
-
-    # endregion
-
     description = Column(Text)
     source_path = Column(Text)
     target_path = Column(Text)

Reply via email to