From b2dee880b681b19c97e4cac11f48f52c633d4bee Mon Sep 17 00:00:00 2001 From: Ekaterina Fedorova Date: Wed, 2 Apr 2014 16:16:05 +0400 Subject: [PATCH] Add DELETE repository API call Partially-implements blueprint murano-repository-api-v2 Implements blueprint app-delete Change-Id: I3c81615a679e733fb084cd3918ca9a4560475d30 --- muranoapi/api/v1/catalog.py | 3 +++ muranoapi/api/v1/router.py | 4 ++++ muranoapi/db/catalog/api.py | 12 ++++++++++++ muranoapi/db/models.py | 12 ++++++------ 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/muranoapi/api/v1/catalog.py b/muranoapi/api/v1/catalog.py index 5576ba30..c4476444 100644 --- a/muranoapi/api/v1/catalog.py +++ b/muranoapi/api/v1/catalog.py @@ -184,6 +184,9 @@ class Controller(object): package = db_api.package_get(package_id, req.context) return package.archive + def delete(self, req, package_id): + db_api.package_delete(package_id) + def show_categories(self, req): categories = db_api.categories_list() return {"categories": [category.to_dict() for category in categories]} diff --git a/muranoapi/api/v1/router.py b/muranoapi/api/v1/router.py index 5ac0aaa6..426720c0 100644 --- a/muranoapi/api/v1/router.py +++ b/muranoapi/api/v1/router.py @@ -129,6 +129,10 @@ class API(wsgi.Router): controller=catalog_resource, action='get', conditions={'method': ['GET']}) + mapper.connect('/catalog/packages/{package_id}', + controller=catalog_resource, + action='delete', + conditions={'method': ['DELETE']}) mapper.connect('/catalog/packages/{package_id}', controller=catalog_resource, action='update', diff --git a/muranoapi/db/catalog/api.py b/muranoapi/db/catalog/api.py index de407c7c..84133cfe 100644 --- a/muranoapi/db/catalog/api.py +++ b/muranoapi/db/catalog/api.py @@ -343,6 +343,18 @@ def package_upload(values, tenant_id): return package +def package_delete(package_id): + """ + Delete package information from the system ID of a package, string + parameters to update + """ + session = db_session.get_session() + with session.begin(): + package = session.query(models.Package).get(package_id) + + session.delete(package) + + def categories_list(): session = db_session.get_session() return session.query(models.Category).all() diff --git a/muranoapi/db/models.py b/muranoapi/db/models.py index 29917085..a4da1ea2 100644 --- a/muranoapi/db/models.py +++ b/muranoapi/db/models.py @@ -209,8 +209,8 @@ package_to_category = sa.Table('package_to_category', sa.ForeignKey('package.id')), sa.Column('category_id', sa.String(32), - sa.ForeignKey('category.id')) - ) + sa.ForeignKey('category.id', + ondelete="RESTRICT"))) package_to_tag = sa.Table('package_to_tag', BASE.metadata, @@ -219,8 +219,8 @@ package_to_tag = sa.Table('package_to_tag', sa.ForeignKey('package.id')), sa.Column('tag_id', sa.String(32), - sa.ForeignKey('tag.id')) - ) + sa.ForeignKey('tag.id', + ondelete="CASCADE"))) class Package(BASE, ModelBase): @@ -246,14 +246,14 @@ class Package(BASE, ModelBase): is_public = sa.Column(sa.Boolean, default=True) tags = sa_orm.relationship("Tag", secondary=package_to_tag, - cascade='save-update, merge, delete', + cascade='save-update, merge', lazy='joined') logo = sa.Column(sa.BLOB, nullable=True) owner_id = sa.Column(sa.String(36), nullable=False) ui_definition = sa.Column(sa.Text) categories = sa_orm.relationship("Category", secondary=package_to_category, - cascade='save-update, merge, delete', + cascade='save-update, merge', lazy='joined') class_definition = sa_orm.relationship("Class")