Repository: incubator-ariatosca
Updated Branches:
  refs/heads/ARIA-44-Merge-parser-and-storage-models 05b1cab24 -> fc6b9820c


added relationships in model_elements (Parameters excluded)


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

Branch: refs/heads/ARIA-44-Merge-parser-and-storage-models
Commit: 9ae5401280ff3a4c5955120526790715c6dd7153
Parents: 05b1cab
Author: mxmrlv <[email protected]>
Authored: Thu Jan 19 17:31:27 2017 +0200
Committer: mxmrlv <[email protected]>
Committed: Thu Jan 19 17:31:27 2017 +0200

----------------------------------------------------------------------
 aria/modeling/model_elements.py | 141 +++++++++++++++++++++++++++--------
 1 file changed, 108 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/9ae54012/aria/modeling/model_elements.py
----------------------------------------------------------------------
diff --git a/aria/modeling/model_elements.py b/aria/modeling/model_elements.py
index 7f0bb25..28cc553 100644
--- a/aria/modeling/model_elements.py
+++ b/aria/modeling/model_elements.py
@@ -19,35 +19,43 @@ from sqlalchemy import (
     Column,
     Text,
     Integer,
-    DateTime
+    ForeignKey
 )
+from sqlalchemy import orm
 
 from . import elements, instance_elements, utils
 from ..storage import structure, type
-from ..utils import collections
-from ..utils import formatting, console
+from ..utils import collections, formatting, console
 from ..parser import validation
 
-# region
+# region Elements
 
-class ServiceModel(elements.ModelElement, structure.ModelMixin):
+# TODO: fix the Parameters tables (maybe many to many/dynamic table creation).
 
-    __tablename__ = 'blueprints'
+
+class ServiceTemplate(elements.ModelElement, structure.ModelMixin):
+
+    __tablename__ = 'service_template'
 
     description = Column(Text)
     metadata = Column(Text)
-    node_templates = Column(type.StrictDict(str, "NodeTemplate"))
-    group_templates = Column(type.StrictDict(str, "GroupTemplate"))
-    policy_templates = Column(type.StrictDict(str, "PolicyTemplate"))
+    node_templates = orm.relationship('note_template')
+    group_templates = orm.relationship('group_template')
+    policy_templates = orm.relationship('policy_template')
     substitution_template = Column()
-    inputs = Column(type.StrictDict(str, "Parameter"))
-    outputs = Column(type.StrictDict(str, "Parameter"))
-    operation_templates = Column(type.StrictDict(str, "OperationTemplate"))
 
-    created_at = Column(DateTime, nullable=False, index=True)
-    main_file_name = Column(Text, nullable=False)
-    plan = Column(type.Dict, nullable=False)
-    updated_at = Column(DateTime)
+    inputs = Column(type.StrictDict(str, elements.Parameter))
+    # inputs = orm.relationship(elements.Parameter)
+    outputs = Column(type.StrictDict(str, elements.Parameter))
+    # outputs = orm.relationship(elements.Parameter)
+
+    # operation_templates = Column(type.StrictDict(str, OperationTemplate))
+    operation_tepmlates = orm.relationship('operation_template')
+
+    # created_at = Column(DateTime, nullable=False, index=True)
+    # main_file_name = Column(Text, nullable=False)
+    # plan = Column(type.Dict, nullable=False)
+    # updated_at = Column(DateTime)
 
     @property
     def as_raw(self):
@@ -138,10 +146,20 @@ class ServiceModel(elements.ModelElement, 
structure.ModelMixin):
 
 
 class InterfaceTemplate(elements.ModelElement, structure.ModelMixin):
+    __tablename__ = 'interface_template'
+    # region foreign keys
+    node_template_fk = Column(Integer, ForeignKey('node_template.id'))
+    group_template_fk = Column(Integer, ForeignKey('group_template.id'))
+
+    # endregion
+
     description = Column(Text)
     type_name = Column(Text)
+
     inputs = Column(type.StrictDict(basestring, elements.Parameter))
-    operation_templates = Column(type.StrictDict(basestring, 
OperationTemplate))
+
+    operation_templates = orm.relationship('operation_template')
+    # operation_templates = Column(type.StrictDict(basestring, 
OperationTemplate))
 
     @property
     def as_raw(self):
@@ -185,6 +203,12 @@ class InterfaceTemplate(elements.ModelElement, 
structure.ModelMixin):
 
 
 class OperationTemplate(elements.ModelElement, structure.ModelMixin):
+    __tablename__ = 'operation_template'
+    # region foreign keys
+    service_template_fk = Column(Integer, ForeignKey('service_template.id'))
+    interface_template_fk = Column(Integer, 
ForeignKey('interface_template.id'))
+
+    # endregion
 
     description = Column(Text)
     implementation = Column()
@@ -257,6 +281,11 @@ class ArtifactTemplate(elements.ModelElement, 
structure.ModelMixin):
     * :code:`repository_credential`: Dict of string
     * :code:`properties`: Dict of :class:`Parameter`
     """
+    __tablename__ = 'artifact_template'
+    # region foreign keys
+    node_template_fk = Column(Integer, ForeignKey('node_template.id'))
+
+    # endregion
 
     description = Column(Text)
     type_name = Column(Text)
@@ -330,6 +359,11 @@ class PolicyTemplate(elements.ModelElement, 
structure.ModelMixin):
     * :code:`target_node_template_names`: Must be represented in the 
:class:`ServiceModel`
     * :code:`target_group_template_names`: Must be represented in the 
:class:`ServiceModel`
     """
+    __tablename__ = 'policy_template'
+    # region foreign keys
+    service_template_fk = Column(Integer, ForeignKey('service_template.id'))
+
+    # endregion
 
     description = Column(Text)
     type_name = Column(Text)
@@ -397,10 +431,18 @@ class GroupPolicyTemplate(elements.ModelElement, 
structure.ModelMixin):
     * :code:`triggers`: Dict of :class:`GroupPolicyTrigger`
     """
 
+    __tablename__ = 'group_policy_template'
+    # region foreign keys
+    group_template_fk = Column(Integer, ForeignKey('group_template.id'))
+
+
     description = Column(Text)
     type_name = Column(Text)
     properties = Column(type.StrictDict(basestring, elements.Parameter))
-    triggers = Column(type.StrictDict(basestring, GroupPolicyTriggerTemplate))
+
+
+    triggers = orm.relationship('group_policy_trigger_template')
+    # triggers = Column(type.StrictDict(basestring, 
GroupPolicyTriggerTemplate))
 
     @property
     def as_raw(self):
@@ -452,6 +494,11 @@ class GroupPolicyTriggerTemplate(elements.ModelElement, 
structure.ModelMixin):
     * :code:`implementation`: Implementation string (interpreted by the 
orchestrator)
     * :code:`properties`: Dict of :class:`Parameter`
     """
+    __tablename__ = 'group_policy_trigger_template'
+    # region foreign keys
+    group_policy_template_fk = Column(Integer, 
ForeignKey('group_policy_template.id'))
+
+    # endregion
 
     description = Column(Text)
     # Check: ???
@@ -498,6 +545,7 @@ class MappingTemplate(elements.ModelElement, 
structure.ModelMixin):
     * :code:`node_template_name`: Must be represented in the 
:class:`ServiceModel`
     * :code:`name`: Name of capability or requirement at the node template
     """
+    __tablename__ = 'mapping_template'
 
     mapped_name = Column(Text)
     node_template_name = Column(Text)
@@ -544,14 +592,12 @@ class SubstitutionTemplate(elements.ModelElement, 
structure.ModelMixin):
     * :code:`capability_templates`: Dict of :class:`MappingTemplate`
     * :code:`requirement_templates`: Dict of :class:`MappingTemplate`
     """
+    __tablename__ = 'substituion_template'
+    node_type_name = Column(Text)
 
-    def __init__(self, node_type_name):
-        if not isinstance(node_type_name, basestring):
-            raise ValueError('must set node_type_name (string)')
-
-        self.node_type_name = node_type_name
-        self.capability_templates = Column(type.StrictDict(basestring, 
MappingTemplate))
-        self.requirement_templates = Column(type.StrictDict(basestring, 
MappingTemplate))
+    # TODO: same as parameters, many to many relationship
+    capability_templates = Column(type.StrictDict(basestring, MappingTemplate))
+    requirement_templates = Column(type.StrictDict(basestring, 
MappingTemplate))
 
     @property
     def as_raw(self):
@@ -593,19 +639,30 @@ class SubstitutionTemplate(elements.ModelElement, 
structure.ModelMixin):
 
 # endregion
 
-# region
+# region Nodes
 
 class NodeTemplate(elements.ModelElement, structure.ModelMixin):
+    __tablename__ = 'node_template'
+
+    # region foreign_keys
+    service_template_fk = Column(Integer, ForeignKey('service_template.id'))
+
+    # endregion
+
     description = Column(Text)
     type_name = Column(Text)
     default_instances = Column(Integer, default=1)
     min_instances = Column(Integer, default=0)
     man_instances = Column(Integer, default=None)
+
     properties = Column(type.StrictDict(basestring, elements.Parameter))
-    interface_templates = Column(type.StrictDict(basestring, 
InterfaceTemplate))
-    artifact_templates = Column(type.StrictDict(basestring, ArtifactTemplate))
-    capability_templataes = Column(type.StrictDict(basestring, 
CapabilityTemplate))
-    target_node_template_constraints = 
Column(type.StrictList(elements.FunctionType))
+
+    interface_templates = orm.relationship('interface_template')
+    artifact_templates = orm.relationship('artifact_template')
+    capability_templates = orm.relationship('capability_template')
+    requirement_templates = orm.relationship('requirement_template')
+
+    target_node_template_constraints = Column(type.StrictList(FunctionType))
 
     def is_target_node_valid(self, target_node_template):
         if self.target_node_template_constraints:
@@ -694,12 +751,19 @@ class GroupTemplate(elements.ModelElement, 
structure.ModelMixin):
     * :code:`member_node_template_names`: Must be represented in the 
:class:`ServiceModel`
     * :code:`member_group_template_names`: Must be represented in the 
:class:`ServiceModel`
     """
+    __tablename__ = 'group_template'
+    # region foreign keys
+    service_template_fk = Column(Integer, ForeignKey('service_template.id'))
+
+    # endregion
 
     description = Column(Text)
     type_name = Column(Text)
     properties = Column(type.StrictDict(basestring, elements.Parameter))
-    interface_templates = Column(type.StrictDict(basestring, 
InterfaceTemplate))
-    policy_templates = Column(type.StrictDict(basestring, GroupPolicyTemplate))
+
+    interface_templates = orm.relationship('interface_template')
+    policy_templates = orm.relationship('policy_template')
+
     member_node_template_names = Column(type.StrictList(basestring))
     member_group_template_names = Column(type.StrictList(basestring))
 
@@ -760,7 +824,7 @@ class GroupTemplate(elements.ModelElement, 
structure.ModelMixin):
 
 # endregion
 
-# region
+# region Relationship
 
 class RequirementTemplate(elements.ModelElement, structure.ModelMixin):
     """
@@ -781,6 +845,11 @@ class RequirementTemplate(elements.ModelElement, 
structure.ModelMixin):
     * :code:`target_capability_name`: Name of capability in target node
     * :code:`relationship_template`: :class:`RelationshipTemplate`
     """
+    __tablename__ = 'requirement_template'
+    # region foreign keys
+    node_template_fk = Column(Integer, ForeignKey('node_template.id'))
+
+    # endregion
 
     target_node_type_name = Column(Text)
     target_node_template_name = Column(Text)
@@ -925,6 +994,11 @@ class CapabilityTemplate(elements.ModelElement, 
structure.ModelMixin):
     * :code:`valid_source_node_type_names`: Must be represented in the 
:class:`ModelingContext`
     * :code:`properties`: Dict of :class:`Parameter`
     """
+    __tablename__ = 'capability_template'
+    # region foreign keys
+    node_template_fk = Column(Integer, ForeignKey('node_template.id'))
+
+    # endregion
 
     description = Column(Text)
     type_name = Column(Text)
@@ -1007,6 +1081,7 @@ class CapabilityTemplate(elements.ModelElement, 
structure.ModelMixin):
                                   for v in self.valid_source_node_type_names)))
             dump_parameters(context, self.properties)
 
+# endregion
 
 
 def dump_parameters(context, parameters, name='Properties'):

Reply via email to