)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"27a9c37ebb4be41498a3561d4338382ebfd2f484","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Guang Yee \u003cguang.yee@hp.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-02-25 14:23:48 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"bug/1131840: fix auth and token data for XML translation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I4408b3e6e0752ca75bc36399f5148890820e9a89"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAM3%2F%2BlqI%3D","line":7,"updated":"2013-02-26 16:59:16.000000000","message":"remove the slash in bug/1131840 so jenkins can track","commit_id":"a839dfbbfe35c53cee22a699feb121d414c22c40"}],"keystone/common/serializer.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"72d22ddf74f2f62460a2af807dd5de42e7526440","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            # If any key ends with an \u0027s\u0027, we are assuming it is a list."},{"line_number":129,"context_line":"            # List element have no attributes."},{"line_number":130,"context_line":"            values \u003d list(values)"},{"line_number":131,"context_line":"            list_item_tag \u003d decoded_tag[:-1]"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        for child in [self.walk_element(x) for x in element"},{"line_number":134,"context_line":"                      if not isinstance(x, ENTITY_TYPE)]:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnMI%3D","line":131,"updated":"2013-02-25 21:16:17.000000000","message":"i assume this will turn policies into a list of \"policie\" elements, correct?","commit_id":"098925295cd61d5a16eb5db25d1ccba6c3c15474"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"256d6fb8f03c8ecabc73c81d9c87d5496508f6d8","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            # If any key ends with an \u0027s\u0027, we are assuming it is a list."},{"line_number":129,"context_line":"            # List element have no attributes."},{"line_number":130,"context_line":"            values \u003d list(values)"},{"line_number":131,"context_line":"            list_item_tag \u003d decoded_tag[:-1]"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        for child in [self.walk_element(x) for x in element"},{"line_number":134,"context_line":"                      if not isinstance(x, ENTITY_TYPE)]:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnJI%3D","line":131,"in_reply_to":"AAAAM3%2F%2BnMI%3D","updated":"2013-02-25 21:23:22.000000000","message":"Yes. We may need to special-case that one.","commit_id":"098925295cd61d5a16eb5db25d1ccba6c3c15474"}],"keystone/middleware/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"72d22ddf74f2f62460a2af807dd5de42e7526440","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            try:"},{"line_number":160,"context_line":"                body_obj \u003d jsonutils.loads(response.body)"},{"line_number":161,"context_line":"                response.body \u003d serializer.to_xml(body_obj)"},{"line_number":162,"context_line":"            except Exception as e:"},{"line_number":163,"context_line":"                LOG.error(e)"},{"line_number":164,"context_line":"                raise exception.Error(message\u003dresponse.body)"},{"line_number":165,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnLg%3D","line":162,"updated":"2013-02-25 21:16:17.000000000","message":"undo","commit_id":"098925295cd61d5a16eb5db25d1ccba6c3c15474"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"72d22ddf74f2f62460a2af807dd5de42e7526440","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                body_obj \u003d jsonutils.loads(response.body)"},{"line_number":161,"context_line":"                response.body \u003d serializer.to_xml(body_obj)"},{"line_number":162,"context_line":"            except Exception as e:"},{"line_number":163,"context_line":"                LOG.error(e)"},{"line_number":164,"context_line":"                raise exception.Error(message\u003dresponse.body)"},{"line_number":165,"context_line":"        return response"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnLk%3D","line":163,"updated":"2013-02-25 21:16:17.000000000","message":"log.exception(\u0027Serializer failed\u0027)","commit_id":"098925295cd61d5a16eb5db25d1ccba6c3c15474"}],"tests/test_v3_auth.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"72d22ddf74f2f62460a2af807dd5de42e7526440","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from keystone.openstack.common import jsonutils"},{"line_number":22,"context_line":"from keystone.openstack.common import timeutils"},{"line_number":23,"context_line":"from keystone import test"},{"line_number":24,"context_line":"from lxml import etree"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"import test_v3"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnLI%3D","line":24,"updated":"2013-02-25 21:16:17.000000000","message":"import order -- lxml goes into it\u0027s own group between uuid and keystone","commit_id":"098925295cd61d5a16eb5db25d1ccba6c3c15474"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"72d22ddf74f2f62460a2af807dd5de42e7526440","unresolved":false,"context_lines":[{"line_number":110,"context_line":"class AuthTest(test_v3.RestfulTestCase):"},{"line_number":111,"context_line":"    def assertValidTokenResponse(self, r):"},{"line_number":112,"context_line":"        self.assertTrue(r.getheader(\u0027X-Subject-Token\u0027))"},{"line_number":113,"context_line":"        token \u003d r.body"},{"line_number":114,"context_line":"        if r.getheader(\u0027Content-Type\u0027).lower() \u003d\u003d \u0027application/xml\u0027:"},{"line_number":115,"context_line":"            token \u003d serializer.from_xml(etree.tostring(token))"},{"line_number":116,"context_line":"        # peel the useless outer layer"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnLE%3D","line":113,"updated":"2013-02-25 21:16:17.000000000","message":"instead of re-assigning token from itself, do it in one go:\n\n  if r.getheader(\u0027Content-Type\u0027) \u003d\u003d \u0027application/xml\u0027:\n    token \u003d serializer.from_xml(etree.tostring(r.body))[\u0027token\u0027]\n  else:\n    token \u003d r.body[\u0027token\u0027]\n\nalso don\u0027t do .lower(), especially in tests","commit_id":"098925295cd61d5a16eb5db25d1ccba6c3c15474"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"256d6fb8f03c8ecabc73c81d9c87d5496508f6d8","unresolved":false,"context_lines":[{"line_number":110,"context_line":"class AuthTest(test_v3.RestfulTestCase):"},{"line_number":111,"context_line":"    def assertValidTokenResponse(self, r):"},{"line_number":112,"context_line":"        self.assertTrue(r.getheader(\u0027X-Subject-Token\u0027))"},{"line_number":113,"context_line":"        token \u003d r.body"},{"line_number":114,"context_line":"        if r.getheader(\u0027Content-Type\u0027).lower() \u003d\u003d \u0027application/xml\u0027:"},{"line_number":115,"context_line":"            token \u003d serializer.from_xml(etree.tostring(token))"},{"line_number":116,"context_line":"        # peel the useless outer layer"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnIw%3D","line":113,"in_reply_to":"AAAAM3%2F%2BnLE%3D","updated":"2013-02-25 21:23:22.000000000","message":"Good point!","commit_id":"098925295cd61d5a16eb5db25d1ccba6c3c15474"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"72d22ddf74f2f62460a2af807dd5de42e7526440","unresolved":false,"context_lines":[{"line_number":608,"context_line":"    def test_remote_user(self):"},{"line_number":609,"context_line":"        auth_data \u003d _build_authentication_request("},{"line_number":610,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"},{"line_number":611,"context_line":"            password\u003dself.user[\u0027password\u0027])[\u0027auth\u0027]"},{"line_number":612,"context_line":"        api \u003d auth.controllers.Auth()"},{"line_number":613,"context_line":"        context \u003d {\u0027REMOTE_USER\u0027: self.user[\u0027name\u0027]}"},{"line_number":614,"context_line":"        auth_info \u003d auth.controllers.AuthInfo(None, auth_data)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnKM%3D","line":611,"updated":"2013-02-25 21:16:17.000000000","message":"why do you need to do this only in remote_user tests? that seems like it\u0027s asserting a broken behavior somewhere...","commit_id":"098925295cd61d5a16eb5db25d1ccba6c3c15474"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"256d6fb8f03c8ecabc73c81d9c87d5496508f6d8","unresolved":false,"context_lines":[{"line_number":608,"context_line":"    def test_remote_user(self):"},{"line_number":609,"context_line":"        auth_data \u003d _build_authentication_request("},{"line_number":610,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"},{"line_number":611,"context_line":"            password\u003dself.user[\u0027password\u0027])[\u0027auth\u0027]"},{"line_number":612,"context_line":"        api \u003d auth.controllers.Auth()"},{"line_number":613,"context_line":"        context \u003d {\u0027REMOTE_USER\u0027: self.user[\u0027name\u0027]}"},{"line_number":614,"context_line":"        auth_info \u003d auth.controllers.AuthInfo(None, auth_data)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnI8%3D","line":611,"in_reply_to":"AAAAM3%2F%2BnKM%3D","updated":"2013-02-25 21:23:22.000000000","message":"For REMOTE_USER, we are calling api.authenticate() directly insteading using self.post(). Therefore, we need to peel the \"auth\" layer.","commit_id":"098925295cd61d5a16eb5db25d1ccba6c3c15474"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"72d22ddf74f2f62460a2af807dd5de42e7526440","unresolved":false,"context_lines":[{"line_number":631,"context_line":"                          auth_context)"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"class TestAuthXML(AuthTest):"},{"line_number":635,"context_line":"    def test_unscoped_token(self):"},{"line_number":636,"context_line":"        auth_data \u003d _build_authentication_request("},{"line_number":637,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnJk%3D","line":634,"updated":"2013-02-25 21:16:17.000000000","message":"i\u0027d rather get the same coverage as the json tests\n\nRename AuthTest to AuthTests, have it extend object instead of a TestCase, and then combine the two in two different classes:\n\n  class TestAuthJSON(test_v3.RestfulTestCase, AuthTests):\n    content_type \u003d \u0027json\u0027\n\n  class TestAuthXML(test_v3.RestfulTestCase, AuthTests):\n    content_type \u003d \u0027xml\u0027","commit_id":"098925295cd61d5a16eb5db25d1ccba6c3c15474"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"256d6fb8f03c8ecabc73c81d9c87d5496508f6d8","unresolved":false,"context_lines":[{"line_number":631,"context_line":"                          auth_context)"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"class TestAuthXML(AuthTest):"},{"line_number":635,"context_line":"    def test_unscoped_token(self):"},{"line_number":636,"context_line":"        auth_data \u003d _build_authentication_request("},{"line_number":637,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnI4%3D","line":634,"in_reply_to":"AAAAM3%2F%2BnJk%3D","updated":"2013-02-25 21:23:22.000000000","message":"Good point!","commit_id":"098925295cd61d5a16eb5db25d1ccba6c3c15474"}]}
