)]}'
{"keystone/contrib/revoke/core.py":[{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"6f39aed6e314ed37ab9f42c657773fc6beb62b5c","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        with self._store.get_lock(_TREE_KEY):"},{"line_number":77,"context_line":"            for e in self._current_events:"},{"line_number":78,"context_line":"                if e.revoked_at \u003c cutoff:"},{"line_number":79,"context_line":"                    self.revoke_map.remove_event(e)"},{"line_number":80,"context_line":"                    self._current_events.remove(e)"},{"line_number":81,"context_line":"                else:"},{"line_number":82,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FHfY%3D","line":79,"updated":"2014-03-09 07:06:50.000000000","message":"good catch!","commit_id":"8af98f9ef218316e9a00115e585d47ebd1c6c200"}],"keystone/tests/test_revoke.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1015dbe9ffbbe0f88b45de5d643864333d982468","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        now \u003d datetime.datetime.utcnow()"},{"line_number":153,"context_line":"        delta \u003d datetime.timedelta(hours\u003d2)"},{"line_number":154,"context_line":"        now_plus_2h \u003d now + delta"},{"line_number":155,"context_line":"        mock_utcnow.return_value \u003d now"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        # Build a token and validate it. This will see the cache for the future"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FHeg%3D","line":154,"updated":"2014-03-09 06:43:14.000000000","message":"nit: could reduce this by one line and just write:\n\n  now_plus_2h \u003d now + datetime.timedelta(hours\u003d2)\n\nsince delta is only used once.","commit_id":"8af98f9ef218316e9a00115e585d47ebd1c6c200"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f33a184d6b492e8d5e657e2ea1225121c60ea488","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        now \u003d datetime.datetime.utcnow()"},{"line_number":153,"context_line":"        delta \u003d datetime.timedelta(hours\u003d2)"},{"line_number":154,"context_line":"        now_plus_2h \u003d now + delta"},{"line_number":155,"context_line":"        mock_utcnow.return_value \u003d now"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        # Build a token and validate it. This will see the cache for the future"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FHds%3D","line":154,"in_reply_to":"AAAAVn%2F%2FHeg%3D","updated":"2014-03-09 06:45:14.000000000","message":"Cool, will do.","commit_id":"8af98f9ef218316e9a00115e585d47ebd1c6c200"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"6f39aed6e314ed37ab9f42c657773fc6beb62b5c","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        now_plus_2h \u003d now + delta"},{"line_number":155,"context_line":"        mock_utcnow.return_value \u003d now"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        # Build a token and validate it. This will see the cache for the future"},{"line_number":158,"context_line":"        # \"synchronize\" call."},{"line_number":159,"context_line":"        token_values \u003d _sample_token_values()"},{"line_number":160,"context_line":"        self.revoke_api.revoke_by_user(_new_id())"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FHe4%3D","line":157,"updated":"2014-03-09 07:06:50.000000000","message":"see should be seed","commit_id":"8af98f9ef218316e9a00115e585d47ebd1c6c200"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"6f39aed6e314ed37ab9f42c657773fc6beb62b5c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        mock_utcnow.return_value \u003d now"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        # Build a token and validate it. This will see the cache for the future"},{"line_number":158,"context_line":"        # \"synchronize\" call."},{"line_number":159,"context_line":"        token_values \u003d _sample_token_values()"},{"line_number":160,"context_line":"        self.revoke_api.revoke_by_user(_new_id())"},{"line_number":161,"context_line":"        self.revoke_api.check_token(token_values)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FHeo%3D","line":158,"updated":"2014-03-09 07:06:50.000000000","message":"use single quotes instead of double when possible","commit_id":"8af98f9ef218316e9a00115e585d47ebd1c6c200"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"6f39aed6e314ed37ab9f42c657773fc6beb62b5c","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.revoke_api.check_token(token_values)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        # Move our clock forward by 2h, build a new token and validate it."},{"line_number":164,"context_line":"        # \"synchronize\" should now be exercised and remove old \"expired\" events"},{"line_number":165,"context_line":"        mock_utcnow.return_value \u003d now_plus_2h"},{"line_number":166,"context_line":"        token_values \u003d _sample_token_values()"},{"line_number":167,"context_line":"        self.revoke_api.revoke_by_expiration(_new_id(), now_plus_2h)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FHe0%3D","line":164,"updated":"2014-03-09 07:06:50.000000000","message":"use single quotes instead of double when possible. Also this is an incredibly helpful comment!!!","commit_id":"8af98f9ef218316e9a00115e585d47ebd1c6c200"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"6f39aed6e314ed37ab9f42c657773fc6beb62b5c","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        # Move our clock forward by 2h, build a new token and validate it."},{"line_number":164,"context_line":"        # \"synchronize\" should now be exercised and remove old \"expired\" events"},{"line_number":165,"context_line":"        mock_utcnow.return_value \u003d now_plus_2h"},{"line_number":166,"context_line":"        token_values \u003d _sample_token_values()"},{"line_number":167,"context_line":"        self.revoke_api.revoke_by_expiration(_new_id(), now_plus_2h)"},{"line_number":168,"context_line":"        self.revoke_api.check_token(token_values)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FHcc%3D","line":165,"updated":"2014-03-09 07:06:50.000000000","message":"I love how you used mock to manipulate the space time continuum instead of a flux capacitor!!!","commit_id":"8af98f9ef218316e9a00115e585d47ebd1c6c200"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"fb3522d1afc1d68b16ed4d2284aa86e272e7288b","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        self.revoke_api.check_token(token_values)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        # Move our clock forward by 2h, build a new token and validate it."},{"line_number":163,"context_line":"        # \u0027synchronize\u0027 should now be exercised and remove old expired events"},{"line_number":164,"context_line":"        mock_utcnow.return_value \u003d now_plus_2h"},{"line_number":165,"context_line":"        token_values \u003d _sample_token_values()"},{"line_number":166,"context_line":"        self.revoke_api.revoke_by_expiration(_new_id(), now_plus_2h)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2FG0s%3D","line":163,"updated":"2014-03-09 16:09:12.000000000","message":"I\u0027d prefer it if the code validated that the code was exercised... maybe by checking that expired events were removed?","commit_id":"708a09addd166a8826a9f5dadd2e9ef77e008999"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"655a7f4f70ca63f91d930d68c4e2a33ec5ab76f6","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        self.revoke_api.check_token(token_values)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        # Move our clock forward by 2h, build a new token and validate it."},{"line_number":163,"context_line":"        # \u0027synchronize\u0027 should now be exercised and remove old expired events"},{"line_number":164,"context_line":"        mock_utcnow.return_value \u003d now_plus_2h"},{"line_number":165,"context_line":"        token_values \u003d _sample_token_values()"},{"line_number":166,"context_line":"        self.revoke_api.revoke_by_expiration(_new_id(), now_plus_2h)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2FGto%3D","line":163,"in_reply_to":"AAAAVn%2F%2FG0s%3D","updated":"2014-03-09 17:36:56.000000000","message":"Hm. I\u0027ll see what I can cook up.","commit_id":"708a09addd166a8826a9f5dadd2e9ef77e008999"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"c03c3dce514b2de2e5507e3674e8f1f2805b30e9","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        self.revoke_api.check_token(token_values)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        # Move our clock forward by 2h, build a new token and validate it."},{"line_number":163,"context_line":"        # \u0027synchronize\u0027 should now be exercised and remove old expired events"},{"line_number":164,"context_line":"        mock_utcnow.return_value \u003d now_plus_2h"},{"line_number":165,"context_line":"        token_values \u003d _sample_token_values()"},{"line_number":166,"context_line":"        self.revoke_api.revoke_by_expiration(_new_id(), now_plus_2h)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2FFp4%3D","line":163,"in_reply_to":"AAAAVn%2F%2FGto%3D","updated":"2014-03-10 17:07:37.000000000","message":"Make a token that matches only the first event, and it should be revoked before the event is removed, and pass without revocation afterwards.","commit_id":"708a09addd166a8826a9f5dadd2e9ef77e008999"}]}
