Added support and tests for unicode support in sessions.

This commit is contained in:
Jakub Roztocil committed 2014-04-26 18:16:30 +02:00
1 parent e8a1c051f9
commit a3352af1d4
4 files changed
+38 -13

No files matched your search

+10 -8
View File
@@ -38,6 +38,15 @@ def get_response(args, config_dir):
return response
def encode_headers(headers):
# This allows for unicode headers which is non-standard but practical.
# See: https://github.com/jkbr/httpie/issues/212
return dict(
(name, value.encode('utf8') if isinstance(value, str) else value)
for name, value in headers.items()
)
def get_requests_kwargs(args):
"""Translate our `args` into `requests.request` keyword arguments."""
@@ -80,18 +89,11 @@ def get_requests_kwargs(args):
if args.certkey:
cert = (cert, args.certkey)
# This allows for unicode headers which is non-standard but practical.
# See: https://github.com/jkbr/httpie/issues/212
headers = dict(
(name, value.encode('utf8') if isinstance(value, str) else value)
for name, value in args.headers.items()
)
kwargs = {
'stream': True,
'method': args.method.lower(),
'url': args.url,
'headers': headers,
'headers': encode_headers(args.headers),
'data': args.data,
'verify': {
'yes': True,
+8 -3
View File
@@ -19,11 +19,16 @@ class HTTPBasicAuth(requests.auth.HTTPBasicAuth):
See https://github.com/jkbr/httpie/issues/212
"""
credentials = u'%s:%s' % (self.username, self.password)
token = b64encode(credentials.encode('utf8')).strip().decode('latin1')
r.headers['Authorization'] = 'Basic %s' % token
r.headers['Authorization'] = type(self).make_header(
self.username, self.password).encode('latin1')
return r
@staticmethod
def make_header(username, password):
credentials = u'%s:%s' % (username, password)
token = b64encode(credentials.encode('utf8')).strip().decode('latin1')
return 'Basic %s' % token
class BasicAuthPlugin(BuiltinAuthPlugin):
+4 -2
View File
@@ -27,6 +27,7 @@ def get_response(session_name, requests_kwargs, config_dir, args,
aspects of the session to the request.
"""
from .client import encode_headers
if os.path.sep in session_name:
path = os.path.expanduser(session_name)
else:
@@ -49,8 +50,9 @@ def get_response(session_name, requests_kwargs, config_dir, args,
request_headers = requests_kwargs.get('headers', {})
requests_kwargs['headers'] = dict(session.headers)
requests_kwargs['headers'].update(request_headers)
merged_headers = dict(session.headers)
merged_headers.update(request_headers)
requests_kwargs['headers'] = encode_headers(merged_headers)
session.update_headers(request_headers)