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:
parent
f2e8d614d9
commit
f43bf7baeb
|
@ -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,
|
||||
|
|
|
@ -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__()
|
||||
|
||||
|
|
Loading…
Reference in New Issue