objects: introduce a util function to handle tenant_id filter
Objects will directly support project_id filters only. The tenant_id property is provided for mere convenience, and does not serve for filtering purposes. So every time we'll need to pass filters from API that still supports tenant_id attribute filtering, we'll need to do the filter conversion. This patch introduces the util function that will later be used by other objects, like subnet, security group, or subnetpool (for the latter, once we convert its existing tenant_id field to project_id). Change-Id: If82c180688e1ecdff1c8a6e29cb8668838ac0a5b Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db
This commit is contained in:
parent
17d85e4748
commit
f13ed8c506
@ -335,6 +335,10 @@ class TenantQuotaNotFound(e.NotFound):
|
||||
message = _("Quota for tenant %(tenant_id)s could not be found.")
|
||||
|
||||
|
||||
class TenantIdProjectIdFilterConflict(e.BadRequest):
|
||||
message = _("Both tenant_id and project_id passed as filters.")
|
||||
|
||||
|
||||
# Neutron-lib migration shim. This will wrap any exceptions that are moved
|
||||
# to that library in a deprecation warning, until they can be updated to
|
||||
# import directly from their new location.
|
||||
|
25
neutron/objects/utils.py
Normal file
25
neutron/objects/utils.py
Normal file
@ -0,0 +1,25 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import copy
|
||||
|
||||
from neutron.common import exceptions
|
||||
|
||||
|
||||
def convert_filters(**kwargs):
|
||||
result = copy.deepcopy(kwargs)
|
||||
if 'tenant_id' in result:
|
||||
if 'project_id' in result:
|
||||
raise exceptions.TenantIdProjectIdFilterConflict()
|
||||
|
||||
result['project_id'] = result.pop('tenant_id')
|
||||
return result
|
52
neutron/tests/unit/objects/test_utils.py
Normal file
52
neutron/tests/unit/objects/test_utils.py
Normal file
@ -0,0 +1,52 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from neutron.common import exceptions
|
||||
from neutron.objects import utils
|
||||
from neutron.tests import base as test_base
|
||||
|
||||
|
||||
class TestConvertFilters(test_base.BaseTestCase):
|
||||
|
||||
def test_convert_filters_no_tenant_id(self):
|
||||
kwargs = {
|
||||
'filter%d' % i: 'value%d' % i
|
||||
for i in range(0, 10)
|
||||
}
|
||||
self.assertEqual(kwargs, utils.convert_filters(**kwargs))
|
||||
|
||||
def test_convert_filters_tenant_id(self):
|
||||
expected_project_id = 'fake-tenant-id'
|
||||
kwargs = {
|
||||
'filter%d' % i: 'value%d' % i
|
||||
for i in range(0, 10)
|
||||
}
|
||||
expected = kwargs.copy()
|
||||
expected['project_id'] = expected_project_id
|
||||
|
||||
self.assertEqual(
|
||||
expected,
|
||||
utils.convert_filters(tenant_id=expected_project_id, **kwargs)
|
||||
)
|
||||
|
||||
def test_convert_filters_tenant_id_and_project_id_raises(self):
|
||||
kwargs = {
|
||||
'filter%d' % i: 'value%d' % i
|
||||
for i in range(0, 10)
|
||||
}
|
||||
kwargs['tenant_id'] = 'fake-tenant-id'
|
||||
kwargs['project_id'] = 'fake-tenant-id'
|
||||
|
||||
self.assertRaises(
|
||||
exceptions.TenantIdProjectIdFilterConflict,
|
||||
utils.convert_filters, **kwargs
|
||||
)
|
Loading…
Reference in New Issue
Block a user