)]}'
{"keystone/common/authorization.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2863dcd4afe2fa7d7f842e67ffaeab085894033a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        creds[\u0027group_ids\u0027] \u003d []"},{"line_number":87,"context_line":"    else:"},{"line_number":88,"context_line":"        creds[\u0027group_ids\u0027] \u003d ["},{"line_number":89,"context_line":"            g[\u0027id\u0027] for g in token_data[\u0027user\u0027][\u0027OS-FEDERATION\u0027].get("},{"line_number":90,"context_line":"                \u0027groups\u0027, [])]"},{"line_number":91,"context_line":"    return creds"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FUPg%3D","line":89,"updated":"2014-03-18 17:13:36.000000000","message":"you could keep this as a one liner with an extra .get() ...\n\n  ... token_data[\u0027user\u0027].get(\u0027OS-FEDERATION\u0027, {}).get(\u0027groups\u0027, [])]","commit_id":"a7737bc73b7f37159f8d86bbb3ff9e05f5782136"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"67a88e2fe548bfcc6bcc531effed60f0cf152dd0","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        for role in token_data[\u0027roles\u0027]:"},{"line_number":84,"context_line":"            creds[\u0027roles\u0027].append(role[\u0027name\u0027])"},{"line_number":85,"context_line":"    creds[\u0027group_ids\u0027] \u003d ["},{"line_number":86,"context_line":"        g[\u0027id\u0027] for g in token_data[\u0027user\u0027].get(\u0027OS-FEDERATION\u0027, {}).get("},{"line_number":87,"context_line":"            \u0027groups\u0027, [])]"},{"line_number":88,"context_line":"    return creds"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FMVQ%3D","line":86,"updated":"2014-03-19 15:28:34.000000000","message":"I would rather see the constant `federation.FEDERATION` used here.","commit_id":"d5377ed6fc72b892c756e74874ce30077bcac3aa"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"a5888e433c8a080559a308663d6e30e51f24a2fb","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        for role in token_data[\u0027roles\u0027]:"},{"line_number":84,"context_line":"            creds[\u0027roles\u0027].append(role[\u0027name\u0027])"},{"line_number":85,"context_line":"    creds[\u0027group_ids\u0027] \u003d ["},{"line_number":86,"context_line":"        g[\u0027id\u0027] for g in token_data[\u0027user\u0027].get(\u0027OS-FEDERATION\u0027, {}).get("},{"line_number":87,"context_line":"            \u0027groups\u0027, [])]"},{"line_number":88,"context_line":"    return creds"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FMCU%3D","line":86,"in_reply_to":"AAAAWH%2F%2FMVQ%3D","updated":"2014-03-19 16:07:14.000000000","message":"Done.\nThought about using constant here too, but decided to preserve format, where no constants are used....","commit_id":"d5377ed6fc72b892c756e74874ce30077bcac3aa"}],"keystone/tests/test_serializer.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"67a88e2fe548bfcc6bcc531effed60f0cf152dd0","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            serializer.to_xml(serializer.from_xml(xml), xmlns),"},{"line_number":37,"context_line":"            ksmatchers.XMLEquals(xml))"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def assertSerializeToXML(self, json_body):"},{"line_number":40,"context_line":"        \"\"\"Serialize JSON body to XML."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        Serialize JSON body to XML, then deserialize to JSON"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FMTU%3D","line":39,"updated":"2014-03-19 15:28:34.000000000","message":"Is there any reason to have this defined here instead of in test_v3_federation? If nothing else is using it yet I think it would be nicer to put it closer to where it is used. It can always be moved in a refactoring later if we see a place to reuse.","commit_id":"d5377ed6fc72b892c756e74874ce30077bcac3aa"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"a5888e433c8a080559a308663d6e30e51f24a2fb","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            serializer.to_xml(serializer.from_xml(xml), xmlns),"},{"line_number":37,"context_line":"            ksmatchers.XMLEquals(xml))"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def assertSerializeToXML(self, json_body):"},{"line_number":40,"context_line":"        \"\"\"Serialize JSON body to XML."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        Serialize JSON body to XML, then deserialize to JSON"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FMA8%3D","line":39,"in_reply_to":"AAAAWH%2F%2FMTU%3D","updated":"2014-03-19 16:07:14.000000000","message":"Nothing but my test is using it at the moment.\nI just wanted to preserve the proper structure (so XML related stuff is added to appropriate classes). I think Dolph was suggesting such thing...","commit_id":"d5377ed6fc72b892c756e74874ce30077bcac3aa"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"67a88e2fe548bfcc6bcc531effed60f0cf152dd0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        again. Expect both JSON dictionaries to be equal."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        \"\"\""},{"line_number":46,"context_line":"        xml_body \u003d serializer.to_xml(copy.deepcopy(json_body))"},{"line_number":47,"context_line":"        json_deserialized \u003d serializer.from_xml(xml_body)"},{"line_number":48,"context_line":"        self.assertDictEqual(json_deserialized, json_body)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FMRI%3D","line":46,"updated":"2014-03-19 15:28:34.000000000","message":"Why the deepcopy here? Does to_xml modify the input? Not advocating for a change here, just curious.","commit_id":"d5377ed6fc72b892c756e74874ce30077bcac3aa"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"a5888e433c8a080559a308663d6e30e51f24a2fb","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        again. Expect both JSON dictionaries to be equal."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        \"\"\""},{"line_number":46,"context_line":"        xml_body \u003d serializer.to_xml(copy.deepcopy(json_body))"},{"line_number":47,"context_line":"        json_deserialized \u003d serializer.from_xml(xml_body)"},{"line_number":48,"context_line":"        self.assertDictEqual(json_deserialized, json_body)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FMAM%3D","line":46,"in_reply_to":"AAAAWH%2F%2FMRI%3D","updated":"2014-03-19 16:07:14.000000000","message":"Didn\u0027t investigate that much, I simply followed the patter from the method above this one.","commit_id":"d5377ed6fc72b892c756e74874ce30077bcac3aa"}],"keystone/tests/test_v3_federation.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"11898a812dd1defd80fce2738ea18d21a653480f","unresolved":false,"context_lines":[{"line_number":846,"context_line":"        self._inject_assertion(context, assertion)"},{"line_number":847,"context_line":"        r \u003d api.authenticate_for_token(context, self.UNSCOPED_V3_SAML2_REQ)"},{"line_number":848,"context_line":"        # Make sure output can be serialized to XML"},{"line_number":849,"context_line":"        serializer.to_xml(r.json_body)"},{"line_number":850,"context_line":"        return r"},{"line_number":851,"context_line":""},{"line_number":852,"context_line":"    def test_issue_unscoped_token(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FUfY%3D","line":849,"updated":"2014-03-18 16:46:14.000000000","message":"This change seems unrelated to the proposed change, but aside from that, what\u0027s the point of it?","commit_id":"a7737bc73b7f37159f8d86bbb3ff9e05f5782136"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2863dcd4afe2fa7d7f842e67ffaeab085894033a","unresolved":false,"context_lines":[{"line_number":846,"context_line":"        self._inject_assertion(context, assertion)"},{"line_number":847,"context_line":"        r \u003d api.authenticate_for_token(context, self.UNSCOPED_V3_SAML2_REQ)"},{"line_number":848,"context_line":"        # Make sure output can be serialized to XML"},{"line_number":849,"context_line":"        serializer.to_xml(r.json_body)"},{"line_number":850,"context_line":"        return r"},{"line_number":851,"context_line":""},{"line_number":852,"context_line":"    def test_issue_unscoped_token(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FUOY%3D","line":849,"in_reply_to":"AAAAWH%2F%2FUfY%3D","updated":"2014-03-18 17:13:36.000000000","message":"this just seems like a lazy approach to actually testing content serialization in test_content_types","commit_id":"a7737bc73b7f37159f8d86bbb3ff9e05f5782136"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"67a88e2fe548bfcc6bcc531effed60f0cf152dd0","unresolved":false,"context_lines":[{"line_number":743,"context_line":""},{"line_number":744,"context_line":""},{"line_number":745,"context_line":"class FederatedTokenTests(FederationTests,"},{"line_number":746,"context_line":"                          test_serializer.XmlSerializerTestCase):"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    IDP \u003d \u0027ORG_IDP\u0027"},{"line_number":749,"context_line":"    PROTOCOL \u003d \u0027saml2\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FMRA%3D","line":746,"updated":"2014-03-19 15:28:34.000000000","message":"Was this added only to get access to the new assert* method?","commit_id":"d5377ed6fc72b892c756e74874ce30077bcac3aa"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"a5888e433c8a080559a308663d6e30e51f24a2fb","unresolved":false,"context_lines":[{"line_number":743,"context_line":""},{"line_number":744,"context_line":""},{"line_number":745,"context_line":"class FederatedTokenTests(FederationTests,"},{"line_number":746,"context_line":"                          test_serializer.XmlSerializerTestCase):"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    IDP \u003d \u0027ORG_IDP\u0027"},{"line_number":749,"context_line":"    PROTOCOL \u003d \u0027saml2\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FMAE%3D","line":746,"in_reply_to":"AAAAWH%2F%2FMRA%3D","updated":"2014-03-19 16:07:14.000000000","message":"Yes.","commit_id":"d5377ed6fc72b892c756e74874ce30077bcac3aa"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"67a88e2fe548bfcc6bcc531effed60f0cf152dd0","unresolved":false,"context_lines":[{"line_number":861,"context_line":"        \"\"\""},{"line_number":862,"context_line":"        r \u003d self._issue_unscoped_token()"},{"line_number":863,"context_line":"        token_resp \u003d r.json_body"},{"line_number":864,"context_line":"        # Remove \u0027extras\u0027 if empty or None, otherwise"},{"line_number":865,"context_line":"        # XML (de)serializer return non-equal results"},{"line_number":866,"context_line":"        if not token_resp[\u0027token\u0027].get(\u0027extras\u0027):"},{"line_number":867,"context_line":"            token_resp[\u0027token\u0027].pop(\u0027extras\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FMQc%3D","line":864,"updated":"2014-03-19 15:28:34.000000000","message":"Is this a problem in production too? Or is it only in tests because of the way we do comparisons?","commit_id":"d5377ed6fc72b892c756e74874ce30077bcac3aa"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"a5888e433c8a080559a308663d6e30e51f24a2fb","unresolved":false,"context_lines":[{"line_number":861,"context_line":"        \"\"\""},{"line_number":862,"context_line":"        r \u003d self._issue_unscoped_token()"},{"line_number":863,"context_line":"        token_resp \u003d r.json_body"},{"line_number":864,"context_line":"        # Remove \u0027extras\u0027 if empty or None, otherwise"},{"line_number":865,"context_line":"        # XML (de)serializer return non-equal results"},{"line_number":866,"context_line":"        if not token_resp[\u0027token\u0027].get(\u0027extras\u0027):"},{"line_number":867,"context_line":"            token_resp[\u0027token\u0027].pop(\u0027extras\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FL%2BA%3D","line":864,"in_reply_to":"AAAAWH%2F%2FMQc%3D","updated":"2014-03-19 16:07:14.000000000","message":"I am removing this object since it\u0027s None in Python terms and one engine converts this value to {} whereas the other to an empty string , making assertDictEqual() fail.\nMy only goal here is to check whether XML is serialized properly and there are no complains about tag names etc.","commit_id":"d5377ed6fc72b892c756e74874ce30077bcac3aa"}]}
