From 982268a2019b451b587f717675039ebccf00a658 Mon Sep 17 00:00:00 2001 From: Donald Stufft Date: Sat, 7 Jul 2012 16:07:19 -0400 Subject: [PATCH 1/4] Include the implementation and implementation version number in the default User-Agent --- requests/defaults.py | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/requests/defaults.py b/requests/defaults.py index 41e279df..b42d8fa8 100644 --- a/requests/defaults.py +++ b/requests/defaults.py @@ -26,14 +26,41 @@ Configurations: SCHEMAS = ['http', 'https'] +import platform +import sys + from . import __version__ defaults = dict() +_implementation = platform.python_implementation() + +if _implementation == 'CPython': + _implementation_version = platform.python_version() +elif _implementation == 'PyPy': + _implementation_version = '%s.%s.%s' % ( + sys.pypy_version_info.major, + sys.pypy_version_info.minor, + sys.pypy_version_info.micro + ) + if sys.pypy_version_info.releaselevel != 'final': + _implementation_version = ''.join([_implementation_version, sys.pypy_version_info.releaselevel]) +elif _implementation == 'Jython': + # @@@ Is there a better way of getting this? + _implementation_version = platform.python_version() +elif _implementation == 'IronPython': + # @@@ Is there a better way of getting this? + _implementation_version = platform.python_version() +else: + _implementation_version = 'Unknown' + + defaults['base_headers'] = { - 'User-Agent': 'python-requests/%s' % __version__, - 'Accept-Encoding': ', '.join(('identity', 'deflate', 'compress', 'gzip')), + 'User-Agent': " ".join([ + 'python-requests/%s' % __version__, + '%s/%s' % (_implementation, _implementation_version), + ]), 'Accept': '*/*' } @@ -49,5 +76,3 @@ defaults['keep_alive'] = True defaults['encode_uri'] = True defaults['trust_env'] = True defaults['store_cookies'] = True - - From 11433d942dcc0bb9e321141ff04d378568c288fb Mon Sep 17 00:00:00 2001 From: Donald Stufft Date: Sat, 7 Jul 2012 16:13:39 -0400 Subject: [PATCH 2/4] Include the system name and version in the default user agent --- requests/defaults.py | 1 + 1 file changed, 1 insertion(+) diff --git a/requests/defaults.py b/requests/defaults.py index b42d8fa8..b3b0970d 100644 --- a/requests/defaults.py +++ b/requests/defaults.py @@ -60,6 +60,7 @@ defaults['base_headers'] = { 'User-Agent': " ".join([ 'python-requests/%s' % __version__, '%s/%s' % (_implementation, _implementation_version), + '%s/%s' % (platform.system(), platform.release()), ]), 'Accept': '*/*' } From 523433f26cc6385b91fcc87186437474abd2cde1 Mon Sep 17 00:00:00 2001 From: Donald Stufft Date: Sun, 8 Jul 2012 00:37:23 -0400 Subject: [PATCH 3/4] Readd default that was accidently removed --- requests/defaults.py | 1 + 1 file changed, 1 insertion(+) diff --git a/requests/defaults.py b/requests/defaults.py index b3b0970d..75fdfbdf 100644 --- a/requests/defaults.py +++ b/requests/defaults.py @@ -62,6 +62,7 @@ defaults['base_headers'] = { '%s/%s' % (_implementation, _implementation_version), '%s/%s' % (platform.system(), platform.release()), ]), + 'Accept-Encoding': ', '.join(('identity', 'deflate', 'compress', 'gzip')), 'Accept': '*/*' } From 21f60fe8dfe2ebbde2318f763f585d7de18d3d6f Mon Sep 17 00:00:00 2001 From: Donald Stufft Date: Sun, 8 Jul 2012 00:47:24 -0400 Subject: [PATCH 4/4] Move the user agent generation into it's own utility function --- requests/defaults.py | 34 ++-------------------------------- requests/utils.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/requests/defaults.py b/requests/defaults.py index 75fdfbdf..87e088b7 100644 --- a/requests/defaults.py +++ b/requests/defaults.py @@ -26,42 +26,12 @@ Configurations: SCHEMAS = ['http', 'https'] -import platform -import sys - -from . import __version__ +from .utils import default_user_agent defaults = dict() - -_implementation = platform.python_implementation() - -if _implementation == 'CPython': - _implementation_version = platform.python_version() -elif _implementation == 'PyPy': - _implementation_version = '%s.%s.%s' % ( - sys.pypy_version_info.major, - sys.pypy_version_info.minor, - sys.pypy_version_info.micro - ) - if sys.pypy_version_info.releaselevel != 'final': - _implementation_version = ''.join([_implementation_version, sys.pypy_version_info.releaselevel]) -elif _implementation == 'Jython': - # @@@ Is there a better way of getting this? - _implementation_version = platform.python_version() -elif _implementation == 'IronPython': - # @@@ Is there a better way of getting this? - _implementation_version = platform.python_version() -else: - _implementation_version = 'Unknown' - - defaults['base_headers'] = { - 'User-Agent': " ".join([ - 'python-requests/%s' % __version__, - '%s/%s' % (_implementation, _implementation_version), - '%s/%s' % (platform.system(), platform.release()), - ]), + 'User-Agent': default_user_agent(), 'Accept-Encoding': ', '.join(('identity', 'deflate', 'compress', 'gzip')), 'Accept': '*/*' } diff --git a/requests/utils.py b/requests/utils.py index 926b6f29..730b2f3a 100644 --- a/requests/utils.py +++ b/requests/utils.py @@ -12,10 +12,13 @@ that are also useful for external consumption. import cgi import codecs import os +import platform import re +import sys import zlib from netrc import netrc, NetrcParseError +from . import __version__ from .compat import parse_http_list as _parse_list_header from .compat import quote, urlparse, basestring, bytes, str from .cookies import RequestsCookieJar, cookiejar_from_dict @@ -457,3 +460,31 @@ def get_environ_proxies(): get_proxy = lambda k: os.environ.get(k) or os.environ.get(k.upper()) proxies = [(key, get_proxy(key + '_proxy')) for key in proxy_keys] return dict([(key, val) for (key, val) in proxies if val]) + + +def default_user_agent(): + """Return a string representing the default user agent.""" + _implementation = platform.python_implementation() + + if _implementation == 'CPython': + _implementation_version = platform.python_version() + elif _implementation == 'PyPy': + _implementation_version = '%s.%s.%s' % ( + sys.pypy_version_info.major, + sys.pypy_version_info.minor, + sys.pypy_version_info.micro + ) + if sys.pypy_version_info.releaselevel != 'final': + _implementation_version = ''.join([_implementation_version, sys.pypy_version_info.releaselevel]) + elif _implementation == 'Jython': + _implementation_version = platform.python_version() # Complete Guess + elif _implementation == 'IronPython': + _implementation_version = platform.python_version() # Complete Guess + else: + _implementation_version = 'Unknown' + + return " ".join([ + 'python-requests/%s' % __version__, + '%s/%s' % (_implementation, _implementation_version), + '%s/%s' % (platform.system(), platform.release()), + ])