Repository: incubator-ariatosca Updated Branches: refs/heads/ARIA-132-Models-cascading-deletion-raises-constraint-errors ec65383d7 -> 1ecf657bf (forced update)
relationship fixes Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/1ecf657b Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/1ecf657b Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/1ecf657b Branch: refs/heads/ARIA-132-Models-cascading-deletion-raises-constraint-errors Commit: 1ecf657bfa618561b92db6066625cd765fb0bc47 Parents: 6737b62 Author: max-orlov <[email protected]> Authored: Mon Mar 27 12:56:05 2017 +0300 Committer: max-orlov <[email protected]> Committed: Mon Mar 27 13:29:43 2017 +0300 ---------------------------------------------------------------------- aria/modeling/relationship.py | 43 +++++++++++++++++----------------- aria/modeling/service_changes.py | 2 +- aria/modeling/service_instance.py | 34 +++++++++++++++------------ aria/modeling/service_template.py | 29 +++++++++++++++++------ setup.py | 1 - 5 files changed, 63 insertions(+), 46 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1ecf657b/aria/modeling/relationship.py ---------------------------------------------------------------------- diff --git a/aria/modeling/relationship.py b/aria/modeling/relationship.py index ffdffba..f22b0a9 100644 --- a/aria/modeling/relationship.py +++ b/aria/modeling/relationship.py @@ -181,12 +181,12 @@ def one_to_many(model_class, false to disable :type child_property: basestring|bool """ - return _relationship(model_class, child_table, - relationship_kwargs={ - 'back_populates': child_property or model_class.__tablename__ - }, - other_fk=child_fk, - dict_key=dict_key) + return _relationship( + model_class, + child_table, + relationship_kwargs={'back_populates': child_property or model_class.__tablename__}, + other_fk=child_fk, + dict_key=dict_key) def many_to_one(model_class, @@ -285,10 +285,13 @@ def many_to_many(model_class, other_foreign_key ) - return _relationship(model_class, other_table, - relationship_kwargs={'secondary': secondary_table}, - backref_kwargs={'name': other_property, 'uselist': True}, - dict_key=dict_key) + return _relationship( + model_class, + other_table, + relationship_kwargs={'secondary': secondary_table}, + backref_kwargs={'name': other_property, 'uselist': True} if other_property else None, + dict_key=dict_key + ) def _relationship(model_class, @@ -302,20 +305,16 @@ def _relationship(model_class, relationship_kwargs = relationship_kwargs or {} if fk: - relationship_kwargs.setdefault('foreign_keys', - lambda: getattr( - _get_class_for_table( - model_class, - model_class.__tablename__), - fk)) + relationship_kwargs.setdefault( + 'foreign_keys', + lambda: getattr(_get_class_for_table(model_class, model_class.__tablename__), fk) + ) elif other_fk: - relationship_kwargs.setdefault('foreign_keys', - lambda: getattr( - _get_class_for_table( - model_class, - other_table_name), - other_fk)) + relationship_kwargs.setdefault( + 'foreign_keys', + lambda: getattr(_get_class_for_table(model_class, other_table_name), other_fk) + ) if dict_key: relationship_kwargs.setdefault('collection_class', http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1ecf657b/aria/modeling/service_changes.py ---------------------------------------------------------------------- diff --git a/aria/modeling/service_changes.py b/aria/modeling/service_changes.py index 87c7f3d..91d4703 100644 --- a/aria/modeling/service_changes.py +++ b/aria/modeling/service_changes.py @@ -62,7 +62,7 @@ class ServiceUpdateBase(ModelMixin): @declared_attr def execution(cls): - return relationship.many_to_one(cls, 'execution') + return relationship.one_to_one(cls, 'execution', back_populates=False) @declared_attr def service(cls): http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1ecf657b/aria/modeling/service_instance.py ---------------------------------------------------------------------- diff --git a/aria/modeling/service_instance.py b/aria/modeling/service_instance.py index 79d4fd4..011b0ed 100644 --- a/aria/modeling/service_instance.py +++ b/aria/modeling/service_instance.py @@ -91,10 +91,22 @@ class ServiceBase(InstanceModelMixin): # pylint: disable=too-many-public-methods 'service_template_name'] @declared_attr - def execution(cls): + def updates(cls): + return relationship.one_to_many(cls, 'service_update') + + @declared_attr + def modifications(cls): + return relationship.one_to_many(cls, 'service_modification') + + @declared_attr + def executions(cls): return relationship.one_to_many(cls, 'execution') @declared_attr + def operations(cls): + return relationship.one_to_many(cls, 'operation') + + @declared_attr def service_template(cls): return relationship.many_to_one(cls, 'service_template') @@ -352,10 +364,6 @@ class NodeBase(InstanceModelMixin): # pylint: disable=too-many-public-methods 'service_name'] @declared_attr - def relationships(cls): - return relationship.one_to_many(cls, 'relationship') - - @declared_attr def tasks(cls): return relationship.one_to_many(cls, 'task') @@ -391,11 +399,11 @@ class NodeBase(InstanceModelMixin): # pylint: disable=too-many-public-methods @declared_attr def outbound_relationships(cls): - return relationship.one_to_many(cls, 'relationship', child_fk='source_node_fk') + return relationship.one_to_many(cls, 'relationship', child_fk='source_node_fk', child_property='source_node') @declared_attr def inbound_relationships(cls): - return relationship.one_to_many(cls, 'relationship', child_fk='target_node_fk') + return relationship.one_to_many(cls, 'relationship', child_fk='target_node_fk', child_property='target_node') @declared_attr def host(cls): @@ -904,7 +912,7 @@ class SubstitutionMappingBase(InstanceModelMixin): @declared_attr def substitution(cls): - return relationship.one_to_many(cls, 'substitution') + return relationship.many_to_one(cls, 'substitution', back_populates='mappings') @declared_attr def node(cls): @@ -1020,11 +1028,11 @@ class RelationshipBase(InstanceModelMixin): @declared_attr def source_node(cls): - return relationship.many_to_one(cls, 'node', fk='source_node_fk') + return relationship.many_to_one(cls, 'node', fk='source_node_fk', back_populates='outbound_relationships') @declared_attr def target_node(cls): - return relationship.many_to_one(cls, 'node', fk='target_node_fk') + return relationship.many_to_one(cls, 'node', fk='target_node_fk', back_populates='inbound_relationships') @declared_attr def relationship_template(cls): @@ -1307,10 +1315,6 @@ class InterfaceBase(InstanceModelMixin): return relationship.many_to_one(cls, 'group') @declared_attr - def group(cls): - return relationship.many_to_one(cls, 'relationship') - - @declared_attr def interface_template(cls): return relationship.many_to_one(cls, 'interface_template') @@ -1560,7 +1564,7 @@ class ArtifactBase(InstanceModelMixin): return relationship.many_to_one(cls, 'node') @declared_attr - def artifact_templates(cls): + def artifact_template(cls): return relationship.many_to_one(cls, 'artifact_template') @declared_attr http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1ecf657b/aria/modeling/service_template.py ---------------------------------------------------------------------- diff --git a/aria/modeling/service_template.py b/aria/modeling/service_template.py index 9efc793..f3af0d2 100644 --- a/aria/modeling/service_template.py +++ b/aria/modeling/service_template.py @@ -110,11 +110,19 @@ class ServiceTemplateBase(TemplateModelMixin): # pylint: disable=too-many-public main_file_name = Column(Text) @declared_attr + def services(cls): + return relationship.one_to_many(cls, 'service') + + @declared_attr def meta_data(cls): # Warning! We cannot use the attr name "metadata" because it's used by SQLAlchemy! return relationship.many_to_many(cls, 'metadata', dict_key='name') @declared_attr + def operation_templates(cls): + return relationship.one_to_many(cls, 'operation_template') + + @declared_attr def node_templates(cls): return relationship.one_to_many(cls, 'node_template', dict_key='name') @@ -687,8 +695,7 @@ class PolicyTemplateBase(TemplateModelMixin): __tablename__ = 'policy_template' - __private_fields__ = ['type_fk', - 'service_template_fk'] + __private_fields__ = ['type_fk', 'service_template_fk'] @declared_attr def policies(cls): @@ -998,6 +1005,10 @@ class RequirementTemplateBase(TemplateModelMixin): 'relationship_template_fk'] @declared_attr + def relationships(cls): + return relationship.one_to_many(cls, 'relationship') + + @declared_attr def node_template(cls): return relationship.many_to_one(cls, 'node_template', fk='node_template_fk') @@ -1183,6 +1194,10 @@ class RelationshipTemplateBase(TemplateModelMixin): __private_fields__ = ['type_fk'] @declared_attr + def relationships(cls): + return relationship.one_to_many(cls, 'relationship') + + @declared_attr def type(cls): return relationship.many_to_one(cls, 'type', back_populates=False) @@ -1421,12 +1436,12 @@ class InterfaceTemplateBase(TemplateModelMixin): 'relationship_template_fk'] @declared_attr - def relationship_template(cls): - return relationship.many_to_one(cls, 'relationship_template') + def interfaces(cls): + return relationship.one_to_many(cls, 'interface') @declared_attr - def interface_templates(cls): - return relationship.one_to_many(cls, 'interface_template') + def relationship_template(cls): + return relationship.many_to_one(cls, 'relationship_template') @declared_attr def group_template(cls): @@ -1688,7 +1703,7 @@ class ArtifactTemplateBase(TemplateModelMixin): @declared_attr def artifacts(cls): - return relationship.many_to_one(cls, 'artifact') + return relationship.one_to_many(cls, 'artifact') @declared_attr def node_template(cls): http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1ecf657b/setup.py ---------------------------------------------------------------------- diff --git a/setup.py b/setup.py index a8b07a8..7be5275 100644 --- a/setup.py +++ b/setup.py @@ -61,7 +61,6 @@ except IOError: console_scripts = ['aria = aria.cli.cli:main'] -console_scripts.append('ctx = aria.orchestrator.execution_plugin.ctx_proxy.client:main') class InstallCommand(install):
