Allow to delete multiple objects with advanced filters

This commit adds a possibility to delete db objects with
advanced filters, like 'in', 'eq', 'has' and so on.

Change-Id: I97bd3a5627f62081a2cb9487cc91920c5a11561b
This commit is contained in:
Mike Fedosin 2019-07-22 13:16:16 +02:00
parent f2e8d614d9
commit f43bf7baeb
2 changed files with 23 additions and 1 deletions

View File

@ -259,7 +259,9 @@ def _delete_all(model, **kwargs):
# NOTE(kong): Because we use 'in_' operator in _secure_query(), delete()
# method will raise error with default parameter. Please refer to
# http://docs.sqlalchemy.org/en/rel_1_0/orm/query.html#sqlalchemy.orm.query.Query.delete
_secure_query(model).filter_by(**kwargs).delete(synchronize_session=False)
query = _secure_query(model)
query = db_filters.apply_filters(query, model, **kwargs)
query.delete(synchronize_session=False)
def _get_collection(model, insecure=False, limit=None, marker=None,

View File

@ -2778,6 +2778,26 @@ class EnvironmentTest(SQLAlchemyTest):
created.name
)
def test_delete_environments(self):
created0 = db_api.create_environment(ENVIRONMENTS[0])
created1 = db_api.create_environment(ENVIRONMENTS[1])
db_api.delete_environments(
name={'in': [created0.name, created1.name]}
)
self.assertRaises(
exc.DBEntityNotFoundError,
db_api.get_environment,
created0.id
)
self.assertRaises(
exc.DBEntityNotFoundError,
db_api.get_environment,
created1.id
)
def test_environment_repr(self):
s = db_api.create_environment(ENVIRONMENTS[0]).__repr__()