)]}'
{"keystone/notifications.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d1c6467ad61acfbac34fada59cbb86af4081ebf2","unresolved":false,"context_lines":[{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    :param operation: operation being performed (created, updated, or deleted)"},{"line_number":380,"context_line":"    :param resource_type: type of resource being operated on (role, user, etc)"},{"line_number":381,"context_line":"    :param resource_id: ID of resource being operated on"},{"line_number":382,"context_line":"    :param outcome: outcomes of the operation (SUCCESS, FAILURE, etc)"},{"line_number":383,"context_line":"    :param initiator: CADF representation of the user that created the request"},{"line_number":384,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_2fd23d5c","side":"PARENT","line":381,"updated":"2016-06-14 17:50:52.000000000","message":"-1: The notifications we emit are an API, and this should has a substantial impact on that API which is not at all documented in this patch.","commit_id":"cbe0a1e07cb5876ab9c56698c7db86557d53c98f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d1c6467ad61acfbac34fada59cbb86af4081ebf2","unresolved":false,"context_lines":[{"line_number":387,"context_line":"    else:"},{"line_number":388,"context_line":"        target_uri \u003d CADF_TYPE_MAP.get(resource_type)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    if isinstance(resource_id, dict) and \u0027resource_name\u0027in resource_id:"},{"line_number":391,"context_line":"        audit_kwargs \u003d {\u0027resource_info\u0027: resource_id[\u0027resource_id\u0027],"},{"line_number":392,"context_line":"                        \u0027resource_name\u0027: resource_id[\u0027resource_name\u0027]}"},{"line_number":393,"context_line":"        target \u003d resource.Resource(typeURI\u003dtarget_uri,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_6f24455f","line":390,"updated":"2016-06-14 17:50:52.000000000","message":"-1: Instead of overloading the resource_id with two different types and handling the difference - add the resource_name as a standard part of this API, and ALWAYS include it for ALL types of resources. Very few models don\u0027t have names (endpoints, for example), and I think it would be acceptable to pass null in those cases.","commit_id":"c7fbafaa225184ead287bf45e82e81acf6211add"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4d57a8d28c37c8bae456687138704b5e9ffa6016","unresolved":false,"context_lines":[{"line_number":390,"context_line":"    if isinstance(resource_id, dict) and \u0027resource_name\u0027in resource_id:"},{"line_number":391,"context_line":"        audit_kwargs \u003d {\u0027resource_info\u0027: resource_id[\u0027resource_id\u0027],"},{"line_number":392,"context_line":"                        \u0027resource_name\u0027: resource_id[\u0027resource_name\u0027]}"},{"line_number":393,"context_line":"        target \u003d resource.Resource(typeURI\u003dtarget_uri,"},{"line_number":394,"context_line":"                                   id\u003dresource_id[\u0027resource_id\u0027])"},{"line_number":395,"context_line":"    else:"},{"line_number":396,"context_line":"        audit_kwargs \u003d {\u0027resource_info\u0027: resource_id}"},{"line_number":397,"context_line":"        target \u003d resource.Resource(typeURI\u003dtarget_uri,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_dab4cb83","line":394,"range":{"start_line":393,"start_character":8,"end_line":394,"end_character":65},"updated":"2016-06-16 03:59:57.000000000","message":"you probably want to do something like:\n\n  target \u003d resource.Resource(typeURI\u003dtarget_uri,\n                id\u003dresource[\u0027id\u0027])\n  if \u0027name\u0027 in resource:\n    target.name \u003d resource[\u0027name\u0027]\n  if \u0027domain_id\u0027 in resource:\n    target.domain_id \u003d resource[\u0027domain_id\u0027]","commit_id":"c7fbafaa225184ead287bf45e82e81acf6211add"}],"keystone/resource/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4d57a8d28c37c8bae456687138704b5e9ffa6016","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        self.credential_api.delete_credentials_for_project(project_id)"},{"line_number":472,"context_line":"        resource_value \u003d {\u0027resource_id\u0027: project_id,"},{"line_number":473,"context_line":"                          \u0027resource_name\u0027: project[\u0027name\u0027]}"},{"line_number":474,"context_line":"        notifications.Audit.deleted(self._PROJECT, resource_value, initiator)"},{"line_number":475,"context_line":"        # Invalidate user role assignments cache region, as it may"},{"line_number":476,"context_line":"        # be caching role assignments where the target is"},{"line_number":477,"context_line":"        # the specified project"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_dae68baf","line":474,"range":{"start_line":474,"start_character":51,"end_line":474,"end_character":65},"updated":"2016-06-16 03:59:57.000000000","message":"i think we could pass in the resource being deleted \u0027project\u0027 and pick out the ID and name in the notification code","commit_id":"c7fbafaa225184ead287bf45e82e81acf6211add"}]}
