)]}'
{"keystone/common/utils.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"253dc1c619699ae82900508ac58cb752cbdf20e9","unresolved":false,"context_lines":[{"line_number":512,"context_line":"_ISO8601_TIME_FORMAT \u003d \u0027%Y-%m-%dT%H:%M:%S\u0027"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"def isotime(at\u003dNone, subsecond\u003dFalse):"},{"line_number":516,"context_line":"    \"\"\"Stringify time in ISO 8601 format.\"\"\""},{"line_number":517,"context_line":"    # Python provides a similar instance method for datetime.datetime objects"},{"line_number":518,"context_line":"    # called isoformat(). The format of the strings generated by isoformat()"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_65fff534","side":"PARENT","line":515,"updated":"2016-09-13 20:27:35.000000000","message":"The method signature makes it look like you can get subsecond precision, but if the expected result is always .000000 then it\u0027d be nice to document that in a docstring so that this change isn\u0027t seen as a bug later on.","commit_id":"d1a761293a4adcc30d6d17d1d38e427f6ed02246"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"f46ead9a070b334a88de97aa6ef5380a1db1ca0a","unresolved":false,"context_lines":[{"line_number":512,"context_line":"_ISO8601_TIME_FORMAT \u003d \u0027%Y-%m-%dT%H:%M:%S\u0027"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"def isotime(at\u003dNone, subsecond\u003dFalse):"},{"line_number":516,"context_line":"    \"\"\"Stringify time in ISO 8601 format.\"\"\""},{"line_number":517,"context_line":"    # Python provides a similar instance method for datetime.datetime objects"},{"line_number":518,"context_line":"    # called isoformat(). The format of the strings generated by isoformat()"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_ded41a49","side":"PARENT","line":515,"in_reply_to":"7a8ec9b2_65fff534","updated":"2016-09-13 21:17:14.000000000","message":"++\n\nthis also reinforces the need of a test for this behavior.","commit_id":"d1a761293a4adcc30d6d17d1d38e427f6ed02246"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f2bc61c6056afc440cb36fc5056b39cb5dac195b","unresolved":false,"context_lines":[{"line_number":512,"context_line":"_ISO8601_TIME_FORMAT \u003d \u0027%Y-%m-%dT%H:%M:%S\u0027"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"def isotime(at\u003dNone, subsecond\u003dFalse):"},{"line_number":516,"context_line":"    \"\"\"Stringify time in ISO 8601 format.\"\"\""},{"line_number":517,"context_line":"    # Python provides a similar instance method for datetime.datetime objects"},{"line_number":518,"context_line":"    # called isoformat(). The format of the strings generated by isoformat()"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_4dc2f034","side":"PARENT","line":515,"in_reply_to":"7a8ec9b2_ded41a49","updated":"2016-09-14 14:52:39.000000000","message":"Done","commit_id":"d1a761293a4adcc30d6d17d1d38e427f6ed02246"}],"keystone/models/revoke_model.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"253dc1c619699ae82900508ac58cb752cbdf20e9","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            self.expires_at \u003d self.expires_at.replace(microsecond\u003d0)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        if self.revoked_at is None:"},{"line_number":97,"context_line":"            self.revoked_at \u003d timeutils.utcnow().replace(microsecond\u003d0)"},{"line_number":98,"context_line":"        if self.issued_before is None:"},{"line_number":99,"context_line":"            self.issued_before \u003d self.revoked_at"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_a5f9fd4f","line":97,"updated":"2016-09-13 20:27:35.000000000","message":"+1","commit_id":"301b6a7bc770830485937f0b9927a26e2e5ec8c8"}],"keystone/tests/unit/test_v3_auth.py":[{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"fe61e21c9d9b0d346eb34925ff7c640f7e27dd06","unresolved":false,"context_lines":[{"line_number":3172,"context_line":"                 \u0027r_id\u0027: self.role1[\u0027id\u0027]})"},{"line_number":3173,"context_line":""},{"line_number":3174,"context_line":"            # NOTE(lbragstad): Here we advance the clock one second to pass"},{"line_number":3175,"context_line":"            # into the threshold of a new second because we just presisted a"},{"line_number":3176,"context_line":"            # revocation event for removing a role from a group on a project."},{"line_number":3177,"context_line":"            # One thing to note about that revocation event is that it has no"},{"line_number":3178,"context_line":"            # context about the group, so even though user3 might not be in"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_4072dce6","line":3175,"range":{"start_line":3175,"start_character":65,"end_line":3175,"end_character":74},"updated":"2016-09-14 03:18:19.000000000","message":"persisted","commit_id":"301b6a7bc770830485937f0b9927a26e2e5ec8c8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f2bc61c6056afc440cb36fc5056b39cb5dac195b","unresolved":false,"context_lines":[{"line_number":3172,"context_line":"                 \u0027r_id\u0027: self.role1[\u0027id\u0027]})"},{"line_number":3173,"context_line":""},{"line_number":3174,"context_line":"            # NOTE(lbragstad): Here we advance the clock one second to pass"},{"line_number":3175,"context_line":"            # into the threshold of a new second because we just presisted a"},{"line_number":3176,"context_line":"            # revocation event for removing a role from a group on a project."},{"line_number":3177,"context_line":"            # One thing to note about that revocation event is that it has no"},{"line_number":3178,"context_line":"            # context about the group, so even though user3 might not be in"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_8de238d4","line":3175,"in_reply_to":"7a8ec9b2_4072dce6","updated":"2016-09-14 14:52:39.000000000","message":"Done","commit_id":"301b6a7bc770830485937f0b9927a26e2e5ec8c8"}]}
