Rehome populate_project_info() from neutron
Having this function in neutron-lib is a prerequisite for moving the common_db_mixin stuff to neutron-lib. Change-Id: I545dac5e872c60e01c4eee7ca8c01519ffd2ec2e
This commit is contained in:
parent
d803eaf7c3
commit
990a5d7114
44
neutron_lib/api/utils.py
Normal file
44
neutron_lib/api/utils.py
Normal file
@ -0,0 +1,44 @@
|
||||
# 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 webob import exc
|
||||
|
||||
from neutron_lib._i18n import _
|
||||
|
||||
|
||||
def populate_project_info(attributes):
|
||||
"""Ensure that both project_id and tenant_id attributes are present.
|
||||
|
||||
If either project_id or tenant_id is present in attributes then ensure
|
||||
that both are present.
|
||||
|
||||
If neither are present then attributes is not updated.
|
||||
|
||||
:param attributes: a dictionary of resource/API attributes
|
||||
:type attributes: dict
|
||||
|
||||
:return: the updated attributes dictionary
|
||||
:rtype: dict
|
||||
|
||||
"""
|
||||
if 'tenant_id' in attributes and 'project_id' not in attributes:
|
||||
# TODO(HenryG): emit a deprecation warning here
|
||||
attributes['project_id'] = attributes['tenant_id']
|
||||
elif 'project_id' in attributes and 'tenant_id' not in attributes:
|
||||
# Backward compatibility for code still using tenant_id
|
||||
attributes['tenant_id'] = attributes['project_id']
|
||||
|
||||
if attributes.get('project_id') != attributes.get('tenant_id'):
|
||||
msg = _("'project_id' and 'tenant_id' do not match")
|
||||
raise exc.HTTPBadRequest(msg)
|
||||
|
||||
return attributes
|
49
neutron_lib/tests/unit/api/test_utils.py
Normal file
49
neutron_lib/tests/unit/api/test_utils.py
Normal file
@ -0,0 +1,49 @@
|
||||
# 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 webob import exc
|
||||
|
||||
from neutron_lib.api import utils
|
||||
from oslo_utils import uuidutils
|
||||
|
||||
from neutron_lib.tests import _base as base
|
||||
|
||||
|
||||
class TestApiUtils(base.BaseTestCase):
|
||||
|
||||
def test_populate_project_info_add_project(self):
|
||||
attrs_in = {'tenant_id': uuidutils.generate_uuid()}
|
||||
attrs_out = utils.populate_project_info(attrs_in)
|
||||
self.assertIn('project_id', attrs_out)
|
||||
self.assertEqual(attrs_in['tenant_id'], attrs_out['project_id'])
|
||||
self.assertEqual(2, len(attrs_out))
|
||||
|
||||
def test_populate_project_info_add_tenant(self):
|
||||
attrs_in = {'project_id': uuidutils.generate_uuid()}
|
||||
attrs_out = utils.populate_project_info(attrs_in)
|
||||
self.assertIn('tenant_id', attrs_out)
|
||||
self.assertEqual(attrs_in['project_id'], attrs_out['tenant_id'])
|
||||
self.assertEqual(2, len(attrs_out))
|
||||
|
||||
def test_populate_project_info_ids_match(self):
|
||||
project_id = uuidutils.generate_uuid()
|
||||
attrs_in = {'project_id': project_id, 'tenant_id': project_id}
|
||||
attrs_out = utils.populate_project_info(attrs_in)
|
||||
self.assertEqual(2, len(attrs_out))
|
||||
|
||||
def test_populate_project_info_id_mismatch(self):
|
||||
attrs = {
|
||||
'project_id': uuidutils.generate_uuid(),
|
||||
'tenant_id': uuidutils.generate_uuid()
|
||||
}
|
||||
self.assertRaises(exc.HTTPBadRequest,
|
||||
utils.populate_project_info, attrs)
|
Loading…
x
Reference in New Issue
Block a user