From 1f0f5654a71b71aabfda862f477df0e9415080bb Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Wed, 17 Oct 2018 13:59:36 +0100 Subject: [PATCH] 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 --- oslo_db/exception.py | 33 ++++----------- oslo_db/sqlalchemy/enginefacade.py | 6 +-- oslo_db/tests/sqlalchemy/test_enginefacade.py | 3 +- oslo_db/warning.py | 41 +++++++++++++++++++ 4 files changed, 55 insertions(+), 28 deletions(-) create mode 100644 oslo_db/warning.py diff --git a/oslo_db/exception.py b/oslo_db/exception.py index fcdfd4ef..ee79f3e7 100644 --- a/oslo_db/exception.py +++ b/oslo_db/exception.py @@ -43,10 +43,12 @@ with `try/except` statement. This is required for consistent handling of database errors. """ +from debtcollector import moves +from oslo_utils.excutils import CausedByException import six from oslo_db._i18n import _ -from oslo_utils.excutils import CausedByException +from oslo_db import warning class DBError(CausedByException): @@ -299,27 +301,10 @@ class CantStartEngineError(Exception): """Error raised when the enginefacade cannot start up correctly.""" -class NotSupportedWarning(Warning): - """Warn that an argument or call that was passed is not supported. +moves.moved_class(warning.NotSupportedWarning, + 'NotSupportedWarning', + __name__, version='Stein') - 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 - - """ +moves.moved_class(warning.OsloDBDeprecationWarning, + 'OsloDBDeprecationWarning', + __name__, version='Stein') diff --git a/oslo_db/sqlalchemy/enginefacade.py b/oslo_db/sqlalchemy/enginefacade.py index 481e166e..0e2ac709 100644 --- a/oslo_db/sqlalchemy/enginefacade.py +++ b/oslo_db/sqlalchemy/enginefacade.py @@ -10,7 +10,6 @@ # License for the specific language governing permissions and limitations # under the License. - import contextlib import functools import operator @@ -28,6 +27,7 @@ from oslo_db import options from oslo_db.sqlalchemy import engines from oslo_db.sqlalchemy import orm from oslo_db.sqlalchemy import utils +from oslo_db import warning class _symbol(object): @@ -334,7 +334,7 @@ class _TransactionFactory(object): warnings.warn( "Configuration option(s) %r not supported" % sorted(not_supported), - exception.NotSupportedWarning + warning.NotSupportedWarning ) def get_legacy_facade(self): @@ -1253,7 +1253,7 @@ class LegacyEngineFacade(object): warnings.warn( "EngineFacade is deprecated; please use " "oslo_db.sqlalchemy.enginefacade", - exception.OsloDBDeprecationWarning, + warning.OsloDBDeprecationWarning, stacklevel=2) if _factory: self._factory = _factory diff --git a/oslo_db/tests/sqlalchemy/test_enginefacade.py b/oslo_db/tests/sqlalchemy/test_enginefacade.py index cab7547b..f8c53683 100644 --- a/oslo_db/tests/sqlalchemy/test_enginefacade.py +++ b/oslo_db/tests/sqlalchemy/test_enginefacade.py @@ -37,6 +37,7 @@ from oslo_db.sqlalchemy import enginefacade from oslo_db.sqlalchemy import engines as oslo_engines from oslo_db.sqlalchemy import orm from oslo_db.tests.sqlalchemy import base as test_base +from oslo_db import warning enginefacade.transaction_context_provider(oslo_context.RequestContext) @@ -2182,7 +2183,7 @@ class ConfigOptionsTest(oslo_test_base.BaseTestCase): self.assertEqual(1, len(w)) self.assertTrue( - issubclass(w[-1].category, exception.NotSupportedWarning)) + issubclass(w[-1].category, warning.NotSupportedWarning)) self.assertEqual( "Configuration option(s) ['fake1', 'wrong2'] not supported", str(w[-1].message) diff --git a/oslo_db/warning.py b/oslo_db/warning.py new file mode 100644 index 00000000..3e7ebb66 --- /dev/null +++ b/oslo_db/warning.py @@ -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 + + """