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'):
