From 61506f87bb1f46f46eac30577be5df9413526883 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Fri, 16 Apr 2021 11:55:20 -0400 Subject: [PATCH] Make BytesWarning->exception global, to ease use in integration tests. --- src/allmydata/__init__.py | 17 ++++++++++++++++- src/allmydata/test/__init__.py | 6 ------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/allmydata/__init__.py b/src/allmydata/__init__.py index b29868c05..333394fc5 100644 --- a/src/allmydata/__init__.py +++ b/src/allmydata/__init__.py @@ -8,7 +8,7 @@ from __future__ import division from __future__ import print_function from __future__ import unicode_literals -from future.utils import PY2 +from future.utils import PY2, PY3 if PY2: # Don't import future str() so we don't break Foolscap serialization on Python 2. from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, max, min # noqa: F401 @@ -62,3 +62,18 @@ standard_library.install_aliases() from ._monkeypatch import patch patch() del patch + + +# On Python 3, turn BytesWarnings into exceptions. This can have potential +# production impact... if BytesWarnings are actually present in the codebase. +# Given that this has been enabled before Python 3 Tahoe-LAFS was publicly +# released, no such code should exist, and this will ensure it doesn't get +# added either. +# +# Also note that BytesWarnings only happen if Python is run with -b option, so +# in practice this should only affect tests. +if PY3: + import warnings + # Error on BytesWarnings, to catch things like str(b""), but only for + # allmydata code. + warnings.filterwarnings("error", category=BytesWarning, module=".*allmydata.*") diff --git a/src/allmydata/test/__init__.py b/src/allmydata/test/__init__.py index e9c47bd69..45536a6c6 100644 --- a/src/allmydata/test/__init__.py +++ b/src/allmydata/test/__init__.py @@ -24,7 +24,6 @@ from future.utils import PY2, PY3 if PY2: from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 -import warnings from traceback import extract_stack, format_list from foolscap.pb import Listener @@ -33,11 +32,6 @@ from twisted.application import service from foolscap.logging.incident import IncidentQualifier -if PY3: - # Error on BytesWarnings, to catch things like str(b""), but only for - # allmydata code. - warnings.filterwarnings("error", category=BytesWarning, module=".*allmydata.*") - class NonQualifier(IncidentQualifier, object): def check_event(self, ev):