diff --git a/requests/help.py b/requests/help.py index cd961c78..5440ee61 100644 --- a/requests/help.py +++ b/requests/help.py @@ -6,6 +6,7 @@ import platform import sys import ssl +import idna import urllib3 import chardet @@ -84,6 +85,9 @@ def info(): cryptography_info = { 'version': getattr(cryptography, '__version__', ''), } + idna_info = { + 'version': getattr(idna, '__version__', ''), + } # OPENSSL_VERSION_NUMBER doesn't exist in the Python 2.6 ssl module. system_ssl = getattr(ssl, 'OPENSSL_VERSION_NUMBER', None) @@ -100,6 +104,7 @@ def info(): 'urllib3': urllib3_info, 'chardet': chardet_info, 'cryptography': cryptography_info, + 'idna': idna_info, 'requests': { 'version': requests_version, }, diff --git a/tests/test_help.py b/tests/test_help.py index f08fdd97..c11d43f3 100644 --- a/tests/test_help.py +++ b/tests/test_help.py @@ -19,3 +19,22 @@ def test_system_ssl_py26(): def test_system_ssl(): """Verify we're actually setting system_ssl when it should be available.""" assert info()['system_ssl']['version'] != '' + + +class VersionedPackage(object): + def __init__(self, version): + self.__version__ = version + + +def test_idna_without_version_attribute(mocker): + """Older versions of IDNA don't provide a __version__ attribute, verify + that if we have such a package, we don't blow up. + """ + mocker.patch('requests.help.idna', new=None) + assert info()['idna'] == {'version': ''} + + +def test_idna_with_version_attribute(mocker): + """Verify we're actually setting idna version when it should be available.""" + mocker.patch('requests.help.idna', new=VersionedPackage('2.6')) + assert info()['idna'] == {'version': '2.6'}