From 036c325d3564b5b6f78fa1f831c1e0a5bca5bf84 Mon Sep 17 00:00:00 2001
From: travis-tahoe <travis-tahoe@jacaranda.org>
Date: Mon, 1 Sep 2014 19:39:57 +0100
Subject: [PATCH] Suppress all UserWarnings, not just ones with known messages.
 refs #2248

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
---
 src/allmydata/__init__.py   | 12 ++++++------
 src/allmydata/_auto_deps.py | 39 ++++++++++++++++++-------------------
 2 files changed, 25 insertions(+), 26 deletions(-)

diff --git a/src/allmydata/__init__.py b/src/allmydata/__init__.py
index 4bafed47..18d15f64 100644
--- a/src/allmydata/__init__.py
+++ b/src/allmydata/__init__.py
@@ -155,7 +155,7 @@ def normalized_version(verstr, what=None):
 def get_package_versions_and_locations():
     import warnings
     from _auto_deps import package_imports, global_deprecation_messages, deprecation_messages, \
-        user_warning_messages, runtime_warning_messages, warning_imports
+        runtime_warning_messages, warning_imports
 
     def package_dir(srcfile):
         return os.path.dirname(os.path.dirname(os.path.normcase(os.path.realpath(srcfile))))
@@ -165,13 +165,13 @@ def get_package_versions_and_locations():
     # or any other bug that causes sys.path to be set up incorrectly. Therefore we
     # must import the packages in order to check their versions and paths.
 
-    # This is to suppress various DeprecationWarnings, UserWarnings, and RuntimeWarnings
+    # This is to suppress all UserWarnings and various DeprecationWarnings and RuntimeWarnings
     # (listed in _auto_deps.py).
 
+    warnings.filterwarnings("ignore", category=UserWarning, append=True)
+
     for msg in global_deprecation_messages + deprecation_messages:
         warnings.filterwarnings("ignore", category=DeprecationWarning, message=msg, append=True)
-    for msg in user_warning_messages:
-        warnings.filterwarnings("ignore", category=UserWarning, message=msg, append=True)
     for msg in runtime_warning_messages:
         warnings.filterwarnings("ignore", category=RuntimeWarning, message=msg, append=True)
     try:
@@ -181,8 +181,8 @@ def get_package_versions_and_locations():
             except ImportError:
                 pass
     finally:
-        # Leave suppressions for global_deprecation_messages active.
-        for ign in runtime_warning_messages + user_warning_messages + deprecation_messages:
+        # Leave suppressions for UserWarnings and global_deprecation_messages active.
+        for ign in runtime_warning_messages + deprecation_messages:
             warnings.filters.pop()
 
     packages = []
diff --git a/src/allmydata/_auto_deps.py b/src/allmydata/_auto_deps.py
index 31e0a7be..1c1a0e18 100644
--- a/src/allmydata/_auto_deps.py
+++ b/src/allmydata/_auto_deps.py
@@ -29,7 +29,11 @@ install_requires = [
     # * The SFTP frontend depends on Twisted 11.0.0 to fix the SSH server
     #   rekeying bug http://twistedmatrix.com/trac/ticket/4395
     #
+    # service-identity is necessary for Twisted and pyOpenSSL to be able to
+    # verify PKI certificates.
+    #
     "Twisted >= 11.0.0",
+    "service-identity",
 
     # * foolscap < 0.5.1 had a performance bug which spent O(N**2) CPU for
     #   transferring large mutable files of size N.
@@ -71,20 +75,21 @@ install_requires = [
 # Includes some indirect dependencies, but does not include allmydata.
 # These are in the order they should be listed by --version, etc.
 package_imports = [
-    # package name      module name
-    ('foolscap',        'foolscap'),
-    ('pycryptopp',      'pycryptopp'),
-    ('zfec',            'zfec'),
-    ('Twisted',         'twisted'),
-    ('Nevow',           'nevow'),
-    ('zope.interface',  'zope.interface'),
-    ('python',          None),
-    ('platform',        None),
-    ('pyOpenSSL',       'OpenSSL'),
-    ('simplejson',      'simplejson'),
-    ('pycrypto',        'Crypto'),
-    ('pyasn1',          'pyasn1'),
-    ('mock',            'mock'),
+    # package name       module name
+    ('foolscap',         'foolscap'),
+    ('pycryptopp',       'pycryptopp'),
+    ('zfec',             'zfec'),
+    ('Twisted',          'twisted'),
+    ('Nevow',            'nevow'),
+    ('zope.interface',   'zope.interface'),
+    ('python',           None),
+    ('platform',         None),
+    ('pyOpenSSL',        'OpenSSL'),
+    ('simplejson',       'simplejson'),
+    ('pycrypto',         'Crypto'),
+    ('pyasn1',           'pyasn1'),
+    ('mock',             'mock'),
+    ('service-identity', 'service_identity')
 ]
 
 def require_more():
@@ -118,12 +123,6 @@ deprecation_messages = [
     "the sets module is deprecated",
 ]
 
-user_warning_messages = [
-    "Hashing uninitialized InterfaceClass instance",
-    "Reliable disconnection notification requires pywin32 215 or later",
-    'You do not have the service_identity module installed. Please install it from <https://pypi.python.org/pypi/service_identity>. Without the service_identity module and a recent enough pyOpenSSL tosupport it, Twisted can perform only rudimentary TLS client hostnameverification.  Many valid certificate/hostname mappings may be rejected.',
-]
-
 runtime_warning_messages = [
     "Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.",
 ]
-- 
2.45.2