)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fb5425abcf92eb8d3ba76234cf307c421c26b783","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Improve check_token validation performance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch improves check_token validation performance by only pulling"},{"line_number":10,"context_line":"recovation events based on the token issued_at value, taking advantage"},{"line_number":11,"context_line":"of the table index. In this way, only a subset of relevant events will"},{"line_number":12,"context_line":"be returned for validation."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1a95cdbc_1ca56cb4","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":10},"updated":"2016-10-05 17:56:35.000000000","message":"revocation","commit_id":"64247e9cdbec98e850f17b1d3e868525dd50670e"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"e0a8dd17714ae1c06a8405b726e103c39be16363","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch improves check_token validation performance by only pulling"},{"line_number":10,"context_line":"recovation events based on the token issued_at value, taking advantage"},{"line_number":11,"context_line":"of the table index. In this way, only a subset of relevant events will"},{"line_number":12,"context_line":"be returned for validation."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I9c2f067d870d542ec5909eaf8b24ded07b75f433"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1a95cdbc_2de91981","line":11,"range":{"start_line":11,"start_character":13,"end_line":11,"end_character":18},"updated":"2016-10-05 17:23:16.000000000","message":"nit: indexes","commit_id":"64247e9cdbec98e850f17b1d3e868525dd50670e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fd6dbf990e83dd017285f5ae583852d9be4dce47","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     “Richard \u003ccsravelar@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-10-05 21:40:40 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Improve check_token validation performance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch improves check_token validation performance by only pulling"},{"line_number":10,"context_line":"revocation events based on the token issued_at value, taking advantage"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a95cdbc_c83419fd","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":42},"updated":"2016-10-05 22:27:04.000000000","message":"when including such affirmatives in the commit message would be nice to provide data (performance tests for this case) that proves what the affirmatives claim.","commit_id":"d91733fdf6a33190add6c943db3f55b2c15fc474"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"38a908f3e495a6974b35145b25559ddfa4b9a5cc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     “Richard \u003ccsravelar@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-10-05 21:40:40 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Improve check_token validation performance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch improves check_token validation performance by only pulling"},{"line_number":10,"context_line":"revocation events based on the token issued_at value, taking advantage"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a95cdbc_6144a41a","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":42},"in_reply_to":"1a95cdbc_c83419fd","updated":"2016-10-07 17:16:38.000000000","message":"Done","commit_id":"d91733fdf6a33190add6c943db3f55b2c15fc474"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8960ae86aade564048bd4cec1f3fc65ecb6d39b6","unresolved":false,"context_lines":[{"line_number":12,"context_line":"be returned for validation."},{"line_number":13,"context_line":"Benchmark Results in Time per Request:"},{"line_number":14,"context_line":"Old Method"},{"line_number":15,"context_line":"https://gist.github.com/csrichard1/4b7b8527ee5a6565a84956cff33cf29b"},{"line_number":16,"context_line":"New Method"},{"line_number":17,"context_line":"10 revokes at 17.636ms, 100 revokes at 17.279ms, 1000 revokes at 17.370"},{"line_number":18,"context_line":"10,000 revokes with issued_before query at 17.263 and 10,000 revokes"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"1a95cdbc_9ea20c4a","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":67},"updated":"2016-10-07 00:28:31.000000000","message":"keep the link, but post the old results in the commit message too ;)\n\n10 Revokes: 7.908 ms\n\n100 Revokes: 18.224 ms\n\n1,000 Revokes: 110.155 ms\n\n10,000 Revokes: 1998.220 ms","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"705fed3e8c4bce2abfa4d0ed88a7d0c318820f07","unresolved":false,"context_lines":[{"line_number":12,"context_line":"be returned for validation."},{"line_number":13,"context_line":"Benchmark Results in Time per Request:"},{"line_number":14,"context_line":"Old Method"},{"line_number":15,"context_line":"https://gist.github.com/csrichard1/4b7b8527ee5a6565a84956cff33cf29b"},{"line_number":16,"context_line":"New Method"},{"line_number":17,"context_line":"10 revokes at 17.636ms, 100 revokes at 17.279ms, 1000 revokes at 17.370"},{"line_number":18,"context_line":"10,000 revokes with issued_before query at 17.263 and 10,000 revokes"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"1a95cdbc_21f0dcfd","line":15,"in_reply_to":"1a95cdbc_87e0e597","updated":"2016-10-07 17:17:03.000000000","message":"Done","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fbf2141e76f686b0d94ca883e09f37a4fbb9474c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"be returned for validation."},{"line_number":13,"context_line":"Benchmark Results in Time per Request:"},{"line_number":14,"context_line":"Old Method"},{"line_number":15,"context_line":"https://gist.github.com/csrichard1/4b7b8527ee5a6565a84956cff33cf29b"},{"line_number":16,"context_line":"New Method"},{"line_number":17,"context_line":"10 revokes at 17.636ms, 100 revokes at 17.279ms, 1000 revokes at 17.370"},{"line_number":18,"context_line":"10,000 revokes with issued_before query at 17.263 and 10,000 revokes"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"1a95cdbc_87e0e597","line":15,"in_reply_to":"1a95cdbc_9ea20c4a","updated":"2016-10-07 16:35:08.000000000","message":"++","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"705fed3e8c4bce2abfa4d0ed88a7d0c318820f07","unresolved":false,"context_lines":[{"line_number":12,"context_line":"be returned for validation."},{"line_number":13,"context_line":"Benchmark Results in Time per Request:"},{"line_number":14,"context_line":"Old Method"},{"line_number":15,"context_line":"https://gist.github.com/csrichard1/4b7b8527ee5a6565a84956cff33cf29b"},{"line_number":16,"context_line":"New Method"},{"line_number":17,"context_line":"10 revokes at 17.636ms, 100 revokes at 17.279ms, 1000 revokes at 17.370"},{"line_number":18,"context_line":"10,000 revokes with issued_before query at 17.263 and 10,000 revokes"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"1a95cdbc_01ebe013","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":67},"in_reply_to":"1a95cdbc_9ea20c4a","updated":"2016-10-07 17:17:03.000000000","message":"Done","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"66f5ba1f01c60ac69fe95e9b17f551cb803fad85","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"fa6399be_c54a44ac","updated":"2016-10-12 04:15:52.000000000","message":"don\u0027t be afraid to use line breaks to space things out for readability","commit_id":"358a90712dfb420a83ffe1f9c19c7832441e9d32"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"66f5ba1f01c60ac69fe95e9b17f551cb803fad85","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch improves check_token validation performance by only pulling"},{"line_number":10,"context_line":"revocation events based on the token issued_at value, taking advantage"},{"line_number":11,"context_line":"of the table index. In this way, only a subset of relevant events will"},{"line_number":12,"context_line":"be returned for validation."},{"line_number":13,"context_line":"Benchmark Results in Time per Request:"},{"line_number":14,"context_line":"Old Method"},{"line_number":15,"context_line":"https://gist.github.com/csrichard1/4b7b8527ee5a6565a84956cff33cf29b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"fa6399be_25a06043","line":12,"updated":"2016-10-12 04:15:52.000000000","message":"add a new line after here","commit_id":"358a90712dfb420a83ffe1f9c19c7832441e9d32"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fe2a6814e69d3c36a34acda7ecf09a36e4513825","unresolved":false,"context_lines":[{"line_number":11,"context_line":"of the table index. In this way, only a subset of relevant events will"},{"line_number":12,"context_line":"be returned for validation."},{"line_number":13,"context_line":"Benchmark Results in Time per Request:"},{"line_number":14,"context_line":"Old Method"},{"line_number":15,"context_line":"https://gist.github.com/csrichard1/4b7b8527ee5a6565a84956cff33cf29b"},{"line_number":16,"context_line":"Old Method"},{"line_number":17,"context_line":"10 revokes at 7.908"},{"line_number":18,"context_line":"100 revokes at 18.224"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"1a95cdbc_14e6afaf","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":67},"updated":"2016-10-08 03:49:10.000000000","message":"nit: remove this since it is being repeated below","commit_id":"358a90712dfb420a83ffe1f9c19c7832441e9d32"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"517052937d3a7f6329b9c8a91701a9708ed3bb33","unresolved":false,"context_lines":[{"line_number":12,"context_line":"be returned for validation."},{"line_number":13,"context_line":"Benchmark Results in Time per Request:"},{"line_number":14,"context_line":"Old Method"},{"line_number":15,"context_line":"https://gist.github.com/csrichard1/4b7b8527ee5a6565a84956cff33cf29b"},{"line_number":16,"context_line":"Old Method"},{"line_number":17,"context_line":"10 revokes at 7.908"},{"line_number":18,"context_line":"100 revokes at 18.224"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"fa6399be_d1513f64","line":15,"in_reply_to":"1a95cdbc_14e6afaf","updated":"2016-10-11 16:12:58.000000000","message":"I wouldn\u0027t mind keep thing around since it links to more context as to why we need the change.","commit_id":"358a90712dfb420a83ffe1f9c19c7832441e9d32"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fe2a6814e69d3c36a34acda7ecf09a36e4513825","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Benchmark Results in Time per Request:"},{"line_number":14,"context_line":"Old Method"},{"line_number":15,"context_line":"https://gist.github.com/csrichard1/4b7b8527ee5a6565a84956cff33cf29b"},{"line_number":16,"context_line":"Old Method"},{"line_number":17,"context_line":"10 revokes at 7.908"},{"line_number":18,"context_line":"100 revokes at 18.224"},{"line_number":19,"context_line":"1,000 revokes at 110.155"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"1a95cdbc_34d48bbb","line":16,"updated":"2016-10-08 03:49:10.000000000","message":"good stuff!","commit_id":"358a90712dfb420a83ffe1f9c19c7832441e9d32"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"66f5ba1f01c60ac69fe95e9b17f551cb803fad85","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Improve check_token validation performance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch improves check_token validation performance by only pulling"},{"line_number":10,"context_line":"revocation events based on the token issued_at value, taking advantage"},{"line_number":11,"context_line":"of the table index. In this way, only a subset of relevant events will"},{"line_number":12,"context_line":"be returned for validation."},{"line_number":13,"context_line":"Benchmark Results in Time per Request:"},{"line_number":14,"context_line":"Old Method"},{"line_number":15,"context_line":"https://gist.github.com/csrichard1/4b7b8527ee5a6565a84956cff33cf29b"},{"line_number":16,"context_line":"Old Method"},{"line_number":17,"context_line":"10 revokes at 7.908"},{"line_number":18,"context_line":"100 revokes at 18.224"},{"line_number":19,"context_line":"1,000 revokes at 110.155"},{"line_number":20,"context_line":"10,000 revokes at 1998.220"},{"line_number":21,"context_line":"New Method"},{"line_number":22,"context_line":"10 revokes at 17.636ms,"},{"line_number":23,"context_line":"100 revokes at 17.279ms,"},{"line_number":24,"context_line":"1,000 revokes at 17.370,"},{"line_number":25,"context_line":"10,000 revokes w/all revokes issued before token at 17.263 (best case)"},{"line_number":26,"context_line":"10,000 revokes w/all revokes after token creation 44.934ms (worst case)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: I9c2f067d870d542ec5909eaf8b24ded07b75f433"},{"line_number":29,"context_line":"Partial-Bug: 1524030"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"fa6399be_65b1788f","line":26,"range":{"start_line":9,"start_character":0,"end_line":26,"end_character":71},"updated":"2016-10-12 04:15:52.000000000","message":"space things out:\n\nThis patch improves check_token validation performance by only pulling revocation events based on the token `issued_at` value, taking advantage of the table index. In this way, only a subset of relevant events will be returned for validation.\n\n\nBenchmarks can be seen at [1] but included here as well:\n\n\nTime per Request for Old Method\n---------------------------------\n10 revokes at 7.908ms\n100 revokes at 18.224ms\n1,000 revokes at 110.155ms\n10,000 revokes at 1998.220ms\n\n\nTime per Request for New Method\n----------------------------------\n10 revokes at 17.636ms\n100 revokes at 17.279ms\n1,000 revokes at 17.370ms\n10,000 revokes w/all revokes issued before token at 17.263ms (best case)\n10,000 revokes w/all revokes after token creation 44.934ms (worst case)\n\n[1] https://gist.github.com/csrichard1/4b7b8527ee5a6565a84956cff33cf29b","commit_id":"358a90712dfb420a83ffe1f9c19c7832441e9d32"}],"keystone/revoke/backends/base.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8960ae86aade564048bd4cec1f3fc65ecb6d39b6","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":36,"context_line":"class RevokeDriverV8(object):"},{"line_number":37,"context_line":"    \"\"\"Interface for recording and reporting revocation events.\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_3ebe5865","line":36,"range":{"start_line":36,"start_character":6,"end_line":36,"end_character":20},"updated":"2016-10-07 00:28:31.000000000","message":"this needs a rebase, we removed the stable interfaces","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"705fed3e8c4bce2abfa4d0ed88a7d0c318820f07","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":36,"context_line":"class RevokeDriverV8(object):"},{"line_number":37,"context_line":"    \"\"\"Interface for recording and reporting revocation events.\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_41f16800","line":36,"range":{"start_line":36,"start_character":6,"end_line":36,"end_character":20},"in_reply_to":"1a95cdbc_3ebe5865","updated":"2016-10-07 17:17:03.000000000","message":"Done","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8960ae86aade564048bd4cec1f3fc65ecb6d39b6","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @abc.abstractmethod"},{"line_number":40,"context_line":"    def list_revoked(self, token):"},{"line_number":41,"context_line":"        \"\"\"return the revocation events, as a list of objects."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        :param token: dictionary of values from a token, normalized for"},{"line_number":44,"context_line":"                            differences between v2 and v3. The checked values"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_3e65781d","line":41,"range":{"start_line":41,"start_character":8,"end_line":41,"end_character":62},"updated":"2016-10-07 00:28:31.000000000","message":"this is exactly what \"list_events\" does according to line 55.\n\nwhy don\u0027t we just pass in \"token\" into list_events instead? and default token to None.\n\nalternatively, rename this method to something like... list_events_by_token_issue instead, to make things a bit more clear","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"705fed3e8c4bce2abfa4d0ed88a7d0c318820f07","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @abc.abstractmethod"},{"line_number":40,"context_line":"    def list_revoked(self, token):"},{"line_number":41,"context_line":"        \"\"\"return the revocation events, as a list of objects."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        :param token: dictionary of values from a token, normalized for"},{"line_number":44,"context_line":"                            differences between v2 and v3. The checked values"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_81dff067","line":41,"range":{"start_line":41,"start_character":8,"end_line":41,"end_character":62},"in_reply_to":"1a95cdbc_1919b679","updated":"2016-10-07 17:17:03.000000000","message":"Done","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"9175580adf07cab86a5cfd17f0b5953fee4fb4f3","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @abc.abstractmethod"},{"line_number":40,"context_line":"    def list_revoked(self, token):"},{"line_number":41,"context_line":"        \"\"\"return the revocation events, as a list of objects."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        :param token: dictionary of values from a token, normalized for"},{"line_number":44,"context_line":"                            differences between v2 and v3. The checked values"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_1919b679","line":41,"range":{"start_line":41,"start_character":8,"end_line":41,"end_character":62},"in_reply_to":"1a95cdbc_3e65781d","updated":"2016-10-07 00:36:17.000000000","message":"++ or list_token_events","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"705fed3e8c4bce2abfa4d0ed88a7d0c318820f07","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @abc.abstractmethod"},{"line_number":40,"context_line":"    def list_revoked(self, token):"},{"line_number":41,"context_line":"        \"\"\"return the revocation events, as a list of objects."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        :param token: dictionary of values from a token, normalized for"},{"line_number":44,"context_line":"                            differences between v2 and v3. The checked values"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_61f664fa","line":41,"range":{"start_line":41,"start_character":8,"end_line":41,"end_character":62},"in_reply_to":"1a95cdbc_3e65781d","updated":"2016-10-07 17:17:03.000000000","message":"Done","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dd823d5862dea07d36bb87372a49267fa53955d6","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        \"\"\"return the revocation events, as a list of objects."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        :param last_fetch:   Time of last fetch.  Return all events newer."},{"line_number":44,"context_line":"        :param token: dictionary of values from a token, normalized for"},{"line_number":45,"context_line":"                      differences between v2 and v3. The checked values are a"},{"line_number":46,"context_line":"                      subset of the attributes of model.TokenEvent"},{"line_number":47,"context_line":"        :returns: A list of keystone.revoke.model.RevokeEvent"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a95cdbc_c7566829","line":44,"updated":"2016-10-07 18:45:00.000000000","message":"nit: Dictionary","commit_id":"5ce1c020d7c53b75a0c7f116328574973ef5d618"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"517052937d3a7f6329b9c8a91701a9708ed3bb33","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        \"\"\"return the revocation events, as a list of objects."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        :param last_fetch:   Time of last fetch.  Return all events newer."},{"line_number":44,"context_line":"        :param token: dictionary of values from a token, normalized for"},{"line_number":45,"context_line":"                      differences between v2 and v3. The checked values are a"},{"line_number":46,"context_line":"                      subset of the attributes of model.TokenEvent"},{"line_number":47,"context_line":"        :returns: A list of keystone.revoke.model.RevokeEvent"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_11565729","line":44,"updated":"2016-10-11 16:12:58.000000000","message":"In a future patch we can elaborate on this a little more to define exactly what should be in the token dictionary. But that\u0027s totally something that can be done in a follow up.","commit_id":"358a90712dfb420a83ffe1f9c19c7832441e9d32"}],"keystone/revoke/backends/sql.py":[{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"b0e9dcab0074b49079bfd62427c2e7521b50fed9","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"            session.flush()"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def list_revoked(self, token):"},{"line_number":94,"context_line":"        with sql.session_for_read() as session:"},{"line_number":95,"context_line":"            query \u003d session.query(RevocationEvent).filter("},{"line_number":96,"context_line":"                RevocationEvent.issued_before \u003e\u003d token[\u0027issued_at\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_e15e5511","line":93,"range":{"start_line":93,"start_character":4,"end_line":93,"end_character":34},"updated":"2016-10-05 20:49:51.000000000","message":"Need to add this new method to the base class:\nhttps://github.com/openstack/keystone/blob/master/keystone/revoke/backends/base.py\n\nAlso, you\u0027ll want to add release notes for this driver change.","commit_id":"f1f6a958a0fb3736eb6471b1c9c2cddf48a77a71"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"b0e9dcab0074b49079bfd62427c2e7521b50fed9","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"            session.flush()"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def list_revoked(self, token):"},{"line_number":94,"context_line":"        with sql.session_for_read() as session:"},{"line_number":95,"context_line":"            query \u003d session.query(RevocationEvent).filter("},{"line_number":96,"context_line":"                RevocationEvent.issued_before \u003e\u003d token[\u0027issued_at\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_410aa922","line":93,"range":{"start_line":93,"start_character":8,"end_line":93,"end_character":20},"updated":"2016-10-05 20:49:51.000000000","message":"nit: better method name, e.g. list_token_events or something","commit_id":"f1f6a958a0fb3736eb6471b1c9c2cddf48a77a71"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"091a515e6d4b9efcb13375789b0b499cf3057be5","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"            session.flush()"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def list_revoked(self, token):"},{"line_number":94,"context_line":"        with sql.session_for_read() as session:"},{"line_number":95,"context_line":"            query \u003d session.query(RevocationEvent).filter("},{"line_number":96,"context_line":"                RevocationEvent.issued_before \u003e\u003d token[\u0027issued_at\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_e102d50a","line":93,"range":{"start_line":93,"start_character":8,"end_line":93,"end_character":20},"in_reply_to":"1a95cdbc_410aa922","updated":"2016-10-05 21:23:58.000000000","message":"Done","commit_id":"f1f6a958a0fb3736eb6471b1c9c2cddf48a77a71"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"091a515e6d4b9efcb13375789b0b499cf3057be5","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"            session.flush()"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def list_revoked(self, token):"},{"line_number":94,"context_line":"        with sql.session_for_read() as session:"},{"line_number":95,"context_line":"            query \u003d session.query(RevocationEvent).filter("},{"line_number":96,"context_line":"                RevocationEvent.issued_before \u003e\u003d token[\u0027issued_at\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_c107991a","line":93,"range":{"start_line":93,"start_character":4,"end_line":93,"end_character":34},"in_reply_to":"1a95cdbc_e15e5511","updated":"2016-10-05 21:23:58.000000000","message":"Done","commit_id":"f1f6a958a0fb3736eb6471b1c9c2cddf48a77a71"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"66f5ba1f01c60ac69fe95e9b17f551cb803fad85","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"            session.flush()"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def list_token_events(self, token):"},{"line_number":94,"context_line":"        with sql.session_for_read() as session:"},{"line_number":95,"context_line":"            query \u003d session.query(RevocationEvent).filter("},{"line_number":96,"context_line":"                RevocationEvent.issued_before \u003e\u003d token[\u0027issued_at\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_65033843","line":93,"range":{"start_line":93,"start_character":8,"end_line":93,"end_character":25},"updated":"2016-10-12 04:15:52.000000000","message":"these can now become private by prefixing them with an underscore","commit_id":"358a90712dfb420a83ffe1f9c19c7832441e9d32"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"517052937d3a7f6329b9c8a91701a9708ed3bb33","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                user.append(RevocationEvent.user_id \u003d\u003d token[\u0027user_id\u0027])"},{"line_number":102,"context_line":"            if token[\u0027trustor_id\u0027]:"},{"line_number":103,"context_line":"                user.append(RevocationEvent.user_id \u003d\u003d token[\u0027trustor_id\u0027])"},{"line_number":104,"context_line":"            if token[\u0027trustee_id\u0027]:"},{"line_number":105,"context_line":"                user.append(RevocationEvent.user_id \u003d\u003d token[\u0027trustee_id\u0027])"},{"line_number":106,"context_line":"            if token[\u0027project_id\u0027]:"},{"line_number":107,"context_line":"                proj.append(RevocationEvent.project_id \u003d\u003d token[\u0027project_id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_6ca5f802","line":104,"updated":"2016-10-11 16:12:58.000000000","message":"Should this section be an else/if statement? Can a token have a user/trustee/trustor all populated at once? \n\n  # populate user for query\n  if \u0027user\u0027 in token:\n      user.append(RevocationEvent.user_id \u003d\u003d token[\u0027user_id\u0027])\n  elif \u0027trustor_id\u0027 in token:\n      user.append(RevocationEvent.user_id \u003d\u003d token[\u0027trustor_id\u0027])\n  elif \u0027trustee_id\u0027 in token:\n      user.append(RevocationEvent.user_id \u003d\u003d token[\u0027trustor_id\u0027])\n\n  # populate project for query if present\n  if \u0027project_id\u0027 in token:\n      proj.append(RevocationEvent.project_id \u003d\u003d token[\u0027project_id\u0027])\n \n  # populate audit information for query if present\n  if \u0027audit_id\u0027 in token:\n      audit.append(RevocationEvent.audit_id \u003d\u003d token[\u0027audit_id\u0027])","commit_id":"358a90712dfb420a83ffe1f9c19c7832441e9d32"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"90a673f6c0bac92b902b056ad31ef7fb1e1cf164","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                user.append(RevocationEvent.user_id \u003d\u003d token[\u0027user_id\u0027])"},{"line_number":102,"context_line":"            if token[\u0027trustor_id\u0027]:"},{"line_number":103,"context_line":"                user.append(RevocationEvent.user_id \u003d\u003d token[\u0027trustor_id\u0027])"},{"line_number":104,"context_line":"            if token[\u0027trustee_id\u0027]:"},{"line_number":105,"context_line":"                user.append(RevocationEvent.user_id \u003d\u003d token[\u0027trustee_id\u0027])"},{"line_number":106,"context_line":"            if token[\u0027project_id\u0027]:"},{"line_number":107,"context_line":"                proj.append(RevocationEvent.project_id \u003d\u003d token[\u0027project_id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_19f755d4","line":104,"in_reply_to":"fa6399be_47ae4a86","updated":"2016-10-11 20:38:30.000000000","message":"Ah ha - makes sense. Thanks for digging into this Richard.","commit_id":"358a90712dfb420a83ffe1f9c19c7832441e9d32"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"fb200a58154b88bca70933caa33694d3ea433472","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                user.append(RevocationEvent.user_id \u003d\u003d token[\u0027user_id\u0027])"},{"line_number":102,"context_line":"            if token[\u0027trustor_id\u0027]:"},{"line_number":103,"context_line":"                user.append(RevocationEvent.user_id \u003d\u003d token[\u0027trustor_id\u0027])"},{"line_number":104,"context_line":"            if token[\u0027trustee_id\u0027]:"},{"line_number":105,"context_line":"                user.append(RevocationEvent.user_id \u003d\u003d token[\u0027trustee_id\u0027])"},{"line_number":106,"context_line":"            if token[\u0027project_id\u0027]:"},{"line_number":107,"context_line":"                proj.append(RevocationEvent.project_id \u003d\u003d token[\u0027project_id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_47ae4a86","line":104,"in_reply_to":"fa6399be_6ca5f802","updated":"2016-10-11 17:59:45.000000000","message":"You have some cases which have all three set where the revocation event can use either of the three for their user_id field. In some cases, the token can have all three set where user_id and trustee are the same but trustor is different and vice versa. For this reason, there is no token field that will always take precedence as the revocation event user_id; it can be either user_id, trustor_id, or trustee_id","commit_id":"358a90712dfb420a83ffe1f9c19c7832441e9d32"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"66f5ba1f01c60ac69fe95e9b17f551cb803fad85","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            events \u003d [revoke_model.RevokeEvent(**e.to_dict()) for e in query]"},{"line_number":114,"context_line":"            return events"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def list_last_fetch_events(self, last_fetch\u003dNone):"},{"line_number":117,"context_line":"        with sql.session_for_read() as session:"},{"line_number":118,"context_line":"            query \u003d session.query(RevocationEvent).order_by("},{"line_number":119,"context_line":"                RevocationEvent.revoked_at)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_85fe8c36","line":116,"range":{"start_line":116,"start_character":8,"end_line":116,"end_character":30},"updated":"2016-10-12 04:15:52.000000000","message":"same","commit_id":"358a90712dfb420a83ffe1f9c19c7832441e9d32"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"33601bff30ef9acbf2b5f46339bc8c339f74263a","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            query \u003d query.filter(sqlalchemy.and_(sqlalchemy.or_(*user),"},{"line_number":111,"context_line":"                                                 sqlalchemy.or_(*proj),"},{"line_number":112,"context_line":"                                                 sqlalchemy.or_(*audit)))"},{"line_number":113,"context_line":"            events \u003d [revoke_model.RevokeEvent(**e.to_dict()) for e in query]"},{"line_number":114,"context_line":"            return events"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def _list_last_fetch_events(self, last_fetch\u003dNone):"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_6953b5e2","line":113,"updated":"2016-10-13 19:50:34.000000000","message":"(nit) no reason for a temp variable here - just return it","commit_id":"9e84371461831880ce5736e9888c7d9648e3a77b"}],"keystone/revoke/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d86ca9ef8edbb4e5ffb7989b4c0ad33374713bb9","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    def check_token(self, token):"},{"line_number":197,"context_line":"        \"\"\"Check the values from a token against the revocation list."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        :param token_values: dictionary of values from a token, normalized for"},{"line_number":200,"context_line":"                             differences between v2 and v3. The checked values"},{"line_number":201,"context_line":"                             are a subset of the attributes of model.TokenEvent"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a95cdbc_e2c76443","line":199,"range":{"start_line":199,"start_character":15,"end_line":199,"end_character":27},"updated":"2016-10-05 04:46:55.000000000","message":"this needs updating","commit_id":"a7dd963250ac3723a83fa743fdf6c2836e9763d4"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"b0e9dcab0074b49079bfd62427c2e7521b50fed9","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        :raises keystone.exception.TokenNotFound: If the token is invalid."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        if revoke_model.is_revoked(self.list_revoked(token), token):"},{"line_number":207,"context_line":"            raise exception.TokenNotFound(_(\u0027Failed to validate token\u0027))"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def revoke(self, event):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_c14cf972","line":206,"range":{"start_line":206,"start_character":35,"end_line":206,"end_character":59},"updated":"2016-10-05 20:49:51.000000000","message":"nit: prefer this calls the driver explicitly, e.g. self.driver.list_revoked(token)","commit_id":"f1f6a958a0fb3736eb6471b1c9c2cddf48a77a71"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"091a515e6d4b9efcb13375789b0b499cf3057be5","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        :raises keystone.exception.TokenNotFound: If the token is invalid."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        if revoke_model.is_revoked(self.list_revoked(token), token):"},{"line_number":207,"context_line":"            raise exception.TokenNotFound(_(\u0027Failed to validate token\u0027))"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def revoke(self, event):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_810d9140","line":206,"range":{"start_line":206,"start_character":35,"end_line":206,"end_character":59},"in_reply_to":"1a95cdbc_c14cf972","updated":"2016-10-05 21:23:58.000000000","message":"Done","commit_id":"f1f6a958a0fb3736eb6471b1c9c2cddf48a77a71"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8960ae86aade564048bd4cec1f3fc65ecb6d39b6","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        :raises keystone.exception.TokenNotFound: If the token is invalid."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        if revoke_model.is_revoked(self.list_events(), token_values):"},{"line_number":207,"context_line":"            raise exception.TokenNotFound(_(\u0027Failed to validate token\u0027))"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def revoke(self, event):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_7e39c0f1","side":"PARENT","line":206,"range":{"start_line":206,"start_character":40,"end_line":206,"end_character":51},"updated":"2016-10-07 00:28:31.000000000","message":"is list_events ever used now? why keep it around? if you\u0027re worried about breaking people with a custom driver then issue a deprecation warning in the method itself, it can be removed in 1 cycle","commit_id":"de81ad5b055b3e2bfe4a821e9aa940180ff4a7aa"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"9175580adf07cab86a5cfd17f0b5953fee4fb4f3","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        :raises keystone.exception.TokenNotFound: If the token is invalid."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        if revoke_model.is_revoked(self.list_events(), token_values):"},{"line_number":207,"context_line":"            raise exception.TokenNotFound(_(\u0027Failed to validate token\u0027))"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def revoke(self, event):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_995a2629","side":"PARENT","line":206,"range":{"start_line":206,"start_character":40,"end_line":206,"end_character":51},"in_reply_to":"1a95cdbc_7e39c0f1","updated":"2016-10-07 00:36:17.000000000","message":"list_events is used by the controller (API method), so we need to keep it.","commit_id":"de81ad5b055b3e2bfe4a821e9aa940180ff4a7aa"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"705fed3e8c4bce2abfa4d0ed88a7d0c318820f07","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        :raises keystone.exception.TokenNotFound: If the token is invalid."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        if revoke_model.is_revoked(self.list_events(), token_values):"},{"line_number":207,"context_line":"            raise exception.TokenNotFound(_(\u0027Failed to validate token\u0027))"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def revoke(self, event):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_01d2005c","side":"PARENT","line":206,"in_reply_to":"1a95cdbc_87a54548","updated":"2016-10-07 17:17:03.000000000","message":"Done","commit_id":"de81ad5b055b3e2bfe4a821e9aa940180ff4a7aa"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fbf2141e76f686b0d94ca883e09f37a4fbb9474c","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        :raises keystone.exception.TokenNotFound: If the token is invalid."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        if revoke_model.is_revoked(self.list_events(), token_values):"},{"line_number":207,"context_line":"            raise exception.TokenNotFound(_(\u0027Failed to validate token\u0027))"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def revoke(self, event):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_87a54548","side":"PARENT","line":206,"in_reply_to":"1a95cdbc_995a2629","updated":"2016-10-07 16:35:08.000000000","message":"Can list_events be modified to handle both cases?","commit_id":"de81ad5b055b3e2bfe4a821e9aa940180ff4a7aa"}],"keystone/tests/unit/test_revoke.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"32e6b9331e373367ac0735730b56efcc5c11a537","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        self.assertEqual(0,"},{"line_number":130,"context_line":"                         len(self.revoke_api.list_events(last_fetch\u003dfuture)))"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_list_revoked(self):"},{"line_number":133,"context_line":"        token \u003d _sample_blank_token()"},{"line_number":134,"context_line":"        token[\u0027user_id\u0027] \u003d 1"},{"line_number":135,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003d1)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_30ba49c1","line":132,"range":{"start_line":132,"start_character":8,"end_line":132,"end_character":25},"updated":"2016-10-05 19:33:52.000000000","message":"we need tests to cover all types of possible filters (user_id, domain_id, project_id, ...) at the list_revoked method, some combinations are also valuable (user_id combined with project_id, for example).","commit_id":"f1f6a958a0fb3736eb6471b1c9c2cddf48a77a71"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"0df3d4bc09308532f39e7550b8d7288f4c24d375","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        self.assertEqual(0,"},{"line_number":130,"context_line":"                         len(self.revoke_api.list_events(last_fetch\u003dfuture)))"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_list_revoked(self):"},{"line_number":133,"context_line":"        token \u003d _sample_blank_token()"},{"line_number":134,"context_line":"        token[\u0027user_id\u0027] \u003d 1"},{"line_number":135,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003d1)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_81b11192","line":132,"range":{"start_line":132,"start_character":8,"end_line":132,"end_character":25},"in_reply_to":"1a95cdbc_30ba49c1","updated":"2016-10-05 21:10:10.000000000","message":"Done","commit_id":"f1f6a958a0fb3736eb6471b1c9c2cddf48a77a71"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"43293ee4b5ea1d0669f6448cdf8e944c8e41dab6","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        self.assertEqual(0,"},{"line_number":130,"context_line":"                         len(self.revoke_api.list_events(last_fetch\u003dfuture)))"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_list_revoked(self):"},{"line_number":133,"context_line":"        token \u003d _sample_blank_token()"},{"line_number":134,"context_line":"        token[\u0027user_id\u0027] \u003d 1"},{"line_number":135,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003d1)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_4b0ac822","line":132,"range":{"start_line":132,"start_character":8,"end_line":132,"end_character":25},"in_reply_to":"1a95cdbc_30ba49c1","updated":"2016-10-05 19:41:14.000000000","message":"domain_id? These things were not covered with list_events which this technically does the same thing. Only a few constraints difference between that method and this one","commit_id":"f1f6a958a0fb3736eb6471b1c9c2cddf48a77a71"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"32e6b9331e373367ac0735730b56efcc5c11a537","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    def test_list_revoked(self):"},{"line_number":133,"context_line":"        token \u003d _sample_blank_token()"},{"line_number":134,"context_line":"        token[\u0027user_id\u0027] \u003d 1"},{"line_number":135,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003d1)"},{"line_number":136,"context_line":"        self.assertEqual(1, len(self.revoke_api.list_revoked(token)))"},{"line_number":137,"context_line":"        token[\u0027user_id\u0027] \u003d 2"},{"line_number":138,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003d2)"},{"line_number":139,"context_line":"        self.assertEqual(1, len(self.revoke_api.list_revoked(token)))"},{"line_number":140,"context_line":"        token[\u0027user_id\u0027] \u003d None"},{"line_number":141,"context_line":"        self.assertEqual(0, len(self.revoke_api.list_revoked(token)))"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_907ddd1e","line":139,"range":{"start_line":135,"start_character":0,"end_line":139,"end_character":69},"updated":"2016-10-05 19:33:52.000000000","message":"for this ones, the content of the list should also be verified.","commit_id":"f1f6a958a0fb3736eb6471b1c9c2cddf48a77a71"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"32e6b9331e373367ac0735730b56efcc5c11a537","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003dNone)"},{"line_number":146,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003dNone)"},{"line_number":147,"context_line":"        self.assertEqual(2, len(self.revoke_api.list_revoked(token)))"},{"line_number":148,"context_line":"        future \u003d timeutils.utcnow() + datetime.timedelta(seconds\u003d1000)"},{"line_number":149,"context_line":"        token[\u0027issued_at\u0027] \u003d future"},{"line_number":150,"context_line":"        self.assertEqual(0,"},{"line_number":151,"context_line":"                         len(self.revoke_api.list_revoked(token)))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_70ebf1b0","line":148,"range":{"start_line":148,"start_character":17,"end_line":148,"end_character":35},"updated":"2016-10-05 19:33:52.000000000","message":"you need to mock the time here, although we do things like that in our tests. Look for \"freezegun\" usages in our code :)","commit_id":"f1f6a958a0fb3736eb6471b1c9c2cddf48a77a71"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"b0e9dcab0074b49079bfd62427c2e7521b50fed9","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003dNone)"},{"line_number":146,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003dNone)"},{"line_number":147,"context_line":"        self.assertEqual(2, len(self.revoke_api.list_revoked(token)))"},{"line_number":148,"context_line":"        future \u003d timeutils.utcnow() + datetime.timedelta(seconds\u003d1000)"},{"line_number":149,"context_line":"        token[\u0027issued_at\u0027] \u003d future"},{"line_number":150,"context_line":"        self.assertEqual(0,"},{"line_number":151,"context_line":"                         len(self.revoke_api.list_revoked(token)))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a95cdbc_81de716b","line":148,"range":{"start_line":148,"start_character":17,"end_line":148,"end_character":35},"in_reply_to":"1a95cdbc_70ebf1b0","updated":"2016-10-05 20:49:51.000000000","message":"I think freezegun would be overkill here. I like just mocking the issued_at time.","commit_id":"f1f6a958a0fb3736eb6471b1c9c2cddf48a77a71"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"448c3846b6b0e97e92ec99125858bdc0bfad2af6","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        future \u003d timeutils.utcnow() + datetime.timedelta(seconds\u003d1000)"},{"line_number":129,"context_line":"        self.assertEqual(0,"},{"line_number":130,"context_line":"                         len(self.revoke_api.list_events(last_fetch\u003dfuture)))"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_list_revoked_user(self):"},{"line_number":133,"context_line":"        token \u003d _sample_blank_token()"},{"line_number":134,"context_line":"        token[\u0027user_id\u0027] \u003d 1"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_c8f1796c","line":131,"updated":"2016-10-05 22:19:24.000000000","message":"still missing tests that combine filters","commit_id":"d91733fdf6a33190add6c943db3f55b2c15fc474"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"94b4b4d7573dd7fab0e4300bfb4298ada3c0f8c1","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        future \u003d timeutils.utcnow() + datetime.timedelta(seconds\u003d1000)"},{"line_number":129,"context_line":"        self.assertEqual(0,"},{"line_number":130,"context_line":"                         len(self.revoke_api.list_events(last_fetch\u003dfuture)))"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_list_revoked_user(self):"},{"line_number":133,"context_line":"        token \u003d _sample_blank_token()"},{"line_number":134,"context_line":"        token[\u0027user_id\u0027] \u003d 1"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_a14a2c24","line":131,"in_reply_to":"1a95cdbc_c8f1796c","updated":"2016-10-07 17:16:57.000000000","message":"Done","commit_id":"d91733fdf6a33190add6c943db3f55b2c15fc474"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"448c3846b6b0e97e92ec99125858bdc0bfad2af6","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        token \u003d _sample_blank_token()"},{"line_number":134,"context_line":"        token[\u0027user_id\u0027] \u003d 1"},{"line_number":135,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003d1)"},{"line_number":136,"context_line":"        self.assertEqual(1, len(self.revoke_api.list_revoked(token)))"},{"line_number":137,"context_line":"        token[\u0027user_id\u0027] \u003d 2"},{"line_number":138,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003d2)"},{"line_number":139,"context_line":"        self.assertEqual(1, len(self.revoke_api.list_revoked(token)))"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_4869e924","line":136,"range":{"start_line":136,"start_character":13,"end_line":136,"end_character":24},"updated":"2016-10-05 22:19:24.000000000","message":"asserting the size is not enough, you need to check if the listed revoke events are from the token. This comment also applies for the other asserts in this file.","commit_id":"d91733fdf6a33190add6c943db3f55b2c15fc474"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"94b4b4d7573dd7fab0e4300bfb4298ada3c0f8c1","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        token \u003d _sample_blank_token()"},{"line_number":134,"context_line":"        token[\u0027user_id\u0027] \u003d 1"},{"line_number":135,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003d1)"},{"line_number":136,"context_line":"        self.assertEqual(1, len(self.revoke_api.list_revoked(token)))"},{"line_number":137,"context_line":"        token[\u0027user_id\u0027] \u003d 2"},{"line_number":138,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003d2)"},{"line_number":139,"context_line":"        self.assertEqual(1, len(self.revoke_api.list_revoked(token)))"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_e150b4d6","line":136,"range":{"start_line":136,"start_character":13,"end_line":136,"end_character":24},"in_reply_to":"1a95cdbc_4869e924","updated":"2016-10-07 17:16:57.000000000","message":"Done","commit_id":"d91733fdf6a33190add6c943db3f55b2c15fc474"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"448c3846b6b0e97e92ec99125858bdc0bfad2af6","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003dNone)"},{"line_number":169,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003dNone)"},{"line_number":170,"context_line":"        self.assertEqual(2, len(self.revoke_api.list_revoked(token)))"},{"line_number":171,"context_line":"        future \u003d timeutils.utcnow() + datetime.timedelta(seconds\u003d1000)"},{"line_number":172,"context_line":"        token[\u0027issued_at\u0027] \u003d future"},{"line_number":173,"context_line":"        self.assertEqual(0,"},{"line_number":174,"context_line":"                         len(self.revoke_api.list_revoked(token)))"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a95cdbc_c8ca591a","line":171,"range":{"start_line":171,"start_character":17,"end_line":171,"end_character":35},"updated":"2016-10-05 22:19:24.000000000","message":"still think mocking the time is the correct approach as commented in a previous patchset","commit_id":"d91733fdf6a33190add6c943db3f55b2c15fc474"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"109476042c4b4bb97a31f43747971f9176b61552","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            events.remove(target)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"class RevokeListTests(object):"},{"line_number":308,"context_line":"    def setUp(self):"},{"line_number":309,"context_line":"        super(RevokeListTests, self).setUp()"},{"line_number":310,"context_line":"        self.events \u003d []"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_d7d0fff8","line":307,"range":{"start_line":307,"start_character":22,"end_line":307,"end_character":28},"updated":"2016-10-06 21:27:51.000000000","message":"Did you inadvertently change this?","commit_id":"4b01d976b9d3bfab4820d26104ba81276a983502"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fbf2141e76f686b0d94ca883e09f37a4fbb9474c","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.assertEqual(0, len(self.revoke_api.list_revoked(token)))"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_list_revoked_project(self):"},{"line_number":164,"context_line":"        Rev \u003d sql.Revoke()"},{"line_number":165,"context_line":"        events \u003d []"},{"line_number":166,"context_line":"        token \u003d _sample_blank_token()"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_c2057b11","line":164,"updated":"2016-10-07 16:35:08.000000000","message":"nit: what if we named this according to existing convention? \n\n  revocation_backend \u003d sql.Revoke()","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"705fed3e8c4bce2abfa4d0ed88a7d0c318820f07","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.assertEqual(0, len(self.revoke_api.list_revoked(token)))"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def test_list_revoked_project(self):"},{"line_number":164,"context_line":"        Rev \u003d sql.Revoke()"},{"line_number":165,"context_line":"        events \u003d []"},{"line_number":166,"context_line":"        token \u003d _sample_blank_token()"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_41c888a8","line":164,"in_reply_to":"1a95cdbc_c2057b11","updated":"2016-10-07 17:17:03.000000000","message":"Done","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fbf2141e76f686b0d94ca883e09f37a4fbb9474c","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        events \u003d []"},{"line_number":166,"context_line":"        token \u003d _sample_blank_token()"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        token[\u0027project_id\u0027] \u003d 1"},{"line_number":169,"context_line":"        add_event(events, revoke_model.RevokeEvent(project_id\u003d1))"},{"line_number":170,"context_line":"        Rev.revoke(revoke_model.RevokeEvent(project_id\u003d1))"},{"line_number":171,"context_line":"        self._assertTokenRevoked(events, token)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_0223e3a7","line":168,"updated":"2016-10-07 16:35:08.000000000","message":"Any reason to use number instead of random uuids? \n\n  token[\u0027project_id\u0027] \u003d uuid.uuid4().hex","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"705fed3e8c4bce2abfa4d0ed88a7d0c318820f07","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        events \u003d []"},{"line_number":166,"context_line":"        token \u003d _sample_blank_token()"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        token[\u0027project_id\u0027] \u003d 1"},{"line_number":169,"context_line":"        add_event(events, revoke_model.RevokeEvent(project_id\u003d1))"},{"line_number":170,"context_line":"        Rev.revoke(revoke_model.RevokeEvent(project_id\u003d1))"},{"line_number":171,"context_line":"        self._assertTokenRevoked(events, token)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_61cd84b6","line":168,"in_reply_to":"1a95cdbc_0223e3a7","updated":"2016-10-07 17:17:03.000000000","message":"Done","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fbf2141e76f686b0d94ca883e09f37a4fbb9474c","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        events \u003d []"},{"line_number":184,"context_line":"        token \u003d _sample_blank_token()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        token[\u0027audit_id\u0027] \u003d 1"},{"line_number":187,"context_line":"        add_event(events, revoke_model.RevokeEvent(audit_id\u003dtoken[\u0027audit_id\u0027]))"},{"line_number":188,"context_line":"        self.revoke_api.revoke_by_audit_id(audit_id\u003dtoken[\u0027audit_id\u0027])"},{"line_number":189,"context_line":"        self._assertTokenRevoked(events, token)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_c2a1fbf9","line":186,"updated":"2016-10-07 16:35:08.000000000","message":"Why not ask for a random_urlsafe_str() from the token provider - since that\u0027s pretty much an audit_id (and we already have the token provider available to us)\n\n  token[\u0027audit_id\u0027] \u003d provider.random_urlsafe_str()","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"705fed3e8c4bce2abfa4d0ed88a7d0c318820f07","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        events \u003d []"},{"line_number":184,"context_line":"        token \u003d _sample_blank_token()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        token[\u0027audit_id\u0027] \u003d 1"},{"line_number":187,"context_line":"        add_event(events, revoke_model.RevokeEvent(audit_id\u003dtoken[\u0027audit_id\u0027]))"},{"line_number":188,"context_line":"        self.revoke_api.revoke_by_audit_id(audit_id\u003dtoken[\u0027audit_id\u0027])"},{"line_number":189,"context_line":"        self._assertTokenRevoked(events, token)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_81c61098","line":186,"in_reply_to":"1a95cdbc_c2a1fbf9","updated":"2016-10-07 17:17:03.000000000","message":"Done","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fbf2141e76f686b0d94ca883e09f37a4fbb9474c","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        # create token that sets key/value filters in list_revoked"},{"line_number":214,"context_line":"        token[\u0027user_id\u0027] \u003d 1"},{"line_number":215,"context_line":"        token[\u0027project_id\u0027] \u003d 1"},{"line_number":216,"context_line":"        token[\u0027audit_id\u0027] \u003d 1"},{"line_number":217,"context_line":"        # revoke event and then verify that that there is only one revocation"},{"line_number":218,"context_line":"        # and verify the only revoked event is the token"},{"line_number":219,"context_line":"        add_event(events, revoke_model.RevokeEvent(user_id\u003d1, project_id\u003d1,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_62b7473a","line":216,"updated":"2016-10-07 16:35:08.000000000","message":"Same comment here as above.","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"705fed3e8c4bce2abfa4d0ed88a7d0c318820f07","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        # create token that sets key/value filters in list_revoked"},{"line_number":214,"context_line":"        token[\u0027user_id\u0027] \u003d 1"},{"line_number":215,"context_line":"        token[\u0027project_id\u0027] \u003d 1"},{"line_number":216,"context_line":"        token[\u0027audit_id\u0027] \u003d 1"},{"line_number":217,"context_line":"        # revoke event and then verify that that there is only one revocation"},{"line_number":218,"context_line":"        # and verify the only revoked event is the token"},{"line_number":219,"context_line":"        add_event(events, revoke_model.RevokeEvent(user_id\u003d1, project_id\u003d1,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_a1c30c88","line":216,"in_reply_to":"1a95cdbc_62b7473a","updated":"2016-10-07 17:17:03.000000000","message":"Done","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fbf2141e76f686b0d94ca883e09f37a4fbb9474c","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                                                        audit_id\u003d1))"},{"line_number":224,"context_line":"        self._assertTokenRevoked(events, token)"},{"line_number":225,"context_line":"        self.assertEqual(1, len(self.revoke_api.list_revoked(token)))"},{"line_number":226,"context_line":"        # If a token has None values which the event contains it shouldnt match"},{"line_number":227,"context_line":"        # and not be revoked"},{"line_number":228,"context_line":"        token[\u0027user_id\u0027] \u003d None"},{"line_number":229,"context_line":"        token[\u0027project_id\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_e2f0b7ff","line":226,"updated":"2016-10-07 16:35:08.000000000","message":"shouldn\u0027t*","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"705fed3e8c4bce2abfa4d0ed88a7d0c318820f07","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                                                        audit_id\u003d1))"},{"line_number":224,"context_line":"        self._assertTokenRevoked(events, token)"},{"line_number":225,"context_line":"        self.assertEqual(1, len(self.revoke_api.list_revoked(token)))"},{"line_number":226,"context_line":"        # If a token has None values which the event contains it shouldnt match"},{"line_number":227,"context_line":"        # and not be revoked"},{"line_number":228,"context_line":"        token[\u0027user_id\u0027] \u003d None"},{"line_number":229,"context_line":"        token[\u0027project_id\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_228b7fc4","line":226,"in_reply_to":"1a95cdbc_e2f0b7ff","updated":"2016-10-07 17:17:03.000000000","message":"punctuation nazi ;)","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fbf2141e76f686b0d94ca883e09f37a4fbb9474c","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        token[\u0027project_id\u0027] \u003d 2"},{"line_number":235,"context_line":"        self._assertTokenNotRevoked(events, token)"},{"line_number":236,"context_line":"        self.assertEqual(0, len(self.revoke_api.list_revoked(token)))"},{"line_number":237,"context_line":"        # Demonstrate for audit as well to show if even one non None value in"},{"line_number":238,"context_line":"        # dict and corresponding non None value in event. It wont match it."},{"line_number":239,"context_line":"        token[\u0027projet_id\u0027] \u003d 1"},{"line_number":240,"context_line":"        token[\u0027audit_id\u0027] \u003d 2"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_82b9b317","line":237,"updated":"2016-10-07 16:35:08.000000000","message":"nit: s/non None/populated/ ?","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dd823d5862dea07d36bb87372a49267fa53955d6","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self._assertTokenRevoked(events, token)"},{"line_number":152,"context_line":"        self.assertEqual(1, len(revocation_backend.list_events(token\u003dtoken)))"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        token[\u0027user_id\u0027] \u003d uuid.uuid4().hex"},{"line_number":155,"context_line":"        add_event(events, revoke_model.RevokeEvent(user_id\u003dtoken[\u0027user_id\u0027]))"},{"line_number":156,"context_line":"        self.revoke_api.revoke_by_user(user_id\u003dtoken[\u0027user_id\u0027])"},{"line_number":157,"context_line":"        self._assertTokenRevoked(events, token)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a95cdbc_6acd59b6","line":154,"updated":"2016-10-07 18:45:00.000000000","message":"Curious what the benefit of overriding the user_id is here. Would it make sense to just get a new blank token? This is pretty much the same test illustrated in lines 148 - 152 (I could totally be missing something though!).","commit_id":"5ce1c020d7c53b75a0c7f116328574973ef5d618"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dd823d5862dea07d36bb87372a49267fa53955d6","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            revoke_model.RevokeEvent(project_id\u003dtoken[\u0027project_id\u0027]))"},{"line_number":174,"context_line":"        self._assertTokenRevoked(events, token)"},{"line_number":175,"context_line":"        self.assertEqual(1, len(revocation_backend.list_events(token\u003dtoken)))"},{"line_number":176,"context_line":"        token[\u0027project_id\u0027] \u003d uuid.uuid4().hex"},{"line_number":177,"context_line":"        add_event(events,"},{"line_number":178,"context_line":"                  revoke_model.RevokeEvent(project_id\u003dtoken[\u0027project_id\u0027]))"},{"line_number":179,"context_line":"        revocation_backend.revoke("}],"source_content_type":"text/x-python","patch_set":18,"id":"1a95cdbc_ea67a9b4","line":176,"updated":"2016-10-07 18:45:00.000000000","message":"This is the same pattern noted in the comment above.","commit_id":"5ce1c020d7c53b75a0c7f116328574973ef5d618"}],"releasenotes/notes/revokelist-8319859b77ba2e65.yaml":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fbf2141e76f686b0d94ca883e09f37a4fbb9474c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"  ``list_events()`` in the revoke backend in order to reduce the revocation"},{"line_number":5,"context_line":"  event list and improve performance. Therefore, ``list_revoked()`` has been"},{"line_number":6,"context_line":"  added to the revoke backend driver. If you have a custom implementation for"},{"line_number":7,"context_line":"  the revoke driver, you will need to implement this new method."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"1a95cdbc_8250d3d5","line":7,"updated":"2016-10-07 16:35:08.000000000","message":"What about people who have custom implementations that use the revoke_api? Is there a recommended method they should use? What are the benefits or drawbacks of each?","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"705fed3e8c4bce2abfa4d0ed88a7d0c318820f07","unresolved":false,"context_lines":[{"line_number":4,"context_line":"  ``list_events()`` in the revoke backend in order to reduce the revocation"},{"line_number":5,"context_line":"  event list and improve performance. Therefore, ``list_revoked()`` has been"},{"line_number":6,"context_line":"  added to the revoke backend driver. If you have a custom implementation for"},{"line_number":7,"context_line":"  the revoke driver, you will need to implement this new method."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"1a95cdbc_013920a4","line":7,"in_reply_to":"1a95cdbc_8250d3d5","updated":"2016-10-07 17:17:03.000000000","message":"Done","commit_id":"db0b6ab1c0dc56bf28d07660cf96df10bd9c0650"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"dfc8249bbb32b70d7438a1f3ba38b87bb37f62ca","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"- Token validation has changed to add the use ``list_token_events()`` called by"},{"line_number":4,"context_line":"  ``list_events()`` in the revoke backend in order to reduce the revocation"},{"line_number":5,"context_line":"  event list and improve performance. Therefore, ``list_token_events()`` has"},{"line_number":6,"context_line":"  been added to the revoke backend driver which is called by ``list_events()``."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"1a95cdbc_44db364f","line":3,"range":{"start_line":3,"start_character":46,"end_line":3,"end_character":69},"updated":"2016-10-07 17:49:28.000000000","message":"You haven\u0027t added a new method, only an additional parameter. So you just need to say something like: \"Token validation has changed to only validate events relevant to the token. Therefore, the method signature for the ``list_events`` method in the revoke backend has changed to...","commit_id":"cc95d910399629adf16b6fb285db4ed689fc1676"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"dfc8249bbb32b70d7438a1f3ba38b87bb37f62ca","unresolved":false,"context_lines":[{"line_number":4,"context_line":"  ``list_events()`` in the revoke backend in order to reduce the revocation"},{"line_number":5,"context_line":"  event list and improve performance. Therefore, ``list_token_events()`` has"},{"line_number":6,"context_line":"  been added to the revoke backend driver which is called by ``list_events()``."},{"line_number":7,"context_line":"  If you have a custom implementation for the revoke driver, you will need to "},{"line_number":8,"context_line":"  implement the ``list_token_events()`` method."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"1a95cdbc_4456d6ce","line":7,"range":{"start_line":7,"start_character":77,"end_line":7,"end_character":78},"updated":"2016-10-07 17:49:28.000000000","message":"extra space","commit_id":"cc95d910399629adf16b6fb285db4ed689fc1676"}]}
