diff --git a/ironic/api/app.py b/ironic/api/app.py index 7c2c401b7d..5af2187051 100644 --- a/ironic/api/app.py +++ b/ironic/api/app.py @@ -16,13 +16,12 @@ # under the License. import keystonemiddleware.audit as audit_middleware -from keystonemiddleware.audit import PycadfAuditApiConfigError from oslo_config import cfg import oslo_middleware.cors as cors_middleware import pecan from ironic.api import config -from ironic.api.controllers.base import Version +from ironic.api.controllers import base from ironic.api import hooks from ironic.api import middleware from ironic.api.middleware import auth_token @@ -67,7 +66,8 @@ def setup_app(pecan_config=None, extra_hooks=None): audit_map_file=CONF.audit.audit_map_file, ignore_req_list=CONF.audit.ignore_req_list ) - except (EnvironmentError, OSError, PycadfAuditApiConfigError) as e: + except (EnvironmentError, OSError, + audit_middleware.PycadfAuditApiConfigError) as e: raise exception.InputFileError( file_name=CONF.audit.audit_map_file, reason=e @@ -82,9 +82,11 @@ def setup_app(pecan_config=None, extra_hooks=None): # included in all CORS responses. app = cors_middleware.CORS(app, CONF) app.set_latent( - allow_headers=[Version.max_string, Version.min_string, Version.string], + allow_headers=[base.Version.max_string, base.Version.min_string, + base.Version.string], allow_methods=['GET', 'PUT', 'POST', 'DELETE', 'PATCH'], - expose_headers=[Version.max_string, Version.min_string, Version.string] + expose_headers=[base.Version.max_string, base.Version.min_string, + base.Version.string] ) return app diff --git a/ironic/api/controllers/v1/utils.py b/ironic/api/controllers/v1/utils.py index 6c0cba7671..8a7d05dab2 100644 --- a/ironic/api/controllers/v1/utils.py +++ b/ironic/api/controllers/v1/utils.py @@ -22,7 +22,7 @@ import pecan from pecan import rest import six from six.moves import http_client -from webob.static import FileIter +from webob import static import wsme from ironic.api.controllers.v1 import versions @@ -203,7 +203,7 @@ def vendor_passthru(ident, method, topic, data=None, driver_passthru=False): # If unicode, convert to bytes return_value = return_value.encode('utf-8') file_ = wsme.types.File(content=return_value) - pecan.response.app_iter = FileIter(file_.file) + pecan.response.app_iter = static.FileIter(file_.file) # Since we've attached the return value to the response # object the response body should now be empty. return_value = None diff --git a/ironic/drivers/modules/amt/common.py b/ironic/drivers/modules/amt/common.py index d950d8d8c9..831c1b0b3d 100644 --- a/ironic/drivers/modules/amt/common.py +++ b/ironic/drivers/modules/amt/common.py @@ -14,7 +14,7 @@ Common functionalities for AMT Driver """ import time -from xml.etree import ElementTree +from xml import etree from oslo_concurrency import processutils from oslo_config import cfg @@ -216,7 +216,7 @@ def xml_find(doc, namespace, item): """ if doc is None: raise exception.AMTConnectFailure() - tree = ElementTree.fromstring(doc.root().string()) + tree = etree.ElementTree.fromstring(doc.root().string()) query = ('.//{%(namespace)s}%(item)s' % {'namespace': namespace, 'item': item}) return tree.find(query) diff --git a/ironic/drivers/modules/msftocs/msftocsclient.py b/ironic/drivers/modules/msftocs/msftocsclient.py index 32a3192d2a..3c7d75829f 100644 --- a/ironic/drivers/modules/msftocs/msftocsclient.py +++ b/ironic/drivers/modules/msftocs/msftocsclient.py @@ -19,7 +19,7 @@ https://github.com/MSOpenTech/ChassisManager """ import posixpath -from xml.etree import ElementTree +from xml import etree from oslo_log import log import requests @@ -80,8 +80,8 @@ class MSFTOCSClientApi(object): def _check_completion_code(self, xml_response): try: - et = ElementTree.fromstring(xml_response) - except ElementTree.ParseError as ex: + et = etree.ElementTree.fromstring(xml_response) + except etree.ElementTree.ParseError as ex: LOG.exception(_LE("XML parsing failed: %s"), ex) raise exception.MSFTOCSClientApiException( _("Invalid XML: %s") % xml_response) diff --git a/ironic/tests/unit/api/v1/test_drivers.py b/ironic/tests/unit/api/v1/test_drivers.py index 40850c9b97..cc519c5690 100644 --- a/ironic/tests/unit/api/v1/test_drivers.py +++ b/ironic/tests/unit/api/v1/test_drivers.py @@ -18,7 +18,7 @@ import json import mock from oslo_config import cfg from six.moves import http_client -from testtools.matchers import HasLength +from testtools import matchers from ironic.api.controllers import base as api_base from ironic.api.controllers.v1 import driver @@ -50,7 +50,7 @@ class TestListDrivers(base.BaseApiTest): {'name': self.d2, 'hosts': [self.h1, self.h2]}, ], key=lambda d: d['name']) data = self.get_json('/drivers') - self.assertThat(data['drivers'], HasLength(2)) + self.assertThat(data['drivers'], matchers.HasLength(2)) drivers = sorted(data['drivers'], key=lambda d: d['name']) for i in range(len(expected)): d = drivers[i] @@ -61,7 +61,7 @@ class TestListDrivers(base.BaseApiTest): def test_drivers_no_active_conductor(self): data = self.get_json('/drivers') - self.assertThat(data['drivers'], HasLength(0)) + self.assertThat(data['drivers'], matchers.HasLength(0)) self.assertEqual([], data['drivers']) @mock.patch.object(rpcapi.ConductorAPI, 'get_driver_properties') diff --git a/ironic/tests/unit/api/v1/test_nodes.py b/ironic/tests/unit/api/v1/test_nodes.py index 476377d00b..5991e3a2da 100644 --- a/ironic/tests/unit/api/v1/test_nodes.py +++ b/ironic/tests/unit/api/v1/test_nodes.py @@ -25,7 +25,7 @@ from oslo_utils import uuidutils import six from six.moves import http_client from six.moves.urllib import parse as urlparse -from testtools.matchers import HasLength +from testtools import matchers from wsme import types as wtypes from ironic.api.controllers import base as api_base @@ -560,7 +560,7 @@ class TestListNodes(test_api_base.BaseApiTest): data = self.get_json('/nodes?instance_uuid=%s' % instance_uuid, headers={api_base.Version.string: "1.5"}) - self.assertThat(data['nodes'], HasLength(1)) + self.assertThat(data['nodes'], matchers.HasLength(1)) self.assertEqual(node['instance_uuid'], data['nodes'][0]["instance_uuid"]) @@ -572,7 +572,7 @@ class TestListNodes(test_api_base.BaseApiTest): data = self.get_json('/nodes?instance_uuid=%s' % wrong_uuid) - self.assertThat(data['nodes'], HasLength(0)) + self.assertThat(data['nodes'], matchers.HasLength(0)) def test_node_by_instance_uuid_invalid_uuid(self): response = self.get_json('/nodes?instance_uuid=fake', @@ -618,13 +618,13 @@ class TestListNodes(test_api_base.BaseApiTest): data = self.get_json('/nodes?associated=False&limit=2') - self.assertThat(data['nodes'], HasLength(2)) + self.assertThat(data['nodes'], matchers.HasLength(2)) self.assertIn(data['nodes'][0]['uuid'], unassociated_nodes) def test_next_link_with_association(self): self._create_association_test_nodes() data = self.get_json('/nodes/?limit=3&associated=True') - self.assertThat(data['nodes'], HasLength(3)) + self.assertThat(data['nodes'], matchers.HasLength(3)) self.assertIn('associated=True', data['next']) def test_detail_with_association_filter(self): @@ -637,7 +637,7 @@ class TestListNodes(test_api_base.BaseApiTest): def test_next_link_with_association_with_detail(self): self._create_association_test_nodes() data = self.get_json('/nodes/detail?limit=3&associated=true') - self.assertThat(data['nodes'], HasLength(3)) + self.assertThat(data['nodes'], matchers.HasLength(3)) self.assertIn('driver', data['nodes'][0]) self.assertIn('associated=True', data['next']) diff --git a/ironic/tests/unit/api/v1/test_ports.py b/ironic/tests/unit/api/v1/test_ports.py index 59f6648aa0..ef6a0161a9 100644 --- a/ironic/tests/unit/api/v1/test_ports.py +++ b/ironic/tests/unit/api/v1/test_ports.py @@ -24,7 +24,7 @@ from oslo_utils import uuidutils import six from six.moves import http_client from six.moves.urllib import parse as urlparse -from testtools.matchers import HasLength +from testtools import matchers from wsme import types as wtypes from ironic.api.controllers import base as api_base @@ -249,13 +249,13 @@ class TestListPorts(test_api_base.BaseApiTest): target_address = address_template % 1 data = self.get_json('/ports?address=%s' % target_address) - self.assertThat(data['ports'], HasLength(1)) + self.assertThat(data['ports'], matchers.HasLength(1)) self.assertEqual(target_address, data['ports'][0]['address']) def test_port_by_address_non_existent_address(self): # non-existent address data = self.get_json('/ports?address=%s' % 'aa:bb:cc:dd:ee:ff') - self.assertThat(data['ports'], HasLength(0)) + self.assertThat(data['ports'], matchers.HasLength(0)) def test_port_by_address_invalid_address_format(self): obj_utils.create_test_port(self.context, node_id=self.node.id) diff --git a/ironic/tests/unit/api/v1/test_utils.py b/ironic/tests/unit/api/v1/test_utils.py index f540f5f1d7..7c9c8c0a08 100644 --- a/ironic/tests/unit/api/v1/test_utils.py +++ b/ironic/tests/unit/api/v1/test_utils.py @@ -19,7 +19,7 @@ from oslo_config import cfg from oslo_utils import uuidutils import pecan from six.moves import http_client -from webob.static import FileIter +from webob import static import wsme from ironic.api.controllers.v1 import node as api_node @@ -443,7 +443,7 @@ class TestVendorPassthru(base.TestCase): 'fake-data', 'fake-topic') # Assert file was attached to the response object - self.assertIsInstance(mock_response.app_iter, FileIter) + self.assertIsInstance(mock_response.app_iter, static.FileIter) self.assertEqual(expct_return_value, mock_response.app_iter.file.read()) # Assert response message is none diff --git a/ironic/tests/unit/drivers/modules/amt/utils.py b/ironic/tests/unit/drivers/modules/amt/utils.py index 6338f71689..552d3d37b3 100644 --- a/ironic/tests/unit/drivers/modules/amt/utils.py +++ b/ironic/tests/unit/drivers/modules/amt/utils.py @@ -15,7 +15,7 @@ # License for the specific language governing permissions and limitations # under the License. -from xml.etree import ElementTree +from xml import etree import mock @@ -37,13 +37,14 @@ def build_soap_xml(items, namespace=None): xml_string = "{%(namespace)s}%(item)s" % {'namespace': namespace, 'item': xml_string} - element = ElementTree.Element(xml_string) + element = etree.ElementTree.Element(xml_string) element.text = value return element soap_namespace = "http://www.w3.org/2003/05/soap-envelope" - envelope_element = ElementTree.Element("{%s}Envelope" % soap_namespace) - body_element = ElementTree.Element("{%s}Body" % soap_namespace) + envelope_element = etree.ElementTree.Element( + "{%s}Envelope" % soap_namespace) + body_element = etree.ElementTree.Element("{%s}Body" % soap_namespace) for item in items: for i in item: @@ -57,7 +58,7 @@ def build_soap_xml(items, namespace=None): body_element.append(insertion_point) envelope_element.append(body_element) - return ElementTree.tostring(envelope_element) + return etree.ElementTree.tostring(envelope_element) def mock_wsman_root(return_value): diff --git a/ironic/tests/unit/objects/test_chassis.py b/ironic/tests/unit/objects/test_chassis.py index d4859a5719..78045f40f3 100644 --- a/ironic/tests/unit/objects/test_chassis.py +++ b/ironic/tests/unit/objects/test_chassis.py @@ -16,7 +16,7 @@ import datetime import mock from oslo_utils import uuidutils -from testtools.matchers import HasLength +from testtools import matchers from ironic.common import exception from ironic import objects @@ -99,6 +99,6 @@ class TestChassisObject(base.DbTestCase): autospec=True) as mock_get_list: mock_get_list.return_value = [self.fake_chassis] chassis = objects.Chassis.list(self.context) - self.assertThat(chassis, HasLength(1)) + self.assertThat(chassis, matchers.HasLength(1)) self.assertIsInstance(chassis[0], objects.Chassis) self.assertEqual(self.context, chassis[0]._context) diff --git a/ironic/tests/unit/objects/test_node.py b/ironic/tests/unit/objects/test_node.py index 74d95157ec..f439d88601 100644 --- a/ironic/tests/unit/objects/test_node.py +++ b/ironic/tests/unit/objects/test_node.py @@ -14,7 +14,7 @@ # under the License. import mock -from testtools.matchers import HasLength +from testtools import matchers from ironic.common import context from ironic.common import exception @@ -113,7 +113,7 @@ class TestNodeObject(base.DbTestCase): autospec=True) as mock_get_list: mock_get_list.return_value = [self.fake_node] nodes = objects.Node.list(self.context) - self.assertThat(nodes, HasLength(1)) + self.assertThat(nodes, matchers.HasLength(1)) self.assertIsInstance(nodes[0], objects.Node) self.assertEqual(self.context, nodes[0]._context) diff --git a/ironic/tests/unit/objects/test_port.py b/ironic/tests/unit/objects/test_port.py index 445ca84b7c..81b3a48e54 100644 --- a/ironic/tests/unit/objects/test_port.py +++ b/ironic/tests/unit/objects/test_port.py @@ -15,7 +15,7 @@ import datetime import mock -from testtools.matchers import HasLength +from testtools import matchers from ironic.common import exception from ironic import objects @@ -109,6 +109,6 @@ class TestPortObject(base.DbTestCase): autospec=True) as mock_get_list: mock_get_list.return_value = [self.fake_port] ports = objects.Port.list(self.context) - self.assertThat(ports, HasLength(1)) + self.assertThat(ports, matchers.HasLength(1)) self.assertIsInstance(ports[0], objects.Port) self.assertEqual(self.context, ports[0]._context) diff --git a/ironic/tests/unit/objects/test_portgroup.py b/ironic/tests/unit/objects/test_portgroup.py index 4ced77a2f6..7337e539cf 100644 --- a/ironic/tests/unit/objects/test_portgroup.py +++ b/ironic/tests/unit/objects/test_portgroup.py @@ -12,7 +12,7 @@ import datetime import mock -from testtools.matchers import HasLength +from testtools import matchers from ironic.common import exception from ironic import objects @@ -119,7 +119,7 @@ class TestPortgroupObject(base.DbTestCase): autospec=True) as mock_get_list: mock_get_list.return_value = [self.fake_portgroup] portgroups = objects.Portgroup.list(self.context) - self.assertThat(portgroups, HasLength(1)) + self.assertThat(portgroups, matchers.HasLength(1)) self.assertIsInstance(portgroups[0], objects.Portgroup) self.assertEqual(self.context, portgroups[0]._context) @@ -130,6 +130,6 @@ class TestPortgroupObject(base.DbTestCase): node_id = self.fake_portgroup['node_id'] portgroups = objects.Portgroup.list_by_node_id(self.context, node_id) - self.assertThat(portgroups, HasLength(1)) + self.assertThat(portgroups, matchers.HasLength(1)) self.assertIsInstance(portgroups[0], objects.Portgroup) self.assertEqual(self.context, portgroups[0]._context)