Use api/attributes.py instead of api/utils.py
Lets stop this habit now. Change-Id: I0d3f7041cbe4fb762d6266dec6b4837640734cdf
This commit is contained in:
parent
fa6c37f35b
commit
60e9415c88
43
neutron_lib/api/attributes.py
Normal file
43
neutron_lib/api/attributes.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# 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:
|
||||||
|
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
|
@ -10,35 +10,14 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from webob import exc
|
"""
|
||||||
|
NOTE: Do not use this module to add random utils.
|
||||||
|
We want to avoid having a generic utils.py dumping ground.
|
||||||
|
"""
|
||||||
|
|
||||||
from neutron_lib._i18n import _
|
from debtcollector import moves
|
||||||
|
|
||||||
|
from neutron_lib.api import attributes
|
||||||
|
|
||||||
def populate_project_info(attributes):
|
populate_project_info = moves.moved_function(
|
||||||
"""Ensure that both project_id and tenant_id attributes are present.
|
attributes.populate_project_info, 'populate_project_info', __name__)
|
||||||
|
|
||||||
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
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
from webob import exc
|
from webob import exc
|
||||||
|
|
||||||
from neutron_lib.api import utils
|
from neutron_lib.api import attributes
|
||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
|
|
||||||
from neutron_lib.tests import _base as base
|
from neutron_lib.tests import _base as base
|
||||||
@ -22,14 +22,14 @@ class TestApiUtils(base.BaseTestCase):
|
|||||||
|
|
||||||
def test_populate_project_info_add_project(self):
|
def test_populate_project_info_add_project(self):
|
||||||
attrs_in = {'tenant_id': uuidutils.generate_uuid()}
|
attrs_in = {'tenant_id': uuidutils.generate_uuid()}
|
||||||
attrs_out = utils.populate_project_info(attrs_in)
|
attrs_out = attributes.populate_project_info(attrs_in)
|
||||||
self.assertIn('project_id', attrs_out)
|
self.assertIn('project_id', attrs_out)
|
||||||
self.assertEqual(attrs_in['tenant_id'], attrs_out['project_id'])
|
self.assertEqual(attrs_in['tenant_id'], attrs_out['project_id'])
|
||||||
self.assertEqual(2, len(attrs_out))
|
self.assertEqual(2, len(attrs_out))
|
||||||
|
|
||||||
def test_populate_project_info_add_tenant(self):
|
def test_populate_project_info_add_tenant(self):
|
||||||
attrs_in = {'project_id': uuidutils.generate_uuid()}
|
attrs_in = {'project_id': uuidutils.generate_uuid()}
|
||||||
attrs_out = utils.populate_project_info(attrs_in)
|
attrs_out = attributes.populate_project_info(attrs_in)
|
||||||
self.assertIn('tenant_id', attrs_out)
|
self.assertIn('tenant_id', attrs_out)
|
||||||
self.assertEqual(attrs_in['project_id'], attrs_out['tenant_id'])
|
self.assertEqual(attrs_in['project_id'], attrs_out['tenant_id'])
|
||||||
self.assertEqual(2, len(attrs_out))
|
self.assertEqual(2, len(attrs_out))
|
||||||
@ -37,7 +37,7 @@ class TestApiUtils(base.BaseTestCase):
|
|||||||
def test_populate_project_info_ids_match(self):
|
def test_populate_project_info_ids_match(self):
|
||||||
project_id = uuidutils.generate_uuid()
|
project_id = uuidutils.generate_uuid()
|
||||||
attrs_in = {'project_id': project_id, 'tenant_id': project_id}
|
attrs_in = {'project_id': project_id, 'tenant_id': project_id}
|
||||||
attrs_out = utils.populate_project_info(attrs_in)
|
attrs_out = attributes.populate_project_info(attrs_in)
|
||||||
self.assertEqual(attrs_in, attrs_out)
|
self.assertEqual(attrs_in, attrs_out)
|
||||||
|
|
||||||
def test_populate_project_info_id_mismatch(self):
|
def test_populate_project_info_id_mismatch(self):
|
||||||
@ -46,4 +46,4 @@ class TestApiUtils(base.BaseTestCase):
|
|||||||
'tenant_id': uuidutils.generate_uuid()
|
'tenant_id': uuidutils.generate_uuid()
|
||||||
}
|
}
|
||||||
self.assertRaises(exc.HTTPBadRequest,
|
self.assertRaises(exc.HTTPBadRequest,
|
||||||
utils.populate_project_info, attrs)
|
attributes.populate_project_info, attrs)
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
deprecations:
|
||||||
|
- The function ``neutron_lib.api.utils.populate_project_info`` has moved
|
||||||
|
to ``neutron_lib.api.attributes.populate_project_info``. It will be removed
|
||||||
|
from the old location in the future.
|
Loading…
Reference in New Issue
Block a user