)]}'
{"swiftclient/client.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4f459a4a6ee6c26d01aaf035d361e2c94a4d29aa","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import logging"},{"line_number":23,"context_line":"import warnings"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from oslo_utils import encodeutils"},{"line_number":26,"context_line":"from distutils.version import StrictVersion"},{"line_number":27,"context_line":"from requests.exceptions import RequestException, SSLError"},{"line_number":28,"context_line":"from six.moves import http_client"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_2ab21395","line":25,"updated":"2015-12-07 17:03:29.000000000","message":"We don\u0027t currently require oslo_utils. It will get installed (by way of python-keystoneclient) for tests, but it\u0027s not listed in requirements.txt. I\u0027m not sure we want to require it just for some decoding.","commit_id":"53587ce1078c0910aa48265bda85bae0e44d4b64"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4f459a4a6ee6c26d01aaf035d361e2c94a4d29aa","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def safe_header(name, value):"},{"line_number":79,"context_line":"    if name in SENSITIVE_HEADERS:"},{"line_number":80,"context_line":"        # because in python3 byte string handling is ... ug"},{"line_number":81,"context_line":"        v \u003d value.encode(\u0027utf-8\u0027)"},{"line_number":82,"context_line":"        h \u003d hashlib.sha1(v)"},{"line_number":83,"context_line":"        d \u003d h.hexdigest()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_4a5bdf54","line":80,"updated":"2015-12-07 17:03:29.000000000","message":"Speaking of python3 and bytes strings... do we know for sure that name will be a native string or unicode? Under py3,\n\n b\u0027x\u0027 not in (\u0027x\u0027, \u0027y\u0027)\n\nEither way, we probably want to do a case-insensitive comparison, though.","commit_id":"53587ce1078c0910aa48265bda85bae0e44d4b64"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4f459a4a6ee6c26d01aaf035d361e2c94a4d29aa","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        v \u003d value.encode(\u0027utf-8\u0027)"},{"line_number":82,"context_line":"        h \u003d hashlib.sha1(v)"},{"line_number":83,"context_line":"        d \u003d h.hexdigest()"},{"line_number":84,"context_line":"        return encodeutils.safe_decode(name), \"{SHA1}%s\" % d"},{"line_number":85,"context_line":"    else:"},{"line_number":86,"context_line":"        return (encodeutils.safe_decode(name),"},{"line_number":87,"context_line":"                encodeutils.safe_decode(value))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_104bc8b1","line":84,"updated":"2015-12-07 17:03:29.000000000","message":"Any reason to do a SHA1 here rather than just truncate the token (as is done in Swift)?\n\nIf we want to truncate, the default value for reveal_sensitive_prefix at https://github.com/openstack/swift/blob/5eaa554/etc/proxy-server.conf-sample#L577-L587 suggests that 16 chars is a decent choice.","commit_id":"53587ce1078c0910aa48265bda85bae0e44d4b64"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4f459a4a6ee6c26d01aaf035d361e2c94a4d29aa","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        else:"},{"line_number":101,"context_line":"            string_parts.append(\u0027 %s\u0027 % element)"},{"line_number":102,"context_line":"    if \u0027headers\u0027 in kwargs:"},{"line_number":103,"context_line":"        for element in kwargs[\u0027headers\u0027]:"},{"line_number":104,"context_line":"            header \u003d \u0027 -H \"%s: %s\"\u0027 % safe_header(element, kwargs[\u0027headers\u0027][element])"},{"line_number":105,"context_line":"            string_parts.append(header)"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_4a743fce","line":103,"updated":"2015-12-07 17:03:29.000000000","message":"As long as we\u0027re in here, mind swapping this for something like\n\n for name, value in kwargs[\u0027headers\u0027].items():\n\n? It should also let us get back under the 80-char line limit without needing to wrap.","commit_id":"53587ce1078c0910aa48265bda85bae0e44d4b64"}]}
