From 9d13fb7b24b426ec1b73dceb53448b86749d4767 Mon Sep 17 00:00:00 2001 From: Serg Melikyan Date: Fri, 24 May 2013 16:49:41 +0400 Subject: [PATCH] Resolve issues with service deletion Corrected cascades and relations between entities Change-Id: I6b2cd2dbc29bbd5a51e30235cd0669d9c29e20d4 --- muranoapi/api/v1/active_directories.py | 2 +- muranoapi/db/models.py | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/muranoapi/api/v1/active_directories.py b/muranoapi/api/v1/active_directories.py index 7d49e60d7..0d3013bc1 100644 --- a/muranoapi/api/v1/active_directories.py +++ b/muranoapi/api/v1/active_directories.py @@ -64,7 +64,7 @@ class Controller(object): log.debug(_('ActiveDirectory:Delete '. format(environment_id, active_directory_id))) - draft = get_draft(request.context.session) + draft = get_draft(session_id=request.context.session) items = [service for service in draft['services']['activeDirectories'] if service['id'] != active_directory_id] draft['services']['activeDirectories'] = items diff --git a/muranoapi/db/models.py b/muranoapi/db/models.py index e0bd34b21..f0006669b 100644 --- a/muranoapi/db/models.py +++ b/muranoapi/db/models.py @@ -21,7 +21,7 @@ from sqlalchemy import Column, String, BigInteger, TypeDecorator, ForeignKey from sqlalchemy.ext.compiler import compiles from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import DateTime, Text -from sqlalchemy.orm import relationship, backref, object_mapper +from sqlalchemy.orm import relationship, object_mapper from muranoapi.common import uuidutils from muranoapi.openstack.common import timeutils @@ -102,6 +102,11 @@ class Environment(BASE, ModelBase): tenant_id = Column(String(32), nullable=False) description = Column(JsonBlob(), nullable=False, default={}) + sessions = relationship("Session", backref='environment', + cascade='save-update, merge, delete') + statuses = relationship("Status", backref='environment', + cascade='save-update, merge, delete') + def to_dict(self): dictionary = super(Environment, self).to_dict() del dictionary['description'] @@ -113,9 +118,7 @@ class Session(BASE, ModelBase): id = Column(String(32), primary_key=True, default=uuidutils.generate_uuid) environment_id = Column(String(32), ForeignKey('environment.id')) - environment = relationship(Environment, - backref=backref('session'), - uselist=False, lazy='joined') + user_id = Column(String(36), nullable=False) state = Column(String(36), nullable=False) description = Column(JsonBlob(), nullable=False) @@ -123,6 +126,9 @@ class Session(BASE, ModelBase): def to_dict(self): dictionary = super(Session, self).to_dict() del dictionary['description'] + #object relations may be not loaded yet + if 'environment' in dictionary: + del dictionary['environment'] return dictionary @@ -136,6 +142,15 @@ class Status(BASE, ModelBase): session_id = Column(String(32), ForeignKey('session.id')) text = Column(Text(), nullable=False) + def to_dict(self): + dictionary = super(Status, self).to_dict() + #object relations may be not loaded yet + if 'session' in dictionary: + del dictionary['session'] + if 'environment' in dictionary: + del dictionary['environment'] + return dictionary + def register_models(engine): """