From 92556e931abc62078a54c8ab57d509a715788cc1 Mon Sep 17 00:00:00 2001 From: Gary Kotton Date: Mon, 17 Jul 2017 02:19:57 -0700 Subject: [PATCH] Rehome FAULT_MAP from the neutron API The fault map enables a developer to map neutron exceptions to WebOb Exceptions. This enables the neutron service to raise the relevant exception. The FAULT_MAP is now maintained in neutron-lib. This dictionary can be extended if necessary, for example a 3rd party plugin wants to map plugin exceptions to the relevant WebOb exceptions. The default mappings are: exceptions.NotFound: webob.exc.HTTPNotFound exceptions.Conflict: webob.exc.HTTPConflict exceptions.InUse: webob.exc.HTTPConflict exceptions.BadRequest: webob.exc.HTTPBadRequest exceptions.ServiceUnavailable: webob.exc.HTTPServiceUnavailable exceptions.NotAuthorized: webob.exc.HTTPForbidden netaddr.AddrFormatError: webob.exc.HTTPBadRequest policy.PolicyNotAuthorized: webob.exc.HTTPForbidden Change-Id: Idfd956fa213e1ba6c3b1c983f246c5b515951e6d --- neutron_lib/api/faults.py | 28 +++++++++++++++++++ neutron_lib/tests/unit/api/test_faults.py | 24 ++++++++++++++++ .../rehome-api-faults-cf30246e5e5bf8b8.yaml | 4 +++ 3 files changed, 56 insertions(+) create mode 100644 neutron_lib/api/faults.py create mode 100644 neutron_lib/tests/unit/api/test_faults.py create mode 100644 releasenotes/notes/rehome-api-faults-cf30246e5e5bf8b8.yaml diff --git a/neutron_lib/api/faults.py b/neutron_lib/api/faults.py new file mode 100644 index 000000000..e8feffcb5 --- /dev/null +++ b/neutron_lib/api/faults.py @@ -0,0 +1,28 @@ +# 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 netaddr +from oslo_policy import policy +import webob.exc + +from neutron_lib import exceptions + +FAULT_MAP = { + exceptions.NotFound: webob.exc.HTTPNotFound, + exceptions.Conflict: webob.exc.HTTPConflict, + exceptions.InUse: webob.exc.HTTPConflict, + exceptions.BadRequest: webob.exc.HTTPBadRequest, + exceptions.ServiceUnavailable: webob.exc.HTTPServiceUnavailable, + exceptions.NotAuthorized: webob.exc.HTTPForbidden, + netaddr.AddrFormatError: webob.exc.HTTPBadRequest, + policy.PolicyNotAuthorized: webob.exc.HTTPForbidden, +} diff --git a/neutron_lib/tests/unit/api/test_faults.py b/neutron_lib/tests/unit/api/test_faults.py new file mode 100644 index 000000000..602dae8f6 --- /dev/null +++ b/neutron_lib/tests/unit/api/test_faults.py @@ -0,0 +1,24 @@ +# 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 webob.exc + +from neutron_lib.api import faults +from neutron_lib.tests import _base as base + + +class TestFaultMap(base.BaseTestCase): + + def test_extend_fault_map(self): + fault_map_dict = {NotImplemented: webob.exc.HTTPServiceUnavailable} + faults.FAULT_MAP.update(fault_map_dict) + self.assertIn(NotImplemented, faults.FAULT_MAP) diff --git a/releasenotes/notes/rehome-api-faults-cf30246e5e5bf8b8.yaml b/releasenotes/notes/rehome-api-faults-cf30246e5e5bf8b8.yaml new file mode 100644 index 000000000..b022c40f3 --- /dev/null +++ b/releasenotes/notes/rehome-api-faults-cf30246e5e5bf8b8.yaml @@ -0,0 +1,4 @@ +--- +features: + - The ``FAULT_MAP`` dictionary from ``neutron.api.v2.base`` + has been rehomed to ``neutron_lib.api.faults`` with the same name.