Move warnings to their own module
Raising warnings from an exception module can result in a rather confusing message: Running command: '/usr/bin/nova-scheduler ' /.../sqlalchemy/enginefacade.py:332: NotSupportedWarning: Configuration option(s) ['use_tpool'] not supported exception.NotSupportedWarning For someone not used to Python's 'warning' infrastructure, this can look worse than it is, as seen at [1]. While this particular warning was resolved in change I4a5f8958c3e, it's possible that a similar warning could be raised for other options. Best to move this out of the 'exception' module and into something more sensible. [1] https://bugzilla.redhat.com/show_bug.cgi?id=1639423 Change-Id: I8e0480fb11123067a111ed6aeda6b47614615645 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
parent
baa0a045b5
commit
1f0f5654a7
@ -43,10 +43,12 @@ with `try/except` statement. This is required for consistent handling of
|
|||||||
database errors.
|
database errors.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from debtcollector import moves
|
||||||
|
from oslo_utils.excutils import CausedByException
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from oslo_db._i18n import _
|
from oslo_db._i18n import _
|
||||||
from oslo_utils.excutils import CausedByException
|
from oslo_db import warning
|
||||||
|
|
||||||
|
|
||||||
class DBError(CausedByException):
|
class DBError(CausedByException):
|
||||||
@ -299,27 +301,10 @@ class CantStartEngineError(Exception):
|
|||||||
"""Error raised when the enginefacade cannot start up correctly."""
|
"""Error raised when the enginefacade cannot start up correctly."""
|
||||||
|
|
||||||
|
|
||||||
class NotSupportedWarning(Warning):
|
moves.moved_class(warning.NotSupportedWarning,
|
||||||
"""Warn that an argument or call that was passed is not supported.
|
'NotSupportedWarning',
|
||||||
|
__name__, version='Stein')
|
||||||
|
|
||||||
This subclasses Warning so that it can be filtered as a distinct
|
moves.moved_class(warning.OsloDBDeprecationWarning,
|
||||||
category.
|
'OsloDBDeprecationWarning',
|
||||||
|
__name__, version='Stein')
|
||||||
.. seealso::
|
|
||||||
|
|
||||||
https://docs.python.org/2/library/warnings.html
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class OsloDBDeprecationWarning(DeprecationWarning):
|
|
||||||
"""Issued per usage of a deprecated API.
|
|
||||||
|
|
||||||
This subclasses DeprecationWarning so that it can be filtered as a distinct
|
|
||||||
category.
|
|
||||||
|
|
||||||
.. seealso::
|
|
||||||
|
|
||||||
https://docs.python.org/2/library/warnings.html
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
|
||||||
import contextlib
|
import contextlib
|
||||||
import functools
|
import functools
|
||||||
import operator
|
import operator
|
||||||
@ -28,6 +27,7 @@ from oslo_db import options
|
|||||||
from oslo_db.sqlalchemy import engines
|
from oslo_db.sqlalchemy import engines
|
||||||
from oslo_db.sqlalchemy import orm
|
from oslo_db.sqlalchemy import orm
|
||||||
from oslo_db.sqlalchemy import utils
|
from oslo_db.sqlalchemy import utils
|
||||||
|
from oslo_db import warning
|
||||||
|
|
||||||
|
|
||||||
class _symbol(object):
|
class _symbol(object):
|
||||||
@ -334,7 +334,7 @@ class _TransactionFactory(object):
|
|||||||
warnings.warn(
|
warnings.warn(
|
||||||
"Configuration option(s) %r not supported" %
|
"Configuration option(s) %r not supported" %
|
||||||
sorted(not_supported),
|
sorted(not_supported),
|
||||||
exception.NotSupportedWarning
|
warning.NotSupportedWarning
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_legacy_facade(self):
|
def get_legacy_facade(self):
|
||||||
@ -1253,7 +1253,7 @@ class LegacyEngineFacade(object):
|
|||||||
warnings.warn(
|
warnings.warn(
|
||||||
"EngineFacade is deprecated; please use "
|
"EngineFacade is deprecated; please use "
|
||||||
"oslo_db.sqlalchemy.enginefacade",
|
"oslo_db.sqlalchemy.enginefacade",
|
||||||
exception.OsloDBDeprecationWarning,
|
warning.OsloDBDeprecationWarning,
|
||||||
stacklevel=2)
|
stacklevel=2)
|
||||||
if _factory:
|
if _factory:
|
||||||
self._factory = _factory
|
self._factory = _factory
|
||||||
|
@ -37,6 +37,7 @@ from oslo_db.sqlalchemy import enginefacade
|
|||||||
from oslo_db.sqlalchemy import engines as oslo_engines
|
from oslo_db.sqlalchemy import engines as oslo_engines
|
||||||
from oslo_db.sqlalchemy import orm
|
from oslo_db.sqlalchemy import orm
|
||||||
from oslo_db.tests.sqlalchemy import base as test_base
|
from oslo_db.tests.sqlalchemy import base as test_base
|
||||||
|
from oslo_db import warning
|
||||||
|
|
||||||
|
|
||||||
enginefacade.transaction_context_provider(oslo_context.RequestContext)
|
enginefacade.transaction_context_provider(oslo_context.RequestContext)
|
||||||
@ -2182,7 +2183,7 @@ class ConfigOptionsTest(oslo_test_base.BaseTestCase):
|
|||||||
|
|
||||||
self.assertEqual(1, len(w))
|
self.assertEqual(1, len(w))
|
||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
issubclass(w[-1].category, exception.NotSupportedWarning))
|
issubclass(w[-1].category, warning.NotSupportedWarning))
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
"Configuration option(s) ['fake1', 'wrong2'] not supported",
|
"Configuration option(s) ['fake1', 'wrong2'] not supported",
|
||||||
str(w[-1].message)
|
str(w[-1].message)
|
||||||
|
41
oslo_db/warning.py
Normal file
41
oslo_db/warning.py
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# Copyright 2018 Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
"""Custom warnings."""
|
||||||
|
|
||||||
|
|
||||||
|
class NotSupportedWarning(Warning):
|
||||||
|
"""Warn that an argument or call that was passed is not supported.
|
||||||
|
|
||||||
|
This subclasses Warning so that it can be filtered as a distinct
|
||||||
|
category.
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
|
||||||
|
https://docs.python.org/2/library/warnings.html
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class OsloDBDeprecationWarning(DeprecationWarning):
|
||||||
|
"""Issued per usage of a deprecated API.
|
||||||
|
|
||||||
|
This subclasses DeprecationWarning so that it can be filtered as a distinct
|
||||||
|
category.
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
|
||||||
|
https://docs.python.org/2/library/warnings.html
|
||||||
|
|
||||||
|
"""
|
Loading…
Reference in New Issue
Block a user