)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":19985,"name":"Ryosuke Mizuno","email":"r-mizuno@rs.jp.nec.com","username":"r-mizuno"},"change_message_id":"d3a0a806bb4d0ab2db5aaf64ee07ac1f11f5ea86","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"H405 violations: multi line docstring summary not separated with an empty line"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Keystone\u0027s tox.ini contains an \"ignore\" entry for H405. All violations of H405 should be fixed so that H405 can be removed from the ignore list."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I1b2aae0cabc20909cf3b0a405d5e31c5d91148b2"},{"line_number":12,"context_line":"Closes-Bug: #1482773"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a57f1b5_511751a3","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":144},"updated":"2016-02-10 06:18:27.000000000","message":"It is necessary to be a new line at 72 characters.\nPlease look at this page.\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"}],"keystone/common/wsgi.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9227a73bf493b27cce39768be0e1bcb42c4cb94e","unresolved":false,"context_lines":[{"line_number":114,"context_line":"def best_match_language(req):"},{"line_number":115,"context_line":"    \"\"\"Determines the best available locale."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    From the Accept-Language HTTP header passed in the request."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    \"\"\""},{"line_number":120,"context_line":"    if not req.accept_language:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_764b635a","line":117,"updated":"2016-02-10 05:01:12.000000000","message":"This is not a complete sentence.","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"d347d278cdb21a4959f5f88a4529ef1daa1056ec","unresolved":false,"context_lines":[{"line_number":114,"context_line":"def best_match_language(req):"},{"line_number":115,"context_line":"    \"\"\"Determines the best available locale."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    From the Accept-Language HTTP header passed in the request."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    \"\"\""},{"line_number":120,"context_line":"    if not req.accept_language:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_92b6f288","line":117,"in_reply_to":"3a57f1b5_764b635a","updated":"2016-02-11 01:26:45.000000000","message":"Done","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0eda1554fc36a36278ec888d39658e60c4d6eed2","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    This returns best available locale based on the Accept-Language HTTP"},{"line_number":118,"context_line":"    header passed in the request."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    \"\"\""},{"line_number":121,"context_line":"    if not req.accept_language:"},{"line_number":122,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_fe628f15","line":119,"updated":"2016-02-15 08:38:37.000000000","message":"The whitespace here is not necessary, good as it is.","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"acb8b27257e654f13d79249c79a70f670854b563","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    This returns best available locale based on the Accept-Language HTTP"},{"line_number":118,"context_line":"    header passed in the request."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    \"\"\""},{"line_number":121,"context_line":"    if not req.accept_language:"},{"line_number":122,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_9916d3ef","line":119,"in_reply_to":"dae33548_fe628f15","updated":"2016-02-16 01:10:03.000000000","message":"Done","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"}],"keystone/exception.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9227a73bf493b27cce39768be0e1bcb42c4cb94e","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"class MetadataNotFound(NotFound):"},{"line_number":270,"context_line":"    \"\"\"Metadata not found exception"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    (dolph): metadata is not a user-facing concept,"},{"line_number":273,"context_line":"    so this exception should not be exposed."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_165c6f24","line":270,"updated":"2016-02-10 05:01:12.000000000","message":"I\u0027m not so sure this should be a docstring. I think it may be better to take the original note and make it a Python comment.","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"d347d278cdb21a4959f5f88a4529ef1daa1056ec","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"class MetadataNotFound(NotFound):"},{"line_number":270,"context_line":"    \"\"\"Metadata not found exception"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    (dolph): metadata is not a user-facing concept,"},{"line_number":273,"context_line":"    so this exception should not be exposed."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_728576ab","line":270,"in_reply_to":"3a57f1b5_165c6f24","updated":"2016-02-11 01:26:45.000000000","message":"Done","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0eda1554fc36a36278ec888d39658e60c4d6eed2","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"class MetadataNotFound(NotFound):"},{"line_number":270,"context_line":"    # (dolph): metadata is not a user-facing concept,"},{"line_number":271,"context_line":"    # so this exception should not be exposed."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    message_format \u003d _(\"An unhandled exception has occurred:\""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_290e7f34","line":270,"range":{"start_line":270,"start_character":4,"end_line":270,"end_character":6},"updated":"2016-02-15 08:38:37.000000000","message":"add NOTE before \u0027(\u0027","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"acb8b27257e654f13d79249c79a70f670854b563","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"class MetadataNotFound(NotFound):"},{"line_number":270,"context_line":"    # (dolph): metadata is not a user-facing concept,"},{"line_number":271,"context_line":"    # so this exception should not be exposed."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    message_format \u003d _(\"An unhandled exception has occurred:\""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_19048415","line":270,"range":{"start_line":270,"start_character":4,"end_line":270,"end_character":6},"in_reply_to":"dae33548_290e7f34","updated":"2016-02-16 01:10:03.000000000","message":"Done","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"}],"keystone/oauth1/core.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9227a73bf493b27cce39768be0e1bcb42c4cb94e","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    @abc.abstractmethod"},{"line_number":249,"context_line":"    def get_consumer_with_secret(self, consumer_id):"},{"line_number":250,"context_line":"        \"\"\"Like get_consumer() but returnes consumer secret with consumer_ref."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        Secrets should only be shared upon consumer creation; the"},{"line_number":253,"context_line":"        consumer secret is required to verify incoming OAuth requests."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_d637b7e1","line":250,"updated":"2016-02-10 05:01:12.000000000","message":"comma before the but and returns is misspelled.","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"d347d278cdb21a4959f5f88a4529ef1daa1056ec","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    @abc.abstractmethod"},{"line_number":249,"context_line":"    def get_consumer_with_secret(self, consumer_id):"},{"line_number":250,"context_line":"        \"\"\"Like get_consumer() but returnes consumer secret with consumer_ref."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        Secrets should only be shared upon consumer creation; the"},{"line_number":253,"context_line":"        consumer secret is required to verify incoming OAuth requests."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_12abe21e","line":250,"in_reply_to":"3a57f1b5_d637b7e1","updated":"2016-02-11 01:26:45.000000000","message":"Done","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0eda1554fc36a36278ec888d39658e60c4d6eed2","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    @abc.abstractmethod"},{"line_number":249,"context_line":"    def get_consumer_with_secret(self, consumer_id):"},{"line_number":250,"context_line":"        \"\"\"Like get_consumer(), but returns consumer secret with consumer_ref."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        Secrets should only be shared upon consumer creation; the"},{"line_number":253,"context_line":"        consumer secret is required to verify incoming OAuth requests."}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_c95553c7","line":250,"range":{"start_line":250,"start_character":32,"end_line":250,"end_character":77},"updated":"2016-02-15 08:38:37.000000000","message":"The initial docstring is more accurate, the changed docstring confuse me a little, \"consumer secret\" should be included in the dict of \"consumer_ref\".","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"acb8b27257e654f13d79249c79a70f670854b563","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    @abc.abstractmethod"},{"line_number":249,"context_line":"    def get_consumer_with_secret(self, consumer_id):"},{"line_number":250,"context_line":"        \"\"\"Like get_consumer(), but returns consumer secret with consumer_ref."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        Secrets should only be shared upon consumer creation; the"},{"line_number":253,"context_line":"        consumer secret is required to verify incoming OAuth requests."}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_d9921b4b","line":250,"range":{"start_line":250,"start_character":32,"end_line":250,"end_character":77},"in_reply_to":"dae33548_c95553c7","updated":"2016-02-16 01:10:03.000000000","message":"Done","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8843d8b1ac4362457b712e81cbdb3353fee205bd","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    def get_consumer_with_secret(self, consumer_id):"},{"line_number":250,"context_line":"        \"\"\"Like get_consumer(), but also returns consumer secret."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        Returned dictionary of consumer_ref includes consumer secret."},{"line_number":253,"context_line":"        Secrets should only be shared upon consumer creation; the"},{"line_number":254,"context_line":"        consumer secret is required to verify incoming OAuth requests."},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_0f799af6","line":252,"range":{"start_line":252,"start_character":28,"end_line":252,"end_character":30},"updated":"2016-02-16 22:33:23.000000000","message":"remove \"of\"","commit_id":"04f92762106a2edfefd75b10add50e07d714c1ea"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"714d69775f8702d748944b3fadb6630704f64edb","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    def get_consumer_with_secret(self, consumer_id):"},{"line_number":250,"context_line":"        \"\"\"Like get_consumer(), but also returns consumer secret."},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        Returned dictionary of consumer_ref includes consumer secret."},{"line_number":253,"context_line":"        Secrets should only be shared upon consumer creation; the"},{"line_number":254,"context_line":"        consumer secret is required to verify incoming OAuth requests."},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_60baf56f","line":252,"range":{"start_line":252,"start_character":28,"end_line":252,"end_character":30},"in_reply_to":"dae33548_0f799af6","updated":"2016-02-17 00:10:50.000000000","message":"Done","commit_id":"04f92762106a2edfefd75b10add50e07d714c1ea"}],"keystone/tests/unit/common/test_notifications.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8843d8b1ac4362457b712e81cbdb3353fee205bd","unresolved":false,"context_lines":[{"line_number":174,"context_line":"class NotificationsTestCase(unit.BaseTestCase):"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_send_notification(self):"},{"line_number":177,"context_line":"        \"\"\"Test send notification."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        Test the private method _send_notification to ensure event_type,"},{"line_number":180,"context_line":"        payload, and context are built and passed properly."}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_6fd5c6b7","line":177,"range":{"start_line":177,"start_character":16,"end_line":177,"end_character":33},"updated":"2016-02-16 22:33:23.000000000","message":"_send_notification","commit_id":"04f92762106a2edfefd75b10add50e07d714c1ea"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"714d69775f8702d748944b3fadb6630704f64edb","unresolved":false,"context_lines":[{"line_number":174,"context_line":"class NotificationsTestCase(unit.BaseTestCase):"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_send_notification(self):"},{"line_number":177,"context_line":"        \"\"\"Test send notification."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        Test the private method _send_notification to ensure event_type,"},{"line_number":180,"context_line":"        payload, and context are built and passed properly."}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_603f95d6","line":177,"range":{"start_line":177,"start_character":16,"end_line":177,"end_character":33},"in_reply_to":"dae33548_6fd5c6b7","updated":"2016-02-17 00:10:50.000000000","message":"Done","commit_id":"04f92762106a2edfefd75b10add50e07d714c1ea"}],"keystone/tests/unit/test_kvs.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8843d8b1ac4362457b712e81cbdb3353fee205bd","unresolved":false,"context_lines":[{"line_number":87,"context_line":"class TestMemcacheDriver(api.CacheBackend):"},{"line_number":88,"context_line":"    \"\"\"Test dogpile.cache backend."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    Ensure backend conforms to the mixin-mechanism for"},{"line_number":91,"context_line":"    overriding set and set_multi methods on dogpile memcached drivers."},{"line_number":92,"context_line":"    \"\"\""},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_8f6e4aff","line":90,"updated":"2016-02-16 22:33:23.000000000","message":"This isn\u0027t a test, it\u0027s a class that\u0027s used for testing. It doesn\u0027t ensure anything.","commit_id":"04f92762106a2edfefd75b10add50e07d714c1ea"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"714d69775f8702d748944b3fadb6630704f64edb","unresolved":false,"context_lines":[{"line_number":87,"context_line":"class TestMemcacheDriver(api.CacheBackend):"},{"line_number":88,"context_line":"    \"\"\"Test dogpile.cache backend."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    Ensure backend conforms to the mixin-mechanism for"},{"line_number":91,"context_line":"    overriding set and set_multi methods on dogpile memcached drivers."},{"line_number":92,"context_line":"    \"\"\""},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_fb1eb861","line":90,"in_reply_to":"dae33548_8f6e4aff","updated":"2016-02-17 00:10:50.000000000","message":"Done","commit_id":"04f92762106a2edfefd75b10add50e07d714c1ea"}],"keystone/tests/unit/test_middleware.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0eda1554fc36a36278ec888d39658e60c4d6eed2","unresolved":false,"context_lines":[{"line_number":666,"context_line":"        \"\"\"Verify ephemeral user does not need a specified user."},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        Keystone is not looking to match the user, but a corresponding group."},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"        \"\"\""},{"line_number":671,"context_line":"        env \u003d {}"},{"line_number":672,"context_line":"        env[\u0027SSL_CLIENT_I_DN\u0027] \u003d self.client_issuer"}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_89022b3d","line":669,"updated":"2016-02-15 08:38:37.000000000","message":"Just a question, does the change like this (whitespace) is relevant with rule H405? I am worried that we need ton of change like this if you want one more blank line here.","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"acb8b27257e654f13d79249c79a70f670854b563","unresolved":false,"context_lines":[{"line_number":666,"context_line":"        \"\"\"Verify ephemeral user does not need a specified user."},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        Keystone is not looking to match the user, but a corresponding group."},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"        \"\"\""},{"line_number":671,"context_line":"        env \u003d {}"},{"line_number":672,"context_line":"        env[\u0027SSL_CLIENT_I_DN\u0027] \u003d self.client_issuer"}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_99fff3a9","line":669,"in_reply_to":"dae33548_89022b3d","updated":"2016-02-16 01:10:03.000000000","message":"No, this blank line is not related to H405.  However, as I go through the files, I noticed, sometimes there is a blank line before the closing \"\"\", but not other.  I removed these blank lines where applicable for this defect.","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"}],"keystone/tests/unit/test_v2.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9227a73bf493b27cce39768be0e1bcb42c4cb94e","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"    def test_fetch_revocation_list_md5(self):"},{"line_number":1262,"context_line":"        \"\"\"Fetch revocation list with md5-based tokens."},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"        If the server is configured for md5, then the revocation list has"},{"line_number":1265,"context_line":"        tokens hashed with md5."},{"line_number":1266,"context_line":""},{"line_number":1267,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_33317d0c","line":1264,"updated":"2016-02-10 05:01:12.000000000","message":"We can probably just get rid of this paragraph.","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"d347d278cdb21a4959f5f88a4529ef1daa1056ec","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"    def test_fetch_revocation_list_md5(self):"},{"line_number":1262,"context_line":"        \"\"\"Fetch revocation list with md5-based tokens."},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"        If the server is configured for md5, then the revocation list has"},{"line_number":1265,"context_line":"        tokens hashed with md5."},{"line_number":1266,"context_line":""},{"line_number":1267,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_f2664628","line":1264,"in_reply_to":"3a57f1b5_33317d0c","updated":"2016-02-11 01:26:45.000000000","message":"Done","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9227a73bf493b27cce39768be0e1bcb42c4cb94e","unresolved":false,"context_lines":[{"line_number":1275,"context_line":"    def test_fetch_revocation_list_sha256(self):"},{"line_number":1276,"context_line":"        \"\"\"Fetch revocation list with sha256-based tokens."},{"line_number":1277,"context_line":""},{"line_number":1278,"context_line":"        If the server is configured for sha256, then the revocation list has"},{"line_number":1279,"context_line":"        tokens hashed with sha256."},{"line_number":1280,"context_line":""},{"line_number":1281,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_53367904","line":1278,"updated":"2016-02-10 05:01:12.000000000","message":"Same here.","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0eda1554fc36a36278ec888d39658e60c4d6eed2","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"        return (data, token2)"},{"line_number":1260,"context_line":""},{"line_number":1261,"context_line":"    def test_fetch_revocation_list_md5(self):"},{"line_number":1262,"context_line":"        \"\"\"Fetch revocation list with md5-based tokens.\"\"\""},{"line_number":1263,"context_line":"        # The default hash algorithm is md5."},{"line_number":1264,"context_line":"        hash_algorithm \u003d \u0027md5\u0027"},{"line_number":1265,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_245ce624","line":1262,"updated":"2016-02-15 08:38:37.000000000","message":"This is testcase, prefer to add the test purpose here. The code here is not used to fetch the md5-based token, this can be elaborated a little.","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"acb8b27257e654f13d79249c79a70f670854b563","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"        return (data, token2)"},{"line_number":1260,"context_line":""},{"line_number":1261,"context_line":"    def test_fetch_revocation_list_md5(self):"},{"line_number":1262,"context_line":"        \"\"\"Fetch revocation list with md5-based tokens.\"\"\""},{"line_number":1263,"context_line":"        # The default hash algorithm is md5."},{"line_number":1264,"context_line":"        hash_algorithm \u003d \u0027md5\u0027"},{"line_number":1265,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_590f2b2e","line":1262,"in_reply_to":"dae33548_245ce624","updated":"2016-02-16 01:10:03.000000000","message":"Changing to: \"Test fetching revocation list with md5-based tokens.\"","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0eda1554fc36a36278ec888d39658e60c4d6eed2","unresolved":false,"context_lines":[{"line_number":1268,"context_line":"        self.assertThat(token_hash, matchers.Equals(data[\u0027revoked\u0027][0][\u0027id\u0027]))"},{"line_number":1269,"context_line":""},{"line_number":1270,"context_line":"    def test_fetch_revocation_list_sha256(self):"},{"line_number":1271,"context_line":"        \"\"\"Fetch revocation list with sha256-based tokens.\"\"\""},{"line_number":1272,"context_line":"        hash_algorithm \u003d \u0027sha256\u0027"},{"line_number":1273,"context_line":"        self.config_fixture.config(group\u003d\u0027token\u0027,"},{"line_number":1274,"context_line":"                                   hash_algorithm\u003dhash_algorithm)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_44412a0b","line":1271,"updated":"2016-02-15 08:38:37.000000000","message":"same here.","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"acb8b27257e654f13d79249c79a70f670854b563","unresolved":false,"context_lines":[{"line_number":1268,"context_line":"        self.assertThat(token_hash, matchers.Equals(data[\u0027revoked\u0027][0][\u0027id\u0027]))"},{"line_number":1269,"context_line":""},{"line_number":1270,"context_line":"    def test_fetch_revocation_list_sha256(self):"},{"line_number":1271,"context_line":"        \"\"\"Fetch revocation list with sha256-based tokens.\"\"\""},{"line_number":1272,"context_line":"        hash_algorithm \u003d \u0027sha256\u0027"},{"line_number":1273,"context_line":"        self.config_fixture.config(group\u003d\u0027token\u0027,"},{"line_number":1274,"context_line":"                                   hash_algorithm\u003dhash_algorithm)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_b91e3761","line":1271,"in_reply_to":"dae33548_44412a0b","updated":"2016-02-16 01:10:03.000000000","message":"Done","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8843d8b1ac4362457b712e81cbdb3353fee205bd","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"        return (data, token2)"},{"line_number":1260,"context_line":""},{"line_number":1261,"context_line":"    def test_fetch_revocation_list_md5(self):"},{"line_number":1262,"context_line":"        \"\"\"Test fetching revocation list with md5-based tokens.\"\"\""},{"line_number":1263,"context_line":"        # The default hash algorithm is md5."},{"line_number":1264,"context_line":"        hash_algorithm \u003d \u0027md5\u0027"},{"line_number":1265,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_8f13ea65","line":1262,"updated":"2016-02-16 22:33:23.000000000","message":"this docstring doesn\u0027t describe what the test does anymore. The original docstring was correct.","commit_id":"04f92762106a2edfefd75b10add50e07d714c1ea"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"714d69775f8702d748944b3fadb6630704f64edb","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"        return (data, token2)"},{"line_number":1260,"context_line":""},{"line_number":1261,"context_line":"    def test_fetch_revocation_list_md5(self):"},{"line_number":1262,"context_line":"        \"\"\"Test fetching revocation list with md5-based tokens.\"\"\""},{"line_number":1263,"context_line":"        # The default hash algorithm is md5."},{"line_number":1264,"context_line":"        hash_algorithm \u003d \u0027md5\u0027"},{"line_number":1265,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_5b9d2458","line":1262,"in_reply_to":"dae33548_8f13ea65","updated":"2016-02-17 00:10:50.000000000","message":"Done","commit_id":"04f92762106a2edfefd75b10add50e07d714c1ea"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8843d8b1ac4362457b712e81cbdb3353fee205bd","unresolved":false,"context_lines":[{"line_number":1268,"context_line":"        self.assertThat(token_hash, matchers.Equals(data[\u0027revoked\u0027][0][\u0027id\u0027]))"},{"line_number":1269,"context_line":""},{"line_number":1270,"context_line":"    def test_fetch_revocation_list_sha256(self):"},{"line_number":1271,"context_line":"        \"\"\"Test fetching revocation list with sha256-based tokens.\"\"\""},{"line_number":1272,"context_line":"        hash_algorithm \u003d \u0027sha256\u0027"},{"line_number":1273,"context_line":"        self.config_fixture.config(group\u003d\u0027token\u0027,"},{"line_number":1274,"context_line":"                                   hash_algorithm\u003dhash_algorithm)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_6f166656","line":1271,"updated":"2016-02-16 22:33:23.000000000","message":"this docstring doesn\u0027t describe what the test does anymore. The original docstring was correct.","commit_id":"04f92762106a2edfefd75b10add50e07d714c1ea"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"714d69775f8702d748944b3fadb6630704f64edb","unresolved":false,"context_lines":[{"line_number":1268,"context_line":"        self.assertThat(token_hash, matchers.Equals(data[\u0027revoked\u0027][0][\u0027id\u0027]))"},{"line_number":1269,"context_line":""},{"line_number":1270,"context_line":"    def test_fetch_revocation_list_sha256(self):"},{"line_number":1271,"context_line":"        \"\"\"Test fetching revocation list with sha256-based tokens.\"\"\""},{"line_number":1272,"context_line":"        hash_algorithm \u003d \u0027sha256\u0027"},{"line_number":1273,"context_line":"        self.config_fixture.config(group\u003d\u0027token\u0027,"},{"line_number":1274,"context_line":"                                   hash_algorithm\u003dhash_algorithm)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_7b9aa864","line":1271,"in_reply_to":"dae33548_6f166656","updated":"2016-02-17 00:10:50.000000000","message":"Done","commit_id":"04f92762106a2edfefd75b10add50e07d714c1ea"}],"keystone/tests/unit/test_v3_assignment.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0eda1554fc36a36278ec888d39658e60c4d6eed2","unresolved":false,"context_lines":[{"line_number":2576,"context_line":"        return role"},{"line_number":2577,"context_line":""},{"line_number":2578,"context_line":"    def test_root_role_as_implied_role_forbidden(self):"},{"line_number":2579,"context_line":"        \"\"\"Create 2 roles that are prohibited from being an implied role."},{"line_number":2580,"context_line":""},{"line_number":2581,"context_line":"        Create 1 additional role which should be accepted as an implied"},{"line_number":2582,"context_line":"        role. Assure the prohibited role names cannot be set as an implied"},{"line_number":2583,"context_line":"        role. Assure the accepted role name which is not a member of the"},{"line_number":2584,"context_line":"        prohibited implied role list can be successfully set an implied"},{"line_number":2585,"context_line":"        role."},{"line_number":2586,"context_line":"        \"\"\""},{"line_number":2587,"context_line":"        prohibited_name1 \u003d \u0027root1\u0027"},{"line_number":2588,"context_line":"        prohibited_name2 \u003d \u0027root2\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_04ba82e1","line":2585,"range":{"start_line":2579,"start_character":11,"end_line":2585,"end_character":13},"updated":"2016-02-15 08:38:37.000000000","message":"the docstring here cannot be simply split to two parts like this.\n\nThe summary line is not accurate at all. The name of the testcase told you what\u0027s this testcase is about -\"test_root_role_as_implied_role_forbidden\".","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"acb8b27257e654f13d79249c79a70f670854b563","unresolved":false,"context_lines":[{"line_number":2576,"context_line":"        return role"},{"line_number":2577,"context_line":""},{"line_number":2578,"context_line":"    def test_root_role_as_implied_role_forbidden(self):"},{"line_number":2579,"context_line":"        \"\"\"Create 2 roles that are prohibited from being an implied role."},{"line_number":2580,"context_line":""},{"line_number":2581,"context_line":"        Create 1 additional role which should be accepted as an implied"},{"line_number":2582,"context_line":"        role. Assure the prohibited role names cannot be set as an implied"},{"line_number":2583,"context_line":"        role. Assure the accepted role name which is not a member of the"},{"line_number":2584,"context_line":"        prohibited implied role list can be successfully set an implied"},{"line_number":2585,"context_line":"        role."},{"line_number":2586,"context_line":"        \"\"\""},{"line_number":2587,"context_line":"        prohibited_name1 \u003d \u0027root1\u0027"},{"line_number":2588,"context_line":"        prohibited_name2 \u003d \u0027root2\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_f9371fae","line":2585,"range":{"start_line":2579,"start_character":11,"end_line":2585,"end_character":13},"in_reply_to":"dae33548_04ba82e1","updated":"2016-02-16 01:10:03.000000000","message":"Done","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"775b615dbbecd95eed302c199b98cda86ff5cd22","unresolved":false,"context_lines":[{"line_number":2576,"context_line":"        return role"},{"line_number":2577,"context_line":""},{"line_number":2578,"context_line":"    def test_root_role_as_implied_role_forbidden(self):"},{"line_number":2579,"context_line":"        \"\"\"Test prohibited role is forbidden to be set as an implied role."},{"line_number":2580,"context_line":""},{"line_number":2581,"context_line":"        Create 2 roles that are prohibited from being an implied role."},{"line_number":2582,"context_line":"        Create 1 additional role which should be accepted as an implied"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_9c5ec110","line":2579,"range":{"start_line":2579,"start_character":16,"end_line":2579,"end_character":31},"updated":"2016-02-16 01:43:46.000000000","message":"why not just \"root role\"?","commit_id":"04f92762106a2edfefd75b10add50e07d714c1ea"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"714d69775f8702d748944b3fadb6630704f64edb","unresolved":false,"context_lines":[{"line_number":2576,"context_line":"        return role"},{"line_number":2577,"context_line":""},{"line_number":2578,"context_line":"    def test_root_role_as_implied_role_forbidden(self):"},{"line_number":2579,"context_line":"        \"\"\"Test prohibited role is forbidden to be set as an implied role."},{"line_number":2580,"context_line":""},{"line_number":2581,"context_line":"        Create 2 roles that are prohibited from being an implied role."},{"line_number":2582,"context_line":"        Create 1 additional role which should be accepted as an implied"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_80a0d944","line":2579,"range":{"start_line":2579,"start_character":16,"end_line":2579,"end_character":31},"in_reply_to":"dae33548_9c5ec110","updated":"2016-02-17 00:10:50.000000000","message":"Done","commit_id":"04f92762106a2edfefd75b10add50e07d714c1ea"}],"keystone/tests/unit/test_v3_catalog.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9227a73bf493b27cce39768be0e1bcb42c4cb94e","unresolved":false,"context_lines":[{"line_number":571,"context_line":"    def test_create_endpoint_with_region(self):"},{"line_number":572,"context_line":"        \"\"\"EndpointV3 creates the region before creating the endpoint."},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"        When endpoint is provided with \u0027region\u0027 and no \u0027region_id\u0027"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"        \"\"\""},{"line_number":577,"context_line":"        ref \u003d unit.new_endpoint_ref_with_region(service_id\u003dself.service_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_f343e56a","line":574,"updated":"2016-02-10 05:01:12.000000000","message":"This isn\u0027t a complete sentence.","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"d347d278cdb21a4959f5f88a4529ef1daa1056ec","unresolved":false,"context_lines":[{"line_number":571,"context_line":"    def test_create_endpoint_with_region(self):"},{"line_number":572,"context_line":"        \"\"\"EndpointV3 creates the region before creating the endpoint."},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"        When endpoint is provided with \u0027region\u0027 and no \u0027region_id\u0027"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"        \"\"\""},{"line_number":577,"context_line":"        ref \u003d unit.new_endpoint_ref_with_region(service_id\u003dself.service_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_0d3507d9","line":574,"in_reply_to":"3a57f1b5_f343e56a","updated":"2016-02-11 01:26:45.000000000","message":"Done","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"}],"keystone/tests/unit/test_v3_credential.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0eda1554fc36a36278ec888d39658e60c4d6eed2","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                                 json.loads(r[\u0027blob\u0027]))"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def test_create_non_ec2_credential(self):"},{"line_number":227,"context_line":"        \"\"\"Create non-ec2 credential."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        Call ``POST /credentials``."},{"line_number":230,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_440c8a94","line":227,"updated":"2016-02-15 08:38:37.000000000","message":"Test ...","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"acb8b27257e654f13d79249c79a70f670854b563","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                                 json.loads(r[\u0027blob\u0027]))"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def test_create_non_ec2_credential(self):"},{"line_number":227,"context_line":"        \"\"\"Create non-ec2 credential."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        Call ``POST /credentials``."},{"line_number":230,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_f9743f9d","line":227,"in_reply_to":"dae33548_440c8a94","updated":"2016-02-16 01:10:03.000000000","message":"Done","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0eda1554fc36a36278ec888d39658e60c4d6eed2","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                            r.result[\u0027credential\u0027][\u0027id\u0027])"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def test_create_ec2_credential_with_missing_project_id(self):"},{"line_number":243,"context_line":"        \"\"\"Create ec2 credential with missing project_id."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        Call ``POST /credentials``."},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_64238e06","line":243,"updated":"2016-02-15 08:38:37.000000000","message":"same here.","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"acb8b27257e654f13d79249c79a70f670854b563","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                            r.result[\u0027credential\u0027][\u0027id\u0027])"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def test_create_ec2_credential_with_missing_project_id(self):"},{"line_number":243,"context_line":"        \"\"\"Create ec2 credential with missing project_id."},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        Call ``POST /credentials``."},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_d977bb9d","line":243,"in_reply_to":"dae33548_64238e06","updated":"2016-02-16 01:10:03.000000000","message":"Done","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0eda1554fc36a36278ec888d39658e60c4d6eed2","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            body\u003d{\u0027credential\u0027: ref}, expected_status\u003dhttp_client.BAD_REQUEST)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def test_create_ec2_credential_with_invalid_blob(self):"},{"line_number":256,"context_line":"        \"\"\"Create ec2 credential with invalid blob."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        Call ``POST /credentials``."},{"line_number":259,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_0479e2fc","line":256,"updated":"2016-02-15 08:38:37.000000000","message":"same here.","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"acb8b27257e654f13d79249c79a70f670854b563","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            body\u003d{\u0027credential\u0027: ref}, expected_status\u003dhttp_client.BAD_REQUEST)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def test_create_ec2_credential_with_invalid_blob(self):"},{"line_number":256,"context_line":"        \"\"\"Create ec2 credential with invalid blob."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        Call ``POST /credentials``."},{"line_number":259,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_396fc7c6","line":256,"in_reply_to":"dae33548_0479e2fc","updated":"2016-02-16 01:10:03.000000000","message":"Done","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0eda1554fc36a36278ec888d39658e60c4d6eed2","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        self.config_fixture.config(group\u003d\u0027trust\u0027, enabled\u003dTrue)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def test_trust_scoped_ec2_credential(self):"},{"line_number":298,"context_line":"        \"\"\"Creating ec2 credential."},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        Call ``POST /credentials``."},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_0460c234","line":298,"updated":"2016-02-15 08:38:37.000000000","message":"ambiguous summary.","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"acb8b27257e654f13d79249c79a70f670854b563","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        self.config_fixture.config(group\u003d\u0027trust\u0027, enabled\u003dTrue)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def test_trust_scoped_ec2_credential(self):"},{"line_number":298,"context_line":"        \"\"\"Creating ec2 credential."},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        Call ``POST /credentials``."},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_1972c3ad","line":298,"in_reply_to":"dae33548_0460c234","updated":"2016-02-16 01:10:03.000000000","message":"Done","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"}],"keystone/tests/unit/test_v3_federation.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9227a73bf493b27cce39768be0e1bcb42c4cb94e","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"        self._assign_protocol_to_idp(expected_status\u003dhttp_client.CREATED)"},{"line_number":1237,"context_line":""},{"line_number":1238,"context_line":"    def test_protocol_composite_pk(self):"},{"line_number":1239,"context_line":"        \"\"\"Test Keystone can add two entities of same names with different IdPs"},{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"        1. Add IdP and assign it protocol with predefined name"},{"line_number":1242,"context_line":"        2. Add another IdP and assign it a protocol with same name."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_137241e6","line":1239,"updated":"2016-02-10 05:01:12.000000000","message":"s/Test/Test that/","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"d347d278cdb21a4959f5f88a4529ef1daa1056ec","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"        self._assign_protocol_to_idp(expected_status\u003dhttp_client.CREATED)"},{"line_number":1237,"context_line":""},{"line_number":1238,"context_line":"    def test_protocol_composite_pk(self):"},{"line_number":1239,"context_line":"        \"\"\"Test Keystone can add two entities of same names with different IdPs"},{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"        1. Add IdP and assign it protocol with predefined name"},{"line_number":1242,"context_line":"        2. Add another IdP and assign it a protocol with same name."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_ed50ab0c","line":1239,"in_reply_to":"3a57f1b5_137241e6","updated":"2016-02-11 01:26:45.000000000","message":"Done","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"}],"keystone/token/persistence/backends/kvs.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0eda1554fc36a36278ec888d39658e60c4d6eed2","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return data_copy"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _get_user_token_list_with_expiry(self, user_key):"},{"line_number":141,"context_line":"        \"\"\"Return a list of tuples for the user_key."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        Tuples are in the format: (token_id, token_expiry)."},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_e4995e21","line":141,"range":{"start_line":141,"start_character":11,"end_line":141,"end_character":52},"updated":"2016-02-15 08:38:37.000000000","message":"I don\u0027t know what the method for from this summary. This line could be change to something like below.\n\n\n :return: the tuples in the format (token_id, token_expiry)\n :rtype: list","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"acb8b27257e654f13d79249c79a70f670854b563","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return data_copy"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _get_user_token_list_with_expiry(self, user_key):"},{"line_number":141,"context_line":"        \"\"\"Return a list of tuples for the user_key."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        Tuples are in the format: (token_id, token_expiry)."},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_593d6bba","line":141,"range":{"start_line":141,"start_character":11,"end_line":141,"end_character":52},"in_reply_to":"dae33548_e4995e21","updated":"2016-02-16 01:10:03.000000000","message":"Done","commit_id":"aa9d4ea29c9990e0a5bf7b69ee1cebb3c3ddd1d2"}],"keystone/token/provider.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9227a73bf493b27cce39768be0e1bcb42c4cb94e","unresolved":false,"context_lines":[{"line_number":75,"context_line":"def random_urlsafe_str_to_bytes(s):"},{"line_number":76,"context_line":"    \"\"\"Convert six.text_type to six.binary_type."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    Convert a string generated by :func:`random_urlsafe_str()` to"},{"line_number":79,"context_line":"    six.binary_type."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    :type s: six.text_type"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_93a7114f","line":78,"updated":"2016-02-10 05:01:12.000000000","message":"Might be worth rethinking this. Beyond the function name this really doesn\u0027t have much to do with random_urlsafe_str. It really seems to just be about taking unicode text and making urlsafe bytes.","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"d347d278cdb21a4959f5f88a4529ef1daa1056ec","unresolved":false,"context_lines":[{"line_number":75,"context_line":"def random_urlsafe_str_to_bytes(s):"},{"line_number":76,"context_line":"    \"\"\"Convert six.text_type to six.binary_type."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    Convert a string generated by :func:`random_urlsafe_str()` to"},{"line_number":79,"context_line":"    six.binary_type."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    :type s: six.text_type"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_8df3370a","line":78,"in_reply_to":"3a57f1b5_93a7114f","updated":"2016-02-11 01:26:45.000000000","message":"Done","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8843d8b1ac4362457b712e81cbdb3353fee205bd","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"def random_urlsafe_str_to_bytes(s):"},{"line_number":77,"context_line":"    \"\"\"Convert unicode text to urlsafe bytes."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    :type s: six.text_type"},{"line_number":80,"context_line":"    :rtype: six.binary_type"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_c23b09d0","line":77,"updated":"2016-02-16 22:33:23.000000000","message":"The docstring needs to continue to say that this is for use with random_urlsafe_str.","commit_id":"04f92762106a2edfefd75b10add50e07d714c1ea"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"714d69775f8702d748944b3fadb6630704f64edb","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"def random_urlsafe_str_to_bytes(s):"},{"line_number":77,"context_line":"    \"\"\"Convert unicode text to urlsafe bytes."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    :type s: six.text_type"},{"line_number":80,"context_line":"    :rtype: six.binary_type"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_80457971","line":77,"in_reply_to":"dae33548_c23b09d0","updated":"2016-02-17 00:10:50.000000000","message":"Done","commit_id":"04f92762106a2edfefd75b10add50e07d714c1ea"}],"keystone/trust/core.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9227a73bf493b27cce39768be0e1bcb42c4cb94e","unresolved":false,"context_lines":[{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    @abc.abstractmethod"},{"line_number":238,"context_line":"    def consume_use(self, trust_id):"},{"line_number":239,"context_line":"        \"\"\"Consume one use when a trust was created."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        With a limitation on its uses, provided there are still uses available."},{"line_number":242,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_d3ffc932","line":239,"updated":"2016-02-10 05:01:12.000000000","message":"Should be something more like \"Consume one use of a trust.\" The \"what a trust is created....\" seems like it belongs with the sentence below.","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"d347d278cdb21a4959f5f88a4529ef1daa1056ec","unresolved":false,"context_lines":[{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    @abc.abstractmethod"},{"line_number":238,"context_line":"    def consume_use(self, trust_id):"},{"line_number":239,"context_line":"        \"\"\"Consume one use when a trust was created."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        With a limitation on its uses, provided there are still uses available."},{"line_number":242,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_4dde9f6e","line":239,"in_reply_to":"3a57f1b5_d3ffc932","updated":"2016-02-11 01:26:45.000000000","message":"Done","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9227a73bf493b27cce39768be0e1bcb42c4cb94e","unresolved":false,"context_lines":[{"line_number":238,"context_line":"    def consume_use(self, trust_id):"},{"line_number":239,"context_line":"        \"\"\"Consume one use when a trust was created."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        With a limitation on its uses, provided there are still uses available."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        :raises keystone.exception.TrustUseLimitReached: If no remaining uses"},{"line_number":244,"context_line":"            for trust."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_73e5b5a6","line":241,"updated":"2016-02-10 05:01:12.000000000","message":"This is not a complete sentence.","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"d347d278cdb21a4959f5f88a4529ef1daa1056ec","unresolved":false,"context_lines":[{"line_number":238,"context_line":"    def consume_use(self, trust_id):"},{"line_number":239,"context_line":"        \"\"\"Consume one use when a trust was created."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        With a limitation on its uses, provided there are still uses available."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        :raises keystone.exception.TrustUseLimitReached: If no remaining uses"},{"line_number":244,"context_line":"            for trust."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_0de8a70f","line":241,"in_reply_to":"3a57f1b5_73e5b5a6","updated":"2016-02-11 01:26:45.000000000","message":"Done","commit_id":"fe04369e434f10dc53e825b1a181f67ff3205c5c"}],"tox.ini":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"8087ca775ee1d5bb7365d3492716305f5d8eae87","unresolved":false,"context_lines":[{"line_number":147,"context_line":"filename\u003d *.py,keystone-all,keystone-manage"},{"line_number":148,"context_line":"show-source \u003d true"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"# H405: multi line docstring summary not separated with an empty line"},{"line_number":151,"context_line":"# D100: Missing docstring in public module"},{"line_number":152,"context_line":"# D101: Missing docstring in public class"},{"line_number":153,"context_line":"# D102: Missing docstring in public method"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3a57f1b5_031fd3b7","line":150,"range":{"start_line":150,"start_character":0,"end_line":150,"end_character":69},"updated":"2016-02-12 03:53:45.000000000","message":"Remove this","commit_id":"344a567b30b0f5fe7e7b3d2b8e1d3e157832930e"},{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"808cd2f683d0c65ef6c52aaac2c2f318718cf8bf","unresolved":false,"context_lines":[{"line_number":147,"context_line":"filename\u003d *.py,keystone-all,keystone-manage"},{"line_number":148,"context_line":"show-source \u003d true"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"# H405: multi line docstring summary not separated with an empty line"},{"line_number":151,"context_line":"# D100: Missing docstring in public module"},{"line_number":152,"context_line":"# D101: Missing docstring in public class"},{"line_number":153,"context_line":"# D102: Missing docstring in public method"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3a57f1b5_c62ea942","line":150,"range":{"start_line":150,"start_character":0,"end_line":150,"end_character":69},"in_reply_to":"3a57f1b5_031fd3b7","updated":"2016-02-12 04:25:50.000000000","message":"Done","commit_id":"344a567b30b0f5fe7e7b3d2b8e1d3e157832930e"}]}
