)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"79700daab73407fd89212481074b06e656f6e995","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add debug logging to revocation event checking"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previously, the revocation matching engine was basically a black box"},{"line_number":10,"context_line":"that seemed to mysteriously match some tokens and not others, and it was"},{"line_number":11,"context_line":"difficult to understand why an event would match a given token at a"},{"line_number":12,"context_line":"glance. Fixed."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9ad45d7e_4224f8c3","line":10,"range":{"start_line":9,"start_character":12,"end_line":10,"end_character":60},"updated":"2016-08-10 21:38:36.000000000","message":"++","commit_id":"712acd81e8e1efe9f702c465758d3ee021264300"}],"keystone/models/revoke_model.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"00657e12aa7b44715938ffe430f98d85374aa9b9","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                  \u0027created.\u0027)"},{"line_number":255,"context_line":"        return False"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    LOG.debug(\u0027All attributes in the revocation event are in the token.\u0027)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    return True"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_2d80d5f6","line":257,"updated":"2016-08-10 21:43:53.000000000","message":"It would be useful to log the event attributes and token attributes (if populated).","commit_id":"712acd81e8e1efe9f702c465758d3ee021264300"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1f1f27ad22f8d42d4ea252a2a49cc960f4deea75","unresolved":false,"context_lines":[{"line_number":301,"context_line":"    if LOG.logger.getEffectiveLevel() \u003c\u003d log.DEBUG:"},{"line_number":302,"context_line":"        # The string formatting here needs to be conditional, so that the"},{"line_number":303,"context_line":"        # extra work can be skipped if DEBUG logs are not actually being"},{"line_number":304,"context_line":"        # written anywhere."},{"line_number":305,"context_line":"        attrs \u003d \u0027, \u0027.join(\u0027%s\u003d%s\u0027 % (attr, getattr(event, attr))"},{"line_number":306,"context_line":"                          for attr in dir(event)"},{"line_number":307,"context_line":"                          if getattr(event, attr) is not None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_2f25e8ad","line":304,"updated":"2016-08-12 19:44:39.000000000","message":"We should clean up the output a little:\n\nInstead of output like:\n  (__class__\u003d\u003cclass \u0027keystone.models.revoke_model.RevokeEvent\u0027\u003e, __delattr__\u003d\u003cmethod-wrapper \u0027__delattr__\u0027 of RevokeEvent object at 0x7f42beacaf50\u003e, __dict__\u003d{\u0027\nrevoked_at\u0027: datetime.datetime(2016, 8, 12, 19, 29, 35, 472293), \u0027access_token_id\u0027: None, \u0027domain_id\u0027: None, \u0027issued_before\u0027: datetime.datetime(2016, 8, 12, 19, 29, 35, 472293),\n \u0027domain_scope_id\u0027: None, \u0027project_id\u0027: None, \u0027audit_id\u0027: None, \u0027audit_chain_id\u0027: None, \u0027user_id\u0027: u\u0027db3f9199ec804fe8a410f182490970d0\u0027, \u0027trust_id\u0027: None, \u0027role_id\u0027: None, \u0027expir\nes_at\u0027: None, \u0027consumer_id\u0027: None}, __format__\u003d\u003cbuilt-in method __format__ of RevokeEvent object at 0x7f42beacaf50\u003e, __getattribute__\u003d\u003cmethod-wrapper \u0027__getattribute__\u0027 of Revok\neEvent object at 0x7f42beacaf50\u003e, __hash__\u003d\u003cmethod-wrapper \u0027__hash__\u0027 of RevokeEvent object at 0x7f42beacaf50\u003e, __init__\u003d\u003cbound method RevokeEvent.__init__ of \u003ckeystone.models.r\nevoke_model.RevokeEvent object at 0x7f42beacaf50\u003e\u003e, __module__\u003dkeystone.models.revoke_model, __new__\u003d\u003cbuilt-in method __new__ of type object at 0x905b80\u003e, __reduce__\u003d\u003cbuilt-in m\nethod __reduce__ of RevokeEvent object at 0x7f42beacaf50\u003e, __reduce_ex__\u003d\u003cbuilt-in method __reduce_ex__ of RevokeEvent object at 0x7f42beacaf50\u003e, __repr__\u003d\u003cmethod-wrapper \u0027__rep\nr__\u0027 of RevokeEvent object at 0x7f42beacaf50\u003e, __setattr__\u003d\u003cmethod-wrapper \u0027__setattr__\u0027 of RevokeEvent object at 0x7f42beacaf50\u003e, __sizeof__\u003d\u003cbuilt-in method __sizeof__ of Revo\nkeEvent object at 0x7f42beacaf50\u003e, __slotnames__\u003d[], __str__\u003d\u003cmethod-wrapper \u0027__str__\u0027 of RevokeEvent object at 0x7f42beacaf50\u003e, __subclasshook__\u003d\u003cbuilt-in method __subclasshook\n__ of type object at 0x1f5c1c0\u003e, issued_before\u003d2016-08-12 19:29:35.472293, key_for_name\u003d\u003cbound method RevokeEvent.key_for_name of \u003ckeystone.models.revoke_model.RevokeEvent objec\nt at 0x7f42beacaf50\u003e\u003e, revoked_at\u003d2016-08-12 19:29:35.472293, to_dict\u003d\u003cbound method RevokeEvent.to_dict of \u003ckeystone.models.revoke_model.RevokeEvent object at 0x7f42beacaf50\u003e\u003e,\nuser_id\u003ddb3f9199ec804fe8a410f182490970d0)\n\nI think something more like:\n\n(revoked_at\u003d2016-08-12T19:29:35.472293Z, user_id\u003ddb3f9199ec804fe8a410f182490970d0, issued_before\u003d2016-08-12T19:29:35.472293Z)\n\nwould be more readable","commit_id":"624024d91fe5f89666ea461d63347b4bde951b2f"}]}
