)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b3487aebb10c5c95af3a260112d12bcab879d3ee","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"User-agent header shouldn\u0027t start with a space"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In the case of Ansible\u0027s os_network and related modules, sys.argv[0]"},{"line_number":10,"context_line":"gets set to an empty string. This leads to the keystoneauth1 module"},{"line_number":11,"context_line":"sending a User-Agent header that starts with a leading space. This"},{"line_number":12,"context_line":"was fine until the new requests 2.11.0 was released which errors if"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9ad45d7e_243b263a","line":9,"updated":"2016-08-09 14:37:29.000000000","message":"It would be clearer to reviewers if this said \"the application name\" rather than \"sys.argv[0]\"\n\nAlso, leaving off details of Ansible would be clearer since this could happen in any environment where sys.argv[0] is an empty string.","commit_id":"37a572d07fbacca0dac6d5f2ad5975d375801faf"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5185f2bb984352cb88d5a829b2310ae8931ef518","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Invalid return character or leading space in header: User-Agent"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This comes from keystone auth trying to prepend the empty module"},{"line_number":16,"context_line":"name to the default user agent, which leads to the it sending a"},{"line_number":17,"context_line":"User-Agent header that starts with a blank space. This was fine"},{"line_number":18,"context_line":"until the new requests 2.11.0 was released which errors if header"},{"line_number":19,"context_line":"values start with a leading space."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9ad45d7e_d6291839","line":16,"range":{"start_line":16,"start_character":47,"end_line":16,"end_character":53},"updated":"2016-08-09 15:52:07.000000000","message":"remove \"the\"","commit_id":"530f52ab5b63e96cfeb2de57cb540991aa67a29e"}],"keystoneauth1/session.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b3487aebb10c5c95af3a260112d12bcab879d3ee","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        # sys.argv is empty, usually the Python interpreter prevents this."},{"line_number":156,"context_line":"        return None"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    if name \u003d\u003d \u0027\u0027:"},{"line_number":159,"context_line":"        return None"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    name \u003d os.path.basename(name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_847812f4","line":158,"updated":"2016-08-09 14:37:29.000000000","message":"Suggest change this to \"if not name\"","commit_id":"37a572d07fbacca0dac6d5f2ad5975d375801faf"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4959f50a2aaeba855b413d11d151c218be69b7f4","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        if user_agent is None:"},{"line_number":242,"context_line":"            user_agent \u003d _determine_user_agent()"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        if user_agent is not None:"},{"line_number":245,"context_line":"            self.user_agent \u003d \"%s %s\" % (user_agent, DEFAULT_USER_AGENT)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        self._json \u003d _JSONEncoder()"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_49bf6ffb","line":245,"range":{"start_line":244,"start_character":0,"end_line":245,"end_character":72},"updated":"2016-08-09 04:38:34.000000000","message":"but now you won\u0027t have any user_agent set since \"user_agent\" will be None -- you won\u0027t get the DEFAULT_USER_AGENT value.","commit_id":"37a572d07fbacca0dac6d5f2ad5975d375801faf"},{"author":{"_account_id":22478,"name":"Benjamin VanHavermaet","email":"bvanhav@us.ibm.com","username":"bvanhav"},"change_message_id":"c3925a38131b563cd13a313ce3a3309ecde347cd","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        if user_agent is None:"},{"line_number":242,"context_line":"            user_agent \u003d _determine_user_agent()"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        if user_agent is not None:"},{"line_number":245,"context_line":"            self.user_agent \u003d \"%s %s\" % (user_agent, DEFAULT_USER_AGENT)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        self._json \u003d _JSONEncoder()"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_55ffe2a9","line":245,"range":{"start_line":244,"start_character":0,"end_line":245,"end_character":72},"in_reply_to":"9ad45d7e_24fe8638","updated":"2016-08-09 15:12:35.000000000","message":"I can see at least two cases where the existing _determine_user_agent could return None, so that issue already existed.","commit_id":"37a572d07fbacca0dac6d5f2ad5975d375801faf"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b3487aebb10c5c95af3a260112d12bcab879d3ee","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        if user_agent is None:"},{"line_number":242,"context_line":"            user_agent \u003d _determine_user_agent()"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        if user_agent is not None:"},{"line_number":245,"context_line":"            self.user_agent \u003d \"%s %s\" % (user_agent, DEFAULT_USER_AGENT)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        self._json \u003d _JSONEncoder()"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_24fe8638","line":245,"range":{"start_line":244,"start_character":0,"end_line":245,"end_character":72},"in_reply_to":"9ad45d7e_49bf6ffb","updated":"2016-08-09 14:37:29.000000000","message":"_determine_user_agent could return None before, so this problem already existed, didn\u0027t it?","commit_id":"37a572d07fbacca0dac6d5f2ad5975d375801faf"},{"author":{"_account_id":13181,"name":"Matt Mulsow","email":"mamulsow@us.ibm.com","username":"mamulsow"},"change_message_id":"0c59c8747d485edf5682d7c552a0447016cd1454","unresolved":false,"context_lines":[{"line_number":494,"context_line":"        if self.timeout is not None:"},{"line_number":495,"context_line":"            kwargs.setdefault(\u0027timeout\u0027, self.timeout)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        if user_agent:"},{"line_number":498,"context_line":"            headers[\u0027User-Agent\u0027] \u003d user_agent"},{"line_number":499,"context_line":"        elif self.user_agent:"},{"line_number":500,"context_line":"            user_agent \u003d headers.setdefault(\u0027User-Agent\u0027, self.user_agent)"},{"line_number":501,"context_line":"        else:"},{"line_number":502,"context_line":"            user_agent \u003d headers.setdefault(\u0027User-Agent\u0027, DEFAULT_USER_AGENT)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        if self.original_ip:"},{"line_number":505,"context_line":"            headers.setdefault(\u0027Forwarded\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_3813500f","line":502,"range":{"start_line":497,"start_character":0,"end_line":502,"end_character":77},"updated":"2016-08-09 12:23:27.000000000","message":"Hey Steve, this code will still set the user agent if it\u0027s not specified in the Session constructor. It seems to me the Session.user_agent that is set in the constructor is intended to give a way to overwrite the default user agent to something more specific, but if you don\u0027t want to override it then Session.user_agent should just stay None and this code will send the DEFAULT_USER_AGENT.","commit_id":"37a572d07fbacca0dac6d5f2ad5975d375801faf"}],"keystoneauth1/tests/unit/test_session.py":[{"author":{"_account_id":20089,"name":"Shawn Berger","email":"slberger@us.ibm.com","username":"slberger"},"change_message_id":"9e8b706f8fc488abd00b31063ba0803572eb80d0","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        # If sys.argv[0] is an empty string, then doesn\u0027t fail."},{"line_number":147,"context_line":"        with mock.patch.object(sys, \u0027argv\u0027, [\u0027\u0027]):"},{"line_number":148,"context_line":"            session \u003d client_session.Session()"},{"line_number":149,"context_line":"            resp \u003d session.get(self.TEST_URL)"},{"line_number":150,"context_line":"            self.assertTrue(resp.ok)"},{"line_number":151,"context_line":"            self.assertRequestHeaderEqual("},{"line_number":152,"context_line":"                \u0027User-Agent\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_d6a2b84a","line":149,"updated":"2016-08-09 15:58:16.000000000","message":"If this change exists in a different patch set should it be included here?  referring to https://review.openstack.org/#/c/352985/","commit_id":"530f52ab5b63e96cfeb2de57cb540991aa67a29e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"fdb3ebd5cd67d1c9a2338f98a7c42f56bea34500","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        # If sys.argv[0] is an empty string, then doesn\u0027t fail."},{"line_number":147,"context_line":"        with mock.patch.object(sys, \u0027argv\u0027, [\u0027\u0027]):"},{"line_number":148,"context_line":"            session \u003d client_session.Session()"},{"line_number":149,"context_line":"            resp \u003d session.get(self.TEST_URL)"},{"line_number":150,"context_line":"            self.assertTrue(resp.ok)"},{"line_number":151,"context_line":"            self.assertRequestHeaderEqual("},{"line_number":152,"context_line":"                \u0027User-Agent\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_8ab5b432","line":149,"in_reply_to":"9ad45d7e_d6a2b84a","updated":"2016-08-09 16:04:40.000000000","message":"I don\u0027t know what it means for a change exists in a different patch set.\n\nhttps://review.openstack.org/#/c/352985/ added some tests that show how the code works without the fix proposed in this change.","commit_id":"530f52ab5b63e96cfeb2de57cb540991aa67a29e"}]}
