)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"96dfd5f5d2c572f10eeefe71d3d198d0b0bfbff1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Steve Martinelli \u003cstevemar@ca.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-04 02:49:14 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Refactor _send_audit_notification"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In preparation of the CADF everywhere work, we should refactor"},{"line_number":10,"context_line":"_send_audit_notification to not make assumptions about target"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"da86d52c_48f51bca","line":7,"updated":"2015-02-09 01:21:51.000000000","message":"This isn\u0027t a refactor if it\u0027s changing behavior, e.g., to fix a bug.","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7977c7ff0d9f19ec401492e5e5e9ce06bddd6959","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Steve Martinelli \u003cstevemar@ca.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-04 02:49:14 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Refactor _send_audit_notification"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In preparation of the CADF everywhere work, we should refactor"},{"line_number":10,"context_line":"_send_audit_notification to not make assumptions about target"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"da86d52c_d6bd8ab2","line":7,"in_reply_to":"da86d52c_48f51bca","updated":"2015-02-12 08:00:14.000000000","message":"i\u0027ll split the bug fix out, i can fix that independently","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"}],"keystone/notifications.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"67c22c54fd59b82b3e8afb4fc0dbee808b0c6dad","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def __init__(self, operation):"},{"line_number":332,"context_line":"        self.action \u003d \"%s.%s\" % (operation, self.ROLE_ASSIGNMENT)"},{"line_number":333,"context_line":"        self.event_type \u003d \"%s.%s.%s\" % (SERVICE, self.ROLE_ASSIGNMENT,"},{"line_number":334,"context_line":"                                        operation)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def __call__(self, f):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_9c876c0f","line":333,"updated":"2015-01-31 09:40:59.000000000","message":"I think I\u0027m right in saying that the result of this is that we have swapped the order of terms in the event_type. Previously it would  end up as service.operation.self.ROLE_ASSIGNMENT, but now it is service.self.ROLE_ASSIGNMENT.operation.  Was that intentional...if so, is there a reason for that?","commit_id":"3b434b3988870571664e974e7b526be54105197e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4567315b5da97ee61f303d4fd769296f8c3af2f0","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def __init__(self, operation):"},{"line_number":332,"context_line":"        self.action \u003d \"%s.%s\" % (operation, self.ROLE_ASSIGNMENT)"},{"line_number":333,"context_line":"        self.event_type \u003d \"%s.%s.%s\" % (SERVICE, self.ROLE_ASSIGNMENT,"},{"line_number":334,"context_line":"                                        operation)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def __call__(self, f):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_baa42f58","line":333,"in_reply_to":"da86d52c_9c876c0f","updated":"2015-01-31 18:20:15.000000000","message":"right, before it\u0027s event type was incorrect, this is just correcting that, i guess file a bug?","commit_id":"3b434b3988870571664e974e7b526be54105197e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"300fbdd975cd9ba3263902202456e2c0b90dba97","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def __init__(self, operation):"},{"line_number":332,"context_line":"        self.action \u003d \"%s.%s\" % (operation, self.ROLE_ASSIGNMENT)"},{"line_number":333,"context_line":"        self.event_type \u003d \"%s.%s.%s\" % (SERVICE, self.ROLE_ASSIGNMENT,"},{"line_number":334,"context_line":"                                        operation)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def __call__(self, f):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_fa5a274f","line":333,"in_reply_to":"da86d52c_baa42f58","updated":"2015-01-31 18:36:43.000000000","message":"Yeah, probably a good idea - since this is the only functional change here...","commit_id":"3b434b3988870571664e974e7b526be54105197e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"58da418fbe63d3058f42778a0c20768b3b66a05c","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def __init__(self, operation):"},{"line_number":332,"context_line":"        self.action \u003d \"%s.%s\" % (operation, self.ROLE_ASSIGNMENT)"},{"line_number":333,"context_line":"        self.event_type \u003d \"%s.%s.%s\" % (SERVICE, self.ROLE_ASSIGNMENT,"},{"line_number":334,"context_line":"                                        operation)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def __call__(self, f):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_80cc5a37","line":333,"in_reply_to":"da86d52c_fa5a274f","updated":"2015-02-01 00:51:29.000000000","message":"done, created https://bugs.launchpad.net/keystone/+bug/1416767","commit_id":"3b434b3988870571664e974e7b526be54105197e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"67c22c54fd59b82b3e8afb4fc0dbee808b0c6dad","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        taxonomy.OUTCOME_SUCCESS, taxonomy.OUTCOME_FAILURE)"},{"line_number":435,"context_line":"    :param target: CADF resource representing the target"},{"line_number":436,"context_line":"    :param event_type: An OpenStack-ism, typically this is the meter name that"},{"line_number":437,"context_line":"        Ceilometer uses to poll events."},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    \"\"\""},{"line_number":440,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_dce3a403","line":437,"updated":"2015-01-31 09:40:59.000000000","message":"I know that this was in the original code, but might be a good idea to say what we are expecting in **kwargs.","commit_id":"3b434b3988870571664e974e7b526be54105197e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"58da418fbe63d3058f42778a0c20768b3b66a05c","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        taxonomy.OUTCOME_SUCCESS, taxonomy.OUTCOME_FAILURE)"},{"line_number":435,"context_line":"    :param target: CADF resource representing the target"},{"line_number":436,"context_line":"    :param event_type: An OpenStack-ism, typically this is the meter name that"},{"line_number":437,"context_line":"        Ceilometer uses to poll events."},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    \"\"\""},{"line_number":440,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_60c76613","line":437,"in_reply_to":"da86d52c_dce3a403","updated":"2015-02-01 00:51:29.000000000","message":"added some info here","commit_id":"3b434b3988870571664e974e7b526be54105197e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"88f2d7b23f6346625283777100c86c1a9839177b","unresolved":false,"context_lines":[{"line_number":53,"context_line":"# resource types that can be notified"},{"line_number":54,"context_line":"_SUBSCRIBERS \u003d {}"},{"line_number":55,"context_line":"_notifier \u003d None"},{"line_number":56,"context_line":"SERVICE \u003d \u0027identity\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_aa7802f3","line":56,"updated":"2015-02-03 15:16:40.000000000","message":"Will this be referenced by other modules, or can it be named according to private naming conventions?","commit_id":"298710fcd591eb8b5fbd609088de7c6da672688d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f0de6cf5671b24c3b237af4e9fc85fc92d3a20c7","unresolved":false,"context_lines":[{"line_number":53,"context_line":"# resource types that can be notified"},{"line_number":54,"context_line":"_SUBSCRIBERS \u003d {}"},{"line_number":55,"context_line":"_notifier \u003d None"},{"line_number":56,"context_line":"SERVICE \u003d \u0027identity\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_1b1161ac","line":56,"in_reply_to":"da86d52c_aa7802f3","updated":"2015-02-03 16:10:49.000000000","message":"i\u0027ll use this when I refactor the tests","commit_id":"298710fcd591eb8b5fbd609088de7c6da672688d"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"31d6be0b550616050457552874449a937104dc30","unresolved":false,"context_lines":[{"line_number":318,"context_line":"    ``event_type`` are dictated below."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    action: created.role_assignment"},{"line_number":321,"context_line":"    event_type: identity.role_assignment.created"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    Sends a CADF notification if the wrapped method does not raise an"},{"line_number":324,"context_line":"    ``Exception`` (such as ``keystone.exception.NotFound``)."}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_1f75ed97","line":321,"updated":"2015-02-03 00:27:16.000000000","message":"just curiosity, this audit will just works in the role assignment creation, if I make other action like remove, this will not work, right?","commit_id":"298710fcd591eb8b5fbd609088de7c6da672688d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6b8d212d6a502e1f8616c75ba8584a203a0078e8","unresolved":false,"context_lines":[{"line_number":318,"context_line":"    ``event_type`` are dictated below."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    action: created.role_assignment"},{"line_number":321,"context_line":"    event_type: identity.role_assignment.created"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    Sends a CADF notification if the wrapped method does not raise an"},{"line_number":324,"context_line":"    ``Exception`` (such as ``keystone.exception.NotFound``)."}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_a57cd021","line":321,"in_reply_to":"da86d52c_1f75ed97","updated":"2015-02-03 01:50:51.000000000","message":"it\u0027ll be emitted for role_assignment deletion too.","commit_id":"298710fcd591eb8b5fbd609088de7c6da672688d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"96dfd5f5d2c572f10eeefe71d3d198d0b0bfbff1","unresolved":false,"context_lines":[{"line_number":271,"context_line":"class CadfNotificationWrapper(object):"},{"line_number":272,"context_line":"    \"\"\"Send CADF event notifications for various methods."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    This function is only used for Authentication events. It\u0027s ``action`` and"},{"line_number":275,"context_line":"    ``event_type`` are dictated below."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    action: authenticate"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_c89f4bb3","line":274,"updated":"2015-02-09 01:21:51.000000000","message":"change \"It\u0027s\" to \"Its\"","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2a5bc8cf02d1bf483817d75e0d5791f7d672f29d","unresolved":false,"context_lines":[{"line_number":271,"context_line":"class CadfNotificationWrapper(object):"},{"line_number":272,"context_line":"    \"\"\"Send CADF event notifications for various methods."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    This function is only used for Authentication events. It\u0027s ``action`` and"},{"line_number":275,"context_line":"    ``event_type`` are dictated below."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    action: authenticate"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_3f2dadfe","line":274,"in_reply_to":"da86d52c_c89f4bb3","updated":"2015-02-13 01:22:00.000000000","message":"Done","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"96dfd5f5d2c572f10eeefe71d3d198d0b0bfbff1","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    ``event_type`` are dictated below."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    action: authenticate"},{"line_number":278,"context_line":"    event_type: identity.authenticate"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    Sends CADF notifications for events such as whether an authentication was"},{"line_number":281,"context_line":"    successful or not."}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_48ab5bd6","line":278,"updated":"2015-02-09 01:21:51.000000000","message":"This isn\u0027t rendered correctly, should be\n\n - action: ``authenticate``\n - event_type: ``identity.authenticate``","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2a5bc8cf02d1bf483817d75e0d5791f7d672f29d","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    ``event_type`` are dictated below."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    action: authenticate"},{"line_number":278,"context_line":"    event_type: identity.authenticate"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    Sends CADF notifications for events such as whether an authentication was"},{"line_number":281,"context_line":"    successful or not."}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_1feb89a4","line":278,"in_reply_to":"da86d52c_48ab5bd6","updated":"2015-02-13 01:22:00.000000000","message":"Done","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"96dfd5f5d2c572f10eeefe71d3d198d0b0bfbff1","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    Sends CADF notifications for events such as whether an authentication was"},{"line_number":281,"context_line":"    successful or not."},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    :param action: for this function, it is \u0027authenticate\u0027"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    \"\"\""},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_68b81f2b","line":283,"updated":"2015-02-09 01:21:51.000000000","message":"why have a parameter? Also, what if it\u0027s not \u0027authenticate\u0027?","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2a5bc8cf02d1bf483817d75e0d5791f7d672f29d","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    Sends CADF notifications for events such as whether an authentication was"},{"line_number":281,"context_line":"    successful or not."},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    :param action: for this function, it is \u0027authenticate\u0027"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    \"\"\""},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_ffef95ae","line":283,"in_reply_to":"da86d52c_68b81f2b","updated":"2015-02-13 01:22:00.000000000","message":"Done","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7977c7ff0d9f19ec401492e5e5e9ce06bddd6959","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    Sends CADF notifications for events such as whether an authentication was"},{"line_number":281,"context_line":"    successful or not."},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    :param action: for this function, it is \u0027authenticate\u0027"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    \"\"\""},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_b6d9f623","line":283,"in_reply_to":"da86d52c_68b81f2b","updated":"2015-02-12 08:00:14.000000000","message":"the comment is mis-leading, currently the only action used is \u0027authenticate\u0027 but there could be others.","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"1335860b0915eba0e8fa3306df2788fc36a86dfb","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    \"\"\""},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def __init__(self, action):"},{"line_number":288,"context_line":"        self.action \u003d action"},{"line_number":289,"context_line":"        self.event_type \u003d \"%s.%s\" % (SERVICE, action)"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_987b4f8b","line":287,"updated":"2015-02-05 01:51:57.000000000","message":"NIT: should probably name this \u0027operation\u0027 too for consistency of naming convention. Similar to the constructor in CadfRoleAssignmentNotificationWrapper","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"cc98382a1d5322fd5ca0c90b5686d275613182ee","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    \"\"\""},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def __init__(self, action):"},{"line_number":288,"context_line":"        self.action \u003d action"},{"line_number":289,"context_line":"        self.event_type \u003d \"%s.%s\" % (SERVICE, action)"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_f0d48821","line":287,"in_reply_to":"da86d52c_987b4f8b","updated":"2015-02-11 08:30:53.000000000","message":"++","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2a5bc8cf02d1bf483817d75e0d5791f7d672f29d","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    \"\"\""},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def __init__(self, action):"},{"line_number":288,"context_line":"        self.action \u003d action"},{"line_number":289,"context_line":"        self.event_type \u003d \"%s.%s\" % (SERVICE, action)"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_5f30a155","line":287,"in_reply_to":"da86d52c_987b4f8b","updated":"2015-02-13 01:22:00.000000000","message":"Done","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"0af3691dd7e196fa0dff4718353f6279206adbc5","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            \"\"\"Always send a notification.\"\"\""},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"            initiator \u003d _get_request_audit_info(context, user_id)"},{"line_number":296,"context_line":"            target \u003d resource.Resource(typeURI\u003dtaxonomy.ACCOUNT_USER)"},{"line_number":297,"context_line":"            try:"},{"line_number":298,"context_line":"                result \u003d f(wrapped_self, context, user_id, *args, **kwargs)"},{"line_number":299,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_28664c2a","line":296,"updated":"2015-02-06 15:23:03.000000000","message":"is there an id we can attach to this? maybe an id associated with keystone service?","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2a5bc8cf02d1bf483817d75e0d5791f7d672f29d","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            \"\"\"Always send a notification.\"\"\""},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"            initiator \u003d _get_request_audit_info(context, user_id)"},{"line_number":296,"context_line":"            target \u003d resource.Resource(typeURI\u003dtaxonomy.ACCOUNT_USER)"},{"line_number":297,"context_line":"            try:"},{"line_number":298,"context_line":"                result \u003d f(wrapped_self, context, user_id, *args, **kwargs)"},{"line_number":299,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_7f81e5c1","line":296,"in_reply_to":"da86d52c_28664c2a","updated":"2015-02-13 01:22:00.000000000","message":"let me address that in another patch, i may be able to attach the service id","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"cc98382a1d5322fd5ca0c90b5686d275613182ee","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        return wrapper"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"class CadfRoleAssignmentNotificationWrapper(object):"},{"line_number":315,"context_line":"    \"\"\"Send CADF notifications for ``role_assignment`` methods."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    This function is only used for role assignment events. It\u0027s ``action`` and"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_30a9c090","line":314,"updated":"2015-02-11 08:30:53.000000000","message":"Why do we need multiple wrapper classes anyway? We can\u0027t we just have a generic one?","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7977c7ff0d9f19ec401492e5e5e9ce06bddd6959","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        return wrapper"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"class CadfRoleAssignmentNotificationWrapper(object):"},{"line_number":315,"context_line":"    \"\"\"Send CADF notifications for ``role_assignment`` methods."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    This function is only used for role assignment events. It\u0027s ``action`` and"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_f62d2eff","line":314,"in_reply_to":"da86d52c_30a9c090","updated":"2015-02-12 08:00:14.000000000","message":"they wrappers each create very different payloads, i\u0027ll look into possibly refactoring/condensing the wrappers when the CADF work is completed.","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"96dfd5f5d2c572f10eeefe71d3d198d0b0bfbff1","unresolved":false,"context_lines":[{"line_number":314,"context_line":"class CadfRoleAssignmentNotificationWrapper(object):"},{"line_number":315,"context_line":"    \"\"\"Send CADF notifications for ``role_assignment`` methods."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    This function is only used for role assignment events. It\u0027s ``action`` and"},{"line_number":318,"context_line":"    ``event_type`` are dictated below."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    action: created.role_assignment"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_48927ba0","line":317,"updated":"2015-02-09 01:21:51.000000000","message":"change \"It\u0027s\" to \"Its\"","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2a5bc8cf02d1bf483817d75e0d5791f7d672f29d","unresolved":false,"context_lines":[{"line_number":314,"context_line":"class CadfRoleAssignmentNotificationWrapper(object):"},{"line_number":315,"context_line":"    \"\"\"Send CADF notifications for ``role_assignment`` methods."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    This function is only used for role assignment events. It\u0027s ``action`` and"},{"line_number":318,"context_line":"    ``event_type`` are dictated below."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    action: created.role_assignment"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_7fe645b1","line":317,"in_reply_to":"da86d52c_48927ba0","updated":"2015-02-13 01:22:00.000000000","message":"Done","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"96dfd5f5d2c572f10eeefe71d3d198d0b0bfbff1","unresolved":false,"context_lines":[{"line_number":318,"context_line":"    ``event_type`` are dictated below."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    action: created.role_assignment"},{"line_number":321,"context_line":"    event_type: identity.role_assignment.created"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    Sends a CADF notification if the wrapped method does not raise an"},{"line_number":324,"context_line":"    ``Exception`` (such as ``keystone.exception.NotFound``)."}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_28954788","line":321,"updated":"2015-02-09 01:21:51.000000000","message":"This isn\u0027t rendered correctly, should be\n\n - action: ``created.role_assignment``\n - event_type: ``identity.role_assignment.created``","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2a5bc8cf02d1bf483817d75e0d5791f7d672f29d","unresolved":false,"context_lines":[{"line_number":318,"context_line":"    ``event_type`` are dictated below."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    action: created.role_assignment"},{"line_number":321,"context_line":"    event_type: identity.role_assignment.created"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    Sends a CADF notification if the wrapped method does not raise an"},{"line_number":324,"context_line":"    ``Exception`` (such as ``keystone.exception.NotFound``)."}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_9fe93981","line":321,"in_reply_to":"da86d52c_28954788","updated":"2015-02-13 01:22:00.000000000","message":"Done","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"cc98382a1d5322fd5ca0c90b5686d275613182ee","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def __init__(self, operation):"},{"line_number":332,"context_line":"        self.action \u003d \"%s.%s\" % (operation, self.ROLE_ASSIGNMENT)"},{"line_number":333,"context_line":"        self.event_type \u003d \"%s.%s.%s\" % (SERVICE, self.ROLE_ASSIGNMENT,"},{"line_number":334,"context_line":"                                        operation)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def __call__(self, f):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_b073f04c","line":333,"updated":"2015-02-11 08:30:53.000000000","message":"Also, shouldn\u0027t the event_type match the APIs in policy.json?\n\ni.e.\n\nidentity.create_grant\nidentity.revoke_grant\n\nThat would make it easier to correlate event_type with actual API call.","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2a5bc8cf02d1bf483817d75e0d5791f7d672f29d","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def __init__(self, operation):"},{"line_number":332,"context_line":"        self.action \u003d \"%s.%s\" % (operation, self.ROLE_ASSIGNMENT)"},{"line_number":333,"context_line":"        self.event_type \u003d \"%s.%s.%s\" % (SERVICE, self.ROLE_ASSIGNMENT,"},{"line_number":334,"context_line":"                                        operation)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def __call__(self, f):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_7f9d6509","line":333,"in_reply_to":"da86d52c_b073f04c","updated":"2015-02-13 01:22:00.000000000","message":"I\u0027m not familiar with any requirement that it match the API call. usually it\u0027s identity.\u003cresource\u003e.\u003caction\u003e.","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"1335860b0915eba0e8fa3306df2788fc36a86dfb","unresolved":false,"context_lines":[{"line_number":331,"context_line":"    def __init__(self, operation):"},{"line_number":332,"context_line":"        self.action \u003d \"%s.%s\" % (operation, self.ROLE_ASSIGNMENT)"},{"line_number":333,"context_line":"        self.event_type \u003d \"%s.%s.%s\" % (SERVICE, self.ROLE_ASSIGNMENT,"},{"line_number":334,"context_line":"                                        operation)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def __call__(self, f):"},{"line_number":337,"context_line":"        def wrapper(wrapped_self, role_id, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_fd78bdc5","line":334,"updated":"2015-02-05 01:51:57.000000000","message":"The format of the event_type changed here from the original, is that intentional? The original output for event_type was \u0027service.operation.resource_type\u0027\n\nHmm I guess this is a bug fix, since the correct format should be \u0027service.resource_type.operation\u0027?\n\n\nThis seems doing the same thing as line:241, would it make sense to create a separate function for formatting event_type","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7977c7ff0d9f19ec401492e5e5e9ce06bddd6959","unresolved":false,"context_lines":[{"line_number":331,"context_line":"    def __init__(self, operation):"},{"line_number":332,"context_line":"        self.action \u003d \"%s.%s\" % (operation, self.ROLE_ASSIGNMENT)"},{"line_number":333,"context_line":"        self.event_type \u003d \"%s.%s.%s\" % (SERVICE, self.ROLE_ASSIGNMENT,"},{"line_number":334,"context_line":"                                        operation)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def __call__(self, f):"},{"line_number":337,"context_line":"        def wrapper(wrapped_self, role_id, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_36342649","line":334,"in_reply_to":"da86d52c_50b714f5","updated":"2015-02-12 08:00:14.000000000","message":"Right, I\u0027ll keep this unchanged for now, as I would really like to get the CADF notifications done, then address the bug in another patch.","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"cc98382a1d5322fd5ca0c90b5686d275613182ee","unresolved":false,"context_lines":[{"line_number":331,"context_line":"    def __init__(self, operation):"},{"line_number":332,"context_line":"        self.action \u003d \"%s.%s\" % (operation, self.ROLE_ASSIGNMENT)"},{"line_number":333,"context_line":"        self.event_type \u003d \"%s.%s.%s\" % (SERVICE, self.ROLE_ASSIGNMENT,"},{"line_number":334,"context_line":"                                        operation)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def __call__(self, f):"},{"line_number":337,"context_line":"        def wrapper(wrapped_self, role_id, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_50b714f5","line":334,"in_reply_to":"da86d52c_e8c96fad","updated":"2015-02-11 08:30:53.000000000","message":"++","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"96dfd5f5d2c572f10eeefe71d3d198d0b0bfbff1","unresolved":false,"context_lines":[{"line_number":331,"context_line":"    def __init__(self, operation):"},{"line_number":332,"context_line":"        self.action \u003d \"%s.%s\" % (operation, self.ROLE_ASSIGNMENT)"},{"line_number":333,"context_line":"        self.event_type \u003d \"%s.%s.%s\" % (SERVICE, self.ROLE_ASSIGNMENT,"},{"line_number":334,"context_line":"                                        operation)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def __call__(self, f):"},{"line_number":337,"context_line":"        def wrapper(wrapped_self, role_id, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_e8c96fad","line":334,"in_reply_to":"da86d52c_fd78bdc5","updated":"2015-02-09 01:21:51.000000000","message":"We can\u0027t just change the event_type, it\u0027s not backwards compatible. We could send events with both the old and new names and document that the old name is deprecated, then get rid of it next release.","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"96dfd5f5d2c572f10eeefe71d3d198d0b0bfbff1","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                                          identity_provider\u003didentity_provider,"},{"line_number":419,"context_line":"                                          user\u003duser_id, groups\u003dgroup_ids)"},{"line_number":420,"context_line":"    initiator.credential \u003d cred"},{"line_number":421,"context_line":"    event_type \u003d \"%s.%s\" % (SERVICE, action)"},{"line_number":422,"context_line":"    _send_audit_notification(action, initiator, outcome, target, event_type)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_68bd7f02","line":421,"updated":"2015-02-09 01:21:51.000000000","message":"prefer \u0027 for strings.","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2a5bc8cf02d1bf483817d75e0d5791f7d672f29d","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                                          identity_provider\u003didentity_provider,"},{"line_number":419,"context_line":"                                          user\u003duser_id, groups\u003dgroup_ids)"},{"line_number":420,"context_line":"    initiator.credential \u003d cred"},{"line_number":421,"context_line":"    event_type \u003d \"%s.%s\" % (SERVICE, action)"},{"line_number":422,"context_line":"    _send_audit_notification(action, initiator, outcome, target, event_type)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_1f8c69d6","line":421,"in_reply_to":"da86d52c_68bd7f02","updated":"2015-02-13 01:22:00.000000000","message":"Done","commit_id":"22b528a59e3c60035c987c4d0db725ef6f9bb2a2"}]}
