)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"842cf015bbaf07523b3f13167af2ccef67debef1","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Consolidate @notifications.internal into Audit"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change allows us to send internal notifications inline instead of invoking"},{"line_number":10,"context_line":"them from decorated methods."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I659546b2cdd27bedaa694cb009d371f504765a72"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5aef4532_fa0cc4ed","line":9,"updated":"2016-03-09 18:13:04.000000000","message":"(nit) length","commit_id":"bc64b993f0333a59e7dabcf6c6cef85b526ee6ea"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"628a2bb612fd90a8653142961764088e2ad582dd","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Consolidate @notifications.internal into Audit"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change allows us to send internal notifications inline instead of invoking"},{"line_number":10,"context_line":"them from decorated methods."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I659546b2cdd27bedaa694cb009d371f504765a72"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5aef4532_a5fb34c0","line":9,"in_reply_to":"5aef4532_fa0cc4ed","updated":"2016-03-09 21:09:44.000000000","message":"Nit:  So it would be helpful to mention in the commit statement what it is motivating the need to have an inline invocation option available.  While in general I understand that the inline option is more flexible with regards to placement than the decorator, if you look at all the examples you added it does not appear there existed a good example of you using the inline option in way that the existing decorator would not have worked.","commit_id":"bc64b993f0333a59e7dabcf6c6cef85b526ee6ea"}],"keystone/assignment/core.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4bafe5a5eb2039be14474ff9e7e5c3f661eef725","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            role_id, user_id\u003duser_id, project_id\u003dtenant_id)"},{"line_number":308,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _emit_invalidate_user_token_persistence(self, user_id):"},{"line_number":311,"context_line":"        notifications.Audit.internal("},{"line_number":312,"context_line":"            notifications.INVALIDATE_USER_TOKEN_PERSISTENCE, user_id"},{"line_number":313,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":2,"id":"5aef4532_21e84a10","line":310,"updated":"2016-03-07 16:59:06.000000000","message":"This issue here is that not if like 314 fails no notification happens Is that desired? If not then you may need something like:\ntry:\n  # line 314\nexcept X as e:\n  notify a failure\nelse:\n  notify a success","commit_id":"2d33a4e77b2c5e38ac75a9a55fce92a3221675e0"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"569e002a5ed30f19c652bd6b252196f0c5fd2127","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            role_id, user_id\u003duser_id, project_id\u003dtenant_id)"},{"line_number":308,"context_line":"        COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _emit_invalidate_user_token_persistence(self, user_id):"},{"line_number":311,"context_line":"        notifications.Audit.internal("},{"line_number":312,"context_line":"            notifications.INVALIDATE_USER_TOKEN_PERSISTENCE, user_id"},{"line_number":313,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":2,"id":"5aef4532_4168f6f5","line":310,"in_reply_to":"5aef4532_21e84a10","updated":"2016-03-07 17:10:18.000000000","message":"oh - sure that makes sense. I\u0027ll post another version. Do we only notify on success?","commit_id":"2d33a4e77b2c5e38ac75a9a55fce92a3221675e0"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"628a2bb612fd90a8653142961764088e2ad582dd","unresolved":false,"context_lines":[{"line_number":310,"context_line":"    def _emit_invalidate_user_token_persistence(self, user_id):"},{"line_number":311,"context_line":"        self.identity_api.emit_invalidate_user_token_persistence(user_id)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        # NOTE(lbragstad): The previous notification decorator behavior didn\u0027t"},{"line_number":314,"context_line":"        # send the notification unless the operation was successful. We"},{"line_number":315,"context_line":"        # maintain that behavior here by calling to the notification module"},{"line_number":316,"context_line":"        # after the call to emit invalid user tokens."}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_82242ec5","line":313,"updated":"2016-03-09 21:09:44.000000000","message":"Great comment!","commit_id":"bc64b993f0333a59e7dabcf6c6cef85b526ee6ea"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b8a26a2ea56fc93f8abb1974716e95f8163a44be","unresolved":false,"context_lines":[{"line_number":1089,"context_line":"                {\u0027user_id\u0027: user_id,"},{"line_number":1090,"context_line":"                 \u0027project_id\u0027: project_id})"},{"line_number":1091,"context_line":""},{"line_number":1092,"context_line":"    def _emit_invalidate_user_project_tokens_notification(self, payload):"},{"line_number":1093,"context_line":"        # This notification\u0027s payload is a dict of user_id and"},{"line_number":1094,"context_line":"        # project_id so the token provider can invalidate the tokens"},{"line_number":1095,"context_line":"        # from persistence if persistence is enabled."}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_ba65d345","line":1092,"updated":"2016-03-10 20:32:37.000000000","message":"the only reason this method exists is to provide a function to wrap. Get rid of this function and have the caller do the notification itself.","commit_id":"172c1f436828f22d96effcd4878544c868022d3e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a875428d227fa50c15b267451eb33df74728e68f","unresolved":false,"context_lines":[{"line_number":1089,"context_line":"                {\u0027user_id\u0027: user_id,"},{"line_number":1090,"context_line":"                 \u0027project_id\u0027: project_id})"},{"line_number":1091,"context_line":""},{"line_number":1092,"context_line":"    def _emit_invalidate_user_project_tokens_notification(self, payload):"},{"line_number":1093,"context_line":"        # This notification\u0027s payload is a dict of user_id and"},{"line_number":1094,"context_line":"        # project_id so the token provider can invalidate the tokens"},{"line_number":1095,"context_line":"        # from persistence if persistence is enabled."}],"source_content_type":"text/x-python","patch_set":4,"id":"3afc51ec_00e54a36","line":1092,"in_reply_to":"5aef4532_ba65d345","updated":"2016-03-11 21:19:23.000000000","message":"Done","commit_id":"172c1f436828f22d96effcd4878544c868022d3e"}],"keystone/identity/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b8a26a2ea56fc93f8abb1974716e95f8163a44be","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"        )"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"    def emit_invalidate_grant_token_persistence(self, user_project):"},{"line_number":1135,"context_line":"        \"\"\"Emit a notification to the callback system to revoke grant tokens."},{"line_number":1136,"context_line":""},{"line_number":1137,"context_line":"        This method and associated callback listener removes the need for"},{"line_number":1138,"context_line":"        making a direct call to another manager to delete and revoke tokens."}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_ba9af311","line":1135,"updated":"2016-03-10 20:32:37.000000000","message":"what\u0027s a grant token? Is this supposed to be Brant\u0027s tokens?","commit_id":"172c1f436828f22d96effcd4878544c868022d3e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a875428d227fa50c15b267451eb33df74728e68f","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"        )"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"    def emit_invalidate_grant_token_persistence(self, user_project):"},{"line_number":1135,"context_line":"        \"\"\"Emit a notification to the callback system to revoke grant tokens."},{"line_number":1136,"context_line":""},{"line_number":1137,"context_line":"        This method and associated callback listener removes the need for"},{"line_number":1138,"context_line":"        making a direct call to another manager to delete and revoke tokens."}],"source_content_type":"text/x-python","patch_set":4,"id":"3afc51ec_a0ca969f","line":1135,"in_reply_to":"5aef4532_ba9af311","updated":"2016-03-11 21:19:23.000000000","message":"No idea - maybe something for another patch.","commit_id":"172c1f436828f22d96effcd4878544c868022d3e"}],"keystone/notifications.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5378aeeb0fa32628d3b0eb5563ded8194503eef9","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        return wrapper"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"def internal(*args, **kwargs):"},{"line_number":234,"context_line":"    \"\"\"Decorator to send notifications for internal notifications only.\"\"\""},{"line_number":235,"context_line":"    kwargs[\u0027public\u0027] \u003d False"},{"line_number":236,"context_line":"    return ManagerNotificationWrapper(ACTIONS.internal, *args, **kwargs)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"def _get_callback_info(callback):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_0f30e706","line":236,"range":{"start_line":233,"start_character":0,"end_line":236,"end_character":72},"updated":"2016-03-04 23:51:40.000000000","message":"this could be removed now","commit_id":"bdc0b8c37e19bed56b0fdc5ab4371a76e24c998b"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a77a5071db98cd0957bdeaf355fcae3aee56a95f","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        return wrapper"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"def internal(*args, **kwargs):"},{"line_number":234,"context_line":"    \"\"\"Decorator to send notifications for internal notifications only.\"\"\""},{"line_number":235,"context_line":"    kwargs[\u0027public\u0027] \u003d False"},{"line_number":236,"context_line":"    return ManagerNotificationWrapper(ACTIONS.internal, *args, **kwargs)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"def _get_callback_info(callback):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_320d4a38","line":236,"range":{"start_line":233,"start_character":0,"end_line":236,"end_character":72},"in_reply_to":"7af24918_0f30e706","updated":"2016-03-04 23:54:07.000000000","message":"this is removed in a follow-on patch","commit_id":"bdc0b8c37e19bed56b0fdc5ab4371a76e24c998b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a3b949800313ac199e159b03c708c66787d10ceb","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    @classmethod"},{"line_number":187,"context_line":"    def internal(cls, resource_type, resource_id, initiator\u003dNone,"},{"line_number":188,"context_line":"                 public\u003dFalse):"},{"line_number":189,"context_line":"        cls._emit(ACTIONS.internal, resource_type, resource_id, initiator,"},{"line_number":190,"context_line":"                  public)"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_29ae7185","line":188,"updated":"2016-03-11 22:42:25.000000000","message":"an internal notification should never be public, so get rid of the argument.\n\nAlso, remove initiator since it\u0027s never used.","commit_id":"5ec91140704541a0af437cecb4fa3735ca96969c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"654823204d4e5ff2e4965bb472dfb7f85ea0cdf1","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    @classmethod"},{"line_number":187,"context_line":"    def internal(cls, resource_type, resource_id, initiator\u003dNone,"},{"line_number":188,"context_line":"                 public\u003dFalse):"},{"line_number":189,"context_line":"        cls._emit(ACTIONS.internal, resource_type, resource_id, initiator,"},{"line_number":190,"context_line":"                  public)"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_61733781","line":188,"in_reply_to":"3afc51ec_29ae7185","updated":"2016-03-14 14:18:40.000000000","message":"Done","commit_id":"5ec91140704541a0af437cecb4fa3735ca96969c"}],"keystone/resource/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b8a26a2ea56fc93f8abb1974716e95f8163a44be","unresolved":false,"context_lines":[{"line_number":873,"context_line":"    def get_project_by_name(self, project_name, domain_id):"},{"line_number":874,"context_line":"        return self.driver.get_project_by_name(project_name, domain_id)"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"    def _emit_invalidate_user_project_tokens_notification(self, payload):"},{"line_number":877,"context_line":"        # This notification\u0027s payload is a dict of user_id and"},{"line_number":878,"context_line":"        # project_id so the token provider can invalidate the tokens"},{"line_number":879,"context_line":"        # from persistence if persistence is enabled."}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_fa3c7be2","line":876,"updated":"2016-03-10 20:32:37.000000000","message":"remove this function and just have the caller send the notification.","commit_id":"172c1f436828f22d96effcd4878544c868022d3e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a875428d227fa50c15b267451eb33df74728e68f","unresolved":false,"context_lines":[{"line_number":873,"context_line":"    def get_project_by_name(self, project_name, domain_id):"},{"line_number":874,"context_line":"        return self.driver.get_project_by_name(project_name, domain_id)"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"    def _emit_invalidate_user_project_tokens_notification(self, payload):"},{"line_number":877,"context_line":"        # This notification\u0027s payload is a dict of user_id and"},{"line_number":878,"context_line":"        # project_id so the token provider can invalidate the tokens"},{"line_number":879,"context_line":"        # from persistence if persistence is enabled."}],"source_content_type":"text/x-python","patch_set":4,"id":"3afc51ec_604d2e72","line":876,"in_reply_to":"5aef4532_fa3c7be2","updated":"2016-03-11 21:19:23.000000000","message":"Done","commit_id":"172c1f436828f22d96effcd4878544c868022d3e"}]}
