)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fcdb5d455720624af7690bceb65465b2d4f073c7","unresolved":false,"context_lines":[{"line_number":12,"context_line":"when I do a list."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I91f8fb15a2e9a8326059d7a60d2bf1b4c4aa6daa"},{"line_number":15,"context_line":"Closes-bug: #1460492"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a4dcd0f_8cac8fa1","line":15,"updated":"2015-08-05 05:06:05.000000000","message":"change this to:\n\n  implements bp: list-credentials-by-type\n\ni\u0027m going to mark the bug as invalid and indicate that it\u0027s superseded by the blueprint","commit_id":"9e54a6af2be060b70e66127decc53865004364eb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"430cf3232ec198f3cdd05e10e881cbb2587fb0f5","unresolved":false,"context_lines":[{"line_number":12,"context_line":"when I do a list."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I91f8fb15a2e9a8326059d7a60d2bf1b4c4aa6daa"},{"line_number":15,"context_line":"Closes-bug: #1460492"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a4dcd0f_8ce80fb6","line":15,"in_reply_to":"1a4dcd0f_8cac8fa1","updated":"2015-08-05 05:07:26.000000000","message":"actually keep this text too:\n\n  implements bp: list-credentials-by-type\n  Closes-Bug: #1460492\n\nWe should keep the bug open for tracking the client side support","commit_id":"9e54a6af2be060b70e66127decc53865004364eb"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"1f6f197dae2ebd1719a47a18b4bd979578c4ed2d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"when I do a list."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I91f8fb15a2e9a8326059d7a60d2bf1b4c4aa6daa"},{"line_number":15,"context_line":"Closes-bug: #1460492"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a4dcd0f_e3ba0123","line":15,"in_reply_to":"1a4dcd0f_8ce80fb6","updated":"2015-08-05 06:01:52.000000000","message":"Done","commit_id":"9e54a6af2be060b70e66127decc53865004364eb"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"55f40f21bc24fc59d9b01124d0e6638f62e5bbd3","unresolved":false,"context_lines":[{"line_number":12,"context_line":"when I do a list."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I91f8fb15a2e9a8326059d7a60d2bf1b4c4aa6daa"},{"line_number":15,"context_line":"bp list_credentials_by_type"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a4dcd0f_03d84d1c","line":15,"updated":"2015-08-05 06:16:50.000000000","message":"add the bug back too :)\n\n  Closes-Bug: #1460492","commit_id":"a527f88a0b0efb61f901604a08cf6308bcd4bc98"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"47f165ac05d77ef987e4cba4e64fd400635702e0","unresolved":false,"context_lines":[{"line_number":12,"context_line":"when I do a list."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I91f8fb15a2e9a8326059d7a60d2bf1b4c4aa6daa"},{"line_number":15,"context_line":"bp list_credentials_by_type"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a4dcd0f_635a4d2c","line":15,"in_reply_to":"1a4dcd0f_03d84d1c","updated":"2015-08-05 16:34:47.000000000","message":"Done","commit_id":"a527f88a0b0efb61f901604a08cf6308bcd4bc98"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5517fe34539fc4a4d1510ce635c245dcd577089e","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I91f8fb15a2e9a8326059d7a60d2bf1b4c4aa6daa"},{"line_number":15,"context_line":"Closes-bug: #1460492"},{"line_number":16,"context_line":"bp list-credentials-by-type"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1a4dcd0f_b0cfbe28","line":16,"updated":"2015-08-07 20:17:45.000000000","message":"The blueprint isn\u0027t approved.","commit_id":"a493d1381286eb62983c7de4cec3f6fad9ad451a"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"7fa1d28a7f04993203154772524e0720f9a4aa3d","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I91f8fb15a2e9a8326059d7a60d2bf1b4c4aa6daa"},{"line_number":15,"context_line":"Closes-bug: #1460492"},{"line_number":16,"context_line":"bp list-credentials-by-type"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1a4dcd0f_a43b0338","line":16,"in_reply_to":"1a4dcd0f_b0cfbe28","updated":"2015-08-07 20:41:30.000000000","message":"Thanks for noticed that, after talk in the irc, the blueprint was approved and targeted to liberty.","commit_id":"a493d1381286eb62983c7de4cec3f6fad9ad451a"}],"keystone/credential/controllers.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"20ae9f3e4eaceafefac609e3e989c7c26224ba6d","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        else:"},{"line_number":82,"context_line":"            return ref"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @controller.filterprotected(\u0027user_id\u0027, \u0027type\u0027)"},{"line_number":85,"context_line":"    def list_credentials(self, context, filters):"},{"line_number":86,"context_line":"        hints \u003d CredentialV3.build_driver_hints(context, filters)"},{"line_number":87,"context_line":"        refs \u003d self.credential_api.list_credentials(hints)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_04c67716","line":84,"updated":"2015-08-07 20:48:46.000000000","message":"suggest put these in alphabetical order.\n\nAlso, a test that you can set policy for this would be nice.","commit_id":"a493d1381286eb62983c7de4cec3f6fad9ad451a"}],"keystone/tests/unit/test_v3_credential.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"7b36b37b5b7c22e3d5fa466f5997c61ba65b7cfd","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        r \u003d self.get(\u0027/credentials?type\u003d%s\u0027 % \u0027cert\u0027)"},{"line_number":109,"context_line":"        self.assertValidCredentialListResponse(r, ref\u003dself.credential)"},{"line_number":110,"context_line":"        for cred in r.result[\u0027credentials\u0027]:"},{"line_number":111,"context_line":"            self.assertEqual(self.credential[\u0027type\u0027], cred[\u0027type\u0027])"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        r_ec2 \u003d self.get(\u0027/credentials?type\u003d%s\u0027 % \u0027ec2\u0027)"},{"line_number":114,"context_line":"        for cred in r_ec2.result[\u0027credentials\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_73f136cd","line":111,"updated":"2015-08-03 19:21:52.000000000","message":"I\u0027d suggest to use \u0027cert\u0027 directly instead of self.credential[\u0027type\u0027], as you are setting it directly in the call at L 108 as well. That would make the test clearer, as you are doing in L 113 - 115.\n\nIt would be:\n\n    self.assertEqual(\u0027cert\u0027, cred[\u0027type\u0027])","commit_id":"7160d0cf3a7c8fdae78d637cad1e32822c931878"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b3425baf8b465ce8c119842d91e8d88aaed94f28","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        self.credential_api.create_credential("},{"line_number":135,"context_line":"            credential_user2_cert[\u0027id\u0027], credential_user2_cert)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        r \u003d self.get(\u0027/credentials?user_id\u003d%s\u0026\u0026type\u003d%s\u0027 % (user1_id, \u0027ec2\u0027))"},{"line_number":138,"context_line":"        for cred in r.result[\u0027credentials\u0027]:"},{"line_number":139,"context_line":"            self.assertEqual(\u0027ec2\u0027, cred[\u0027type\u0027])"},{"line_number":140,"context_line":"            self.assertEqual(user1_id, cred[\u0027user_id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_e22c84ad","line":137,"updated":"2015-08-04 04:23:56.000000000","message":"hmm, i would have thought that only one \u0026 is needed.","commit_id":"53a5c28c1c195d2d0dc531ee3ef275df3a1aa31d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b3425baf8b465ce8c119842d91e8d88aaed94f28","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        r \u003d self.get(\u0027/credentials?user_id\u003d%s\u0026\u0026type\u003d%s\u0027 % (user1_id, \u0027ec2\u0027))"},{"line_number":138,"context_line":"        for cred in r.result[\u0027credentials\u0027]:"},{"line_number":139,"context_line":"            self.assertEqual(\u0027ec2\u0027, cred[\u0027type\u0027])"},{"line_number":140,"context_line":"            self.assertEqual(user1_id, cred[\u0027user_id\u0027])"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_create_credential(self):"},{"line_number":143,"context_line":"        \"\"\"Call ``POST /credentials``.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_020df03d","line":140,"updated":"2015-08-04 04:23:56.000000000","message":"you could also assert the length of r.result[\u0027credentials\u0027] is one.","commit_id":"53a5c28c1c195d2d0dc531ee3ef275df3a1aa31d"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a5ee9f7ec497d12675ac5a5d5517e4c6a9253a5b","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        r \u003d self.get(\u0027/credentials?user_id\u003d%s\u0026\u0026type\u003d%s\u0027 % (user1_id, \u0027ec2\u0027))"},{"line_number":138,"context_line":"        for cred in r.result[\u0027credentials\u0027]:"},{"line_number":139,"context_line":"            self.assertEqual(\u0027ec2\u0027, cred[\u0027type\u0027])"},{"line_number":140,"context_line":"            self.assertEqual(user1_id, cred[\u0027user_id\u0027])"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_create_credential(self):"},{"line_number":143,"context_line":"        \"\"\"Call ``POST /credentials``.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_f41d1abe","line":140,"in_reply_to":"1a4dcd0f_020df03d","updated":"2015-08-04 07:44:04.000000000","message":"++ I think this good thing to do","commit_id":"53a5c28c1c195d2d0dc531ee3ef275df3a1aa31d"},{"author":{"_account_id":16625,"name":"Marianne Linhares Monteiro","email":"mariannelinharesm@gmail.com","username":"marianneLinhares"},"change_message_id":"bd7245aa93534d6f48c36df852af3fcef09f4fb0","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        r \u003d self.get(\u0027/credentials?user_id\u003d%s\u0026\u0026type\u003d%s\u0027 % (user1_id, \u0027ec2\u0027))"},{"line_number":138,"context_line":"        for cred in r.result[\u0027credentials\u0027]:"},{"line_number":139,"context_line":"            self.assertEqual(\u0027ec2\u0027, cred[\u0027type\u0027])"},{"line_number":140,"context_line":"            self.assertEqual(user1_id, cred[\u0027user_id\u0027])"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_create_credential(self):"},{"line_number":143,"context_line":"        \"\"\"Call ``POST /credentials``.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_06d2b7d2","line":140,"in_reply_to":"1a4dcd0f_020df03d","updated":"2015-08-04 17:26:06.000000000","message":"Ok, Steve, I\u0027ll change that.","commit_id":"53a5c28c1c195d2d0dc531ee3ef275df3a1aa31d"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"94c2e54faa10a1ec53cbd3babfbc20226cf97457","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def test_list_credentials_filtered_by_type(self):"},{"line_number":102,"context_line":"        \"\"\"Call ``GET  /credentials?type\u003d{type}``.\"\"\""},{"line_number":103,"context_line":"        credential \u003d self.new_credential_ref("},{"line_number":104,"context_line":"            user_id\u003duuid.uuid4().hex, cred_type\u003d\u0027ec2\u0027)"},{"line_number":105,"context_line":"        self.credential_api.create_credential("},{"line_number":106,"context_line":"            credential[\u0027id\u0027], credential)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_40973048","line":103,"updated":"2015-08-05 02:32:12.000000000","message":"for clarity it is probably better to name this to ec_credential,  since we also have a variable called self.credential.","commit_id":"9e54a6af2be060b70e66127decc53865004364eb"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"1f6f197dae2ebd1719a47a18b4bd979578c4ed2d","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def test_list_credentials_filtered_by_type(self):"},{"line_number":102,"context_line":"        \"\"\"Call ``GET  /credentials?type\u003d{type}``.\"\"\""},{"line_number":103,"context_line":"        credential \u003d self.new_credential_ref("},{"line_number":104,"context_line":"            user_id\u003duuid.uuid4().hex, cred_type\u003d\u0027ec2\u0027)"},{"line_number":105,"context_line":"        self.credential_api.create_credential("},{"line_number":106,"context_line":"            credential[\u0027id\u0027], credential)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_03b60d3d","line":103,"in_reply_to":"1a4dcd0f_40973048","updated":"2015-08-05 06:01:52.000000000","message":"Done","commit_id":"9e54a6af2be060b70e66127decc53865004364eb"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"94c2e54faa10a1ec53cbd3babfbc20226cf97457","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        r_ec2 \u003d self.get(\u0027/credentials?type\u003d%s\u0027 % \u0027ec2\u0027)"},{"line_number":114,"context_line":"        for cred in r_ec2.result[\u0027credentials\u0027]:"},{"line_number":115,"context_line":"            self.assertEqual(\u0027ec2\u0027, cred[\u0027type\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_list_credentials_filtered_by_type_and_user_id(self):"},{"line_number":118,"context_line":"        \"\"\"Call ``GET  /credentials?user_id\u003d{user_id}\u0026type\u003d{type}``.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_c0890028","line":115,"updated":"2015-08-05 02:32:12.000000000","message":"should the  value of the ec2 credential id be checked here?","commit_id":"9e54a6af2be060b70e66127decc53865004364eb"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"1f6f197dae2ebd1719a47a18b4bd979578c4ed2d","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        r_ec2 \u003d self.get(\u0027/credentials?type\u003d%s\u0027 % \u0027ec2\u0027)"},{"line_number":114,"context_line":"        for cred in r_ec2.result[\u0027credentials\u0027]:"},{"line_number":115,"context_line":"            self.assertEqual(\u0027ec2\u0027, cred[\u0027type\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_list_credentials_filtered_by_type_and_user_id(self):"},{"line_number":118,"context_line":"        \"\"\"Call ``GET  /credentials?user_id\u003d{user_id}\u0026type\u003d{type}``.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_c386e564","line":115,"in_reply_to":"1a4dcd0f_c0890028","updated":"2015-08-05 06:01:52.000000000","message":"Done","commit_id":"9e54a6af2be060b70e66127decc53865004364eb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"20ae9f3e4eaceafefac609e3e989c7c26224ba6d","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    def test_list_credentials_filtered_by_type(self):"},{"line_number":102,"context_line":"        \"\"\"Call ``GET  /credentials?type\u003d{type}``.\"\"\""},{"line_number":103,"context_line":"        ec_credential \u003d self.new_credential_ref(user_id\u003duuid.uuid4().hex,"},{"line_number":104,"context_line":"                                                cred_type\u003d\u0027ec2\u0027)"},{"line_number":105,"context_line":"        self.credential_api.create_credential("},{"line_number":106,"context_line":"            ec_credential[\u0027id\u0027], ec_credential)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_24f29370","line":104,"updated":"2015-08-07 20:48:46.000000000","message":"why is ec2 used rather than a random string? Add a comment.","commit_id":"a493d1381286eb62983c7de4cec3f6fad9ad451a"},{"author":{"_account_id":16625,"name":"Marianne Linhares Monteiro","email":"mariannelinharesm@gmail.com","username":"marianneLinhares"},"change_message_id":"bc717d1bc5e2b8954400ab65689de6a69583fb15","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    def test_list_credentials_filtered_by_type(self):"},{"line_number":102,"context_line":"        \"\"\"Call ``GET  /credentials?type\u003d{type}``.\"\"\""},{"line_number":103,"context_line":"        ec_credential \u003d self.new_credential_ref(user_id\u003duuid.uuid4().hex,"},{"line_number":104,"context_line":"                                                cred_type\u003d\u0027ec2\u0027)"},{"line_number":105,"context_line":"        self.credential_api.create_credential("},{"line_number":106,"context_line":"            ec_credential[\u0027id\u0027], ec_credential)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_e90c7c3d","line":104,"in_reply_to":"1a4dcd0f_24f29370","updated":"2015-08-08 01:16:30.000000000","message":"I don\u0027t think it\u0027s possible to do it Brant, but I can add a comment, no problem!","commit_id":"a493d1381286eb62983c7de4cec3f6fad9ad451a"},{"author":{"_account_id":16625,"name":"Marianne Linhares Monteiro","email":"mariannelinharesm@gmail.com","username":"marianneLinhares"},"change_message_id":"79fd3ba5ce59a3e9a775a25d27e36d2e81a1efa0","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    def test_list_credentials_filtered_by_type(self):"},{"line_number":102,"context_line":"        \"\"\"Call ``GET  /credentials?type\u003d{type}``.\"\"\""},{"line_number":103,"context_line":"        ec_credential \u003d self.new_credential_ref(user_id\u003duuid.uuid4().hex,"},{"line_number":104,"context_line":"                                                cred_type\u003d\u0027ec2\u0027)"},{"line_number":105,"context_line":"        self.credential_api.create_credential("},{"line_number":106,"context_line":"            ec_credential[\u0027id\u0027], ec_credential)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_a4942de8","line":104,"in_reply_to":"1a4dcd0f_e90c7c3d","updated":"2015-08-10 12:48:21.000000000","message":"I Tried with a random string and the credential isn\u0027t created, anyone knows if there\u0027s a list of types or something that determine the possible types?","commit_id":"a493d1381286eb62983c7de4cec3f6fad9ad451a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"20ae9f3e4eaceafefac609e3e989c7c26224ba6d","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self.credential_api.create_credential("},{"line_number":106,"context_line":"            ec_credential[\u0027id\u0027], ec_credential)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        r \u003d self.get(\u0027/credentials?type\u003d%s\u0027 % \u0027cert\u0027)"},{"line_number":109,"context_line":"        self.assertValidCredentialListResponse(r, ref\u003dself.credential)"},{"line_number":110,"context_line":"        for cred in r.result[\u0027credentials\u0027]:"},{"line_number":111,"context_line":"            self.assertEqual(\u0027cert\u0027, cred[\u0027type\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_a48543ae","line":108,"updated":"2015-08-07 20:48:46.000000000","message":"where does \u0027cert\u0027 come from? Add a comment.","commit_id":"a493d1381286eb62983c7de4cec3f6fad9ad451a"},{"author":{"_account_id":16625,"name":"Marianne Linhares Monteiro","email":"mariannelinharesm@gmail.com","username":"marianneLinhares"},"change_message_id":"bc717d1bc5e2b8954400ab65689de6a69583fb15","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self.credential_api.create_credential("},{"line_number":106,"context_line":"            ec_credential[\u0027id\u0027], ec_credential)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        r \u003d self.get(\u0027/credentials?type\u003d%s\u0027 % \u0027cert\u0027)"},{"line_number":109,"context_line":"        self.assertValidCredentialListResponse(r, ref\u003dself.credential)"},{"line_number":110,"context_line":"        for cred in r.result[\u0027credentials\u0027]:"},{"line_number":111,"context_line":"            self.assertEqual(\u0027cert\u0027, cred[\u0027type\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_092528ad","line":108,"in_reply_to":"1a4dcd0f_a48543ae","updated":"2015-08-08 01:16:30.000000000","message":"Ok!","commit_id":"a493d1381286eb62983c7de4cec3f6fad9ad451a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"20ae9f3e4eaceafefac609e3e989c7c26224ba6d","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        for cred in r.result[\u0027credentials\u0027]:"},{"line_number":111,"context_line":"            self.assertEqual(\u0027cert\u0027, cred[\u0027type\u0027])"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        r_ec2 \u003d self.get(\u0027/credentials?type\u003d%s\u0027 % \u0027ec2\u0027)"},{"line_number":114,"context_line":"        for cred in r_ec2.result[\u0027credentials\u0027]:"},{"line_number":115,"context_line":"            self.assertEqual(\u0027ec2\u0027, cred[\u0027type\u0027])"},{"line_number":116,"context_line":"            self.assertEqual(cred[\u0027id\u0027], ec_credential[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_c46baff0","line":113,"updated":"2015-08-07 20:48:46.000000000","message":"put \u0027ec2\u0027 into a variable so that it\u0027s obvious that this is the same as cred_type above.","commit_id":"a493d1381286eb62983c7de4cec3f6fad9ad451a"},{"author":{"_account_id":16625,"name":"Marianne Linhares Monteiro","email":"mariannelinharesm@gmail.com","username":"marianneLinhares"},"change_message_id":"bc717d1bc5e2b8954400ab65689de6a69583fb15","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        for cred in r.result[\u0027credentials\u0027]:"},{"line_number":111,"context_line":"            self.assertEqual(\u0027cert\u0027, cred[\u0027type\u0027])"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        r_ec2 \u003d self.get(\u0027/credentials?type\u003d%s\u0027 % \u0027ec2\u0027)"},{"line_number":114,"context_line":"        for cred in r_ec2.result[\u0027credentials\u0027]:"},{"line_number":115,"context_line":"            self.assertEqual(\u0027ec2\u0027, cred[\u0027type\u0027])"},{"line_number":116,"context_line":"            self.assertEqual(cred[\u0027id\u0027], ec_credential[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_89ae18e6","line":113,"in_reply_to":"1a4dcd0f_c46baff0","updated":"2015-08-08 01:16:30.000000000","message":"Didn\u0027t get what you meant, can you explain it some other way?Instead of \u0027cred\u0027 use \u0027cred_ec2\u0027?","commit_id":"a493d1381286eb62983c7de4cec3f6fad9ad451a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"20ae9f3e4eaceafefac609e3e989c7c26224ba6d","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        r_ec2 \u003d self.get(\u0027/credentials?type\u003d%s\u0027 % \u0027ec2\u0027)"},{"line_number":114,"context_line":"        for cred in r_ec2.result[\u0027credentials\u0027]:"},{"line_number":115,"context_line":"            self.assertEqual(\u0027ec2\u0027, cred[\u0027type\u0027])"},{"line_number":116,"context_line":"            self.assertEqual(cred[\u0027id\u0027], ec_credential[\u0027id\u0027])"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def test_list_credentials_filtered_by_type_and_user_id(self):"},{"line_number":119,"context_line":"        \"\"\"Call ``GET  /credentials?user_id\u003d{user_id}\u0026type\u003d{type}``.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_e4b90b7b","line":116,"updated":"2015-08-07 20:48:46.000000000","message":"I\u0027m assuming there should only be 1 result since you wouldn\u0027t have multiple creds with the same ID, so no need to loop over creds.","commit_id":"a493d1381286eb62983c7de4cec3f6fad9ad451a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"04909acee4478d4bbc2df9d6f934016f394acd95","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        r \u003d self.get(\u0027/credentials?user_id\u003d%s\u0026type\u003d%s\u0027 % (user1_id, \u0027ec2\u0027))"},{"line_number":144,"context_line":"        self.assertEqual(1, len(r.result[\u0027credentials\u0027]))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        for cred in r.result[\u0027credentials\u0027]:"},{"line_number":147,"context_line":"            self.assertEqual(\u0027ec2\u0027, cred[\u0027type\u0027])"},{"line_number":148,"context_line":"            self.assertEqual(user1_id, cred[\u0027user_id\u0027])"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a4dcd0f_9cb75d20","line":146,"updated":"2015-08-13 08:10:19.000000000","message":"nit: so maybe a style thing, but using a loop here when we know there is only one item in the list seems a bit confusing","commit_id":"77be723180666ad3a6e928f6097c917786b8ccdd"},{"author":{"_account_id":16625,"name":"Marianne Linhares Monteiro","email":"mariannelinharesm@gmail.com","username":"marianneLinhares"},"change_message_id":"7ecd7bb326aec35d518de2eaf4dae9d109c7dd1e","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        r \u003d self.get(\u0027/credentials?user_id\u003d%s\u0026type\u003d%s\u0027 % (user1_id, \u0027ec2\u0027))"},{"line_number":144,"context_line":"        self.assertEqual(1, len(r.result[\u0027credentials\u0027]))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        for cred in r.result[\u0027credentials\u0027]:"},{"line_number":147,"context_line":"            self.assertEqual(\u0027ec2\u0027, cred[\u0027type\u0027])"},{"line_number":148,"context_line":"            self.assertEqual(user1_id, cred[\u0027user_id\u0027])"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a4dcd0f_0d4f8f92","line":146,"in_reply_to":"1a4dcd0f_9cb75d20","updated":"2015-08-13 13:10:32.000000000","message":"Done","commit_id":"77be723180666ad3a6e928f6097c917786b8ccdd"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"fa1721f1d3d5ca384d9f50414f55e170a24592a8","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            ec2_credential[\u0027id\u0027], ec2_credential)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # The type cert was chosen for the same reason as ec2"},{"line_number":111,"context_line":"        r \u003d self.get(\u0027/credentials?type\u003d%s\u0027 % \u0027cert\u0027)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # Testing the filter for two different types"},{"line_number":114,"context_line":"        self.assertValidCredentialListResponse(r, ref\u003dself.credential)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_a770d874","line":111,"updated":"2015-08-14 00:49:36.000000000","message":"no need to use %s replacement.\n\n r \u003d self.get(\u0027/credentials?type\u003dcert\u0027)","commit_id":"21d75cc7bc35e00f4a141c4f6277224c83da4330"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"fa1721f1d3d5ca384d9f50414f55e170a24592a8","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        for cred in r.result[\u0027credentials\u0027]:"},{"line_number":116,"context_line":"            self.assertEqual(\u0027cert\u0027, cred[\u0027type\u0027])"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        r_ec2 \u003d self.get(\u0027/credentials?type\u003d%s\u0027 % \u0027ec2\u0027)"},{"line_number":119,"context_line":"        cred_ec2 \u003d r_ec2.result[\u0027credentials\u0027][0]"},{"line_number":120,"context_line":"        self.assertEqual(\u0027ec2\u0027, cred_ec2[\u0027type\u0027])"},{"line_number":121,"context_line":"        self.assertEqual(cred_ec2[\u0027id\u0027], ec2_credential[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_a7f778d3","line":118,"updated":"2015-08-14 00:49:36.000000000","message":"no need to use %:\n\n r_ec2 \u003d self.get(\u0027/credentials?type\u003dec2\u0027)\n\nAlso, check the response like above:\n\n  self.assertValidCredentialListResponse(r, ref\u003dself.credential)","commit_id":"21d75cc7bc35e00f4a141c4f6277224c83da4330"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0cc90788557be075238190206cb5bc31728ced3e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        for cred in r.result[\u0027credentials\u0027]:"},{"line_number":116,"context_line":"            self.assertEqual(\u0027cert\u0027, cred[\u0027type\u0027])"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        r_ec2 \u003d self.get(\u0027/credentials?type\u003d%s\u0027 % \u0027ec2\u0027)"},{"line_number":119,"context_line":"        cred_ec2 \u003d r_ec2.result[\u0027credentials\u0027][0]"},{"line_number":120,"context_line":"        self.assertEqual(\u0027ec2\u0027, cred_ec2[\u0027type\u0027])"},{"line_number":121,"context_line":"        self.assertEqual(cred_ec2[\u0027id\u0027], ec2_credential[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_ca221654","line":118,"in_reply_to":"1a4dcd0f_a7f778d3","updated":"2015-08-26 14:00:06.000000000","message":"++","commit_id":"21d75cc7bc35e00f4a141c4f6277224c83da4330"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"fa1721f1d3d5ca384d9f50414f55e170a24592a8","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            self.assertEqual(\u0027cert\u0027, cred[\u0027type\u0027])"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        r_ec2 \u003d self.get(\u0027/credentials?type\u003d%s\u0027 % \u0027ec2\u0027)"},{"line_number":119,"context_line":"        cred_ec2 \u003d r_ec2.result[\u0027credentials\u0027][0]"},{"line_number":120,"context_line":"        self.assertEqual(\u0027ec2\u0027, cred_ec2[\u0027type\u0027])"},{"line_number":121,"context_line":"        self.assertEqual(cred_ec2[\u0027id\u0027], ec2_credential[\u0027id\u0027])"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_472f943e","line":119,"updated":"2015-08-14 00:49:36.000000000","message":"check the length of the response (using the HasLength matcher from testools) is as expected otherwise this test might pass just because the first response is the ec2 credential.","commit_id":"21d75cc7bc35e00f4a141c4f6277224c83da4330"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"fa1721f1d3d5ca384d9f50414f55e170a24592a8","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        self.credential_api.create_credential("},{"line_number":141,"context_line":"            credential_user2_cert[\u0027id\u0027], credential_user2_cert)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        r \u003d self.get(\u0027/credentials?user_id\u003d%s\u0026type\u003d%s\u0027 % (user1_id, \u0027ec2\u0027))"},{"line_number":144,"context_line":"        self.assertEqual(1, len(r.result[\u0027credentials\u0027]))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        cred \u003d r.result[\u0027credentials\u0027][0]"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_07b74cf6","line":143,"updated":"2015-08-14 00:49:36.000000000","message":"no need for %s for the type.","commit_id":"21d75cc7bc35e00f4a141c4f6277224c83da4330"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"fa1721f1d3d5ca384d9f50414f55e170a24592a8","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            credential_user2_cert[\u0027id\u0027], credential_user2_cert)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        r \u003d self.get(\u0027/credentials?user_id\u003d%s\u0026type\u003d%s\u0027 % (user1_id, \u0027ec2\u0027))"},{"line_number":144,"context_line":"        self.assertEqual(1, len(r.result[\u0027credentials\u0027]))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        cred \u003d r.result[\u0027credentials\u0027][0]"},{"line_number":147,"context_line":"        self.assertEqual(\u0027ec2\u0027, cred[\u0027type\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_07442c19","line":144,"updated":"2015-08-14 00:49:36.000000000","message":"Use the HasLength matcher from testtools so that the output is more informative in case of a failure.","commit_id":"21d75cc7bc35e00f4a141c4f6277224c83da4330"},{"author":{"_account_id":16625,"name":"Marianne Linhares Monteiro","email":"mariannelinharesm@gmail.com","username":"marianneLinhares"},"change_message_id":"8dc8e574124cba09c765c5ac075d9b27181284b8","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            credential_user2_cert[\u0027id\u0027], credential_user2_cert)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        r \u003d self.get(\u0027/credentials?user_id\u003d%s\u0026type\u003d%s\u0027 % (user1_id, \u0027ec2\u0027))"},{"line_number":144,"context_line":"        self.assertEqual(1, len(r.result[\u0027credentials\u0027]))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        cred \u003d r.result[\u0027credentials\u0027][0]"},{"line_number":147,"context_line":"        self.assertEqual(\u0027ec2\u0027, cred[\u0027type\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_68802f8c","line":144,"in_reply_to":"1a4dcd0f_07442c19","updated":"2015-08-14 21:22:41.000000000","message":"Ok Brant, I can make these changes.","commit_id":"21d75cc7bc35e00f4a141c4f6277224c83da4330"}]}
