)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"fd5e42e72369c46528e83d2d960bab50e8c13ede","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add docstrings to several functions that had none."},{"line_number":10,"context_line":"Provide :param and :returns where appropriate"},{"line_number":11,"context_line":"Cleanup docstrings with :type, fix :return to :returns"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-Bug: 1410922"},{"line_number":14,"context_line":"Change-Id: Ib08f5486d2701d145d664badca4e9c86638e02d1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"da86d52c_099c535c","line":11,"updated":"2015-02-05 17:41:19.000000000","message":"\"fix :return to :returns\" should not be here -- it\u0027s a difference between two patchets, not between what was before the patch and what is now","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"917f6e751745d782ad8b5eb70d87b9c819bcca91","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add docstrings to several functions that had none."},{"line_number":10,"context_line":"Provide :param and :returns where appropriate"},{"line_number":11,"context_line":"Cleanup docstrings with :type, fix :return to :returns"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-Bug: 1410922"},{"line_number":14,"context_line":"Change-Id: Ib08f5486d2701d145d664badca4e9c86638e02d1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"da86d52c_a9fb3479","line":11,"in_reply_to":"da86d52c_099c535c","updated":"2015-02-19 20:43:42.000000000","message":"Done","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"52c19ac5559505c29dd4d74a3e5606dac50ac3f5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Tom Cameron \u003ctom.cameron@rackspace.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-19 17:44:27 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add docstrings to remaining functions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add docstrings to several functions that had none."},{"line_number":10,"context_line":"Provide :param and :returns where appropriate"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"ba7be1f8_bd36f3e5","line":7,"updated":"2015-02-20 01:48:33.000000000","message":"in which file?","commit_id":"05cfb0a7e3e75f3dc97c7d6f8df5148071b089db"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"52c19ac5559505c29dd4d74a3e5606dac50ac3f5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add docstrings to remaining functions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add docstrings to several functions that had none."},{"line_number":10,"context_line":"Provide :param and :returns where appropriate"},{"line_number":11,"context_line":"Cleanup docstrings with :type"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"ba7be1f8_dd33a7f4","line":9,"updated":"2015-02-20 01:48:33.000000000","message":"same as above.","commit_id":"05cfb0a7e3e75f3dc97c7d6f8df5148071b089db"}],"keystone/notifications.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"885e2dfdf7dd048f10a7c67ccf82ff7bf9d9a460","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def _get_callback_info(callback):"},{"line_number":138,"context_line":"    \"\"\"Return list containing callback\u0027s module, and name. If the callback"},{"line_number":139,"context_line":"       is an instance method also return the class name."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"       Note: This will change to callback.__self__.__class__ in python3"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_41c4fb91","line":138,"updated":"2015-02-02 17:32:52.000000000","message":"There needs to be a short summary line. Take a look at http://docs.openstack.org/developer/hacking/#docstrings for info on the correct format.","commit_id":"6028bb9af2dc181ce52c69a486287ad86daa3364"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"71825655cc3d32265b157b877ce1a6cb553efa36","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def _get_callback_info(callback):"},{"line_number":138,"context_line":"    \"\"\"Return list containing callback\u0027s module, and name. If the callback"},{"line_number":139,"context_line":"       is an instance method also return the class name."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"       Note: This will change to callback.__self__.__class__ in python3"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_223c24c8","line":138,"in_reply_to":"da86d52c_41c4fb91","updated":"2015-02-05 17:25:01.000000000","message":"Done","commit_id":"6028bb9af2dc181ce52c69a486287ad86daa3364"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"885e2dfdf7dd048f10a7c67ccf82ff7bf9d9a460","unresolved":false,"context_lines":[{"line_number":139,"context_line":"       is an instance method also return the class name."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"       Note: This will change to callback.__self__.__class__ in python3"},{"line_number":142,"context_line":"    \"\"\""},{"line_number":143,"context_line":"    if getattr(callback, \u0027im_class\u0027, None):"},{"line_number":144,"context_line":"        return [getattr(callback, \u0027__module__\u0027, None),"},{"line_number":145,"context_line":"                callback.im_class.__name__,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_01b5a3ed","line":142,"updated":"2015-02-02 17:32:52.000000000","message":"Should probably add a :param: for callback and a :returns: section.","commit_id":"6028bb9af2dc181ce52c69a486287ad86daa3364"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"71825655cc3d32265b157b877ce1a6cb553efa36","unresolved":false,"context_lines":[{"line_number":139,"context_line":"       is an instance method also return the class name."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"       Note: This will change to callback.__self__.__class__ in python3"},{"line_number":142,"context_line":"    \"\"\""},{"line_number":143,"context_line":"    if getattr(callback, \u0027im_class\u0027, None):"},{"line_number":144,"context_line":"        return [getattr(callback, \u0027__module__\u0027, None),"},{"line_number":145,"context_line":"                callback.im_class.__name__,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_022480ad","line":142,"in_reply_to":"da86d52c_01b5a3ed","updated":"2015-02-05 17:25:01.000000000","message":"Done","commit_id":"6028bb9af2dc181ce52c69a486287ad86daa3364"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"885e2dfdf7dd048f10a7c67ccf82ff7bf9d9a460","unresolved":false,"context_lines":[{"line_number":151,"context_line":"def register_event_callback(event, resource_type, callbacks):"},{"line_number":152,"context_line":"    \"\"\"Register each callback with the event"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    :param event: Item in ACTIONS we\u0027re registering callback with"},{"line_number":155,"context_line":"    :param resource_type: type of resource being operated on"},{"line_number":156,"context_line":"    :param callbacks: list of callback items to be registered with event"},{"line_number":157,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_a1c5b75c","line":154,"updated":"2015-02-02 17:32:52.000000000","message":"For bonus points you can add type information like this: https://review.openstack.org/#/c/127856/6/keystoneclient/client.py","commit_id":"6028bb9af2dc181ce52c69a486287ad86daa3364"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"71825655cc3d32265b157b877ce1a6cb553efa36","unresolved":false,"context_lines":[{"line_number":151,"context_line":"def register_event_callback(event, resource_type, callbacks):"},{"line_number":152,"context_line":"    \"\"\"Register each callback with the event"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    :param event: Item in ACTIONS we\u0027re registering callback with"},{"line_number":155,"context_line":"    :param resource_type: type of resource being operated on"},{"line_number":156,"context_line":"    :param callbacks: list of callback items to be registered with event"},{"line_number":157,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_82187076","line":154,"in_reply_to":"da86d52c_a1c5b75c","updated":"2015-02-05 17:25:01.000000000","message":"Done","commit_id":"6028bb9af2dc181ce52c69a486287ad86daa3364"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"35f4e6cebb3303f205bd365735e1f409ee37fac9","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    \"\"\"Return list containing callback\u0027s module and name."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"       If the callback is an instance method also return the class name."},{"line_number":141,"context_line":"       Note: This will change to callback.__self__.__class__ in python3"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"       :param function callback: Function to call"},{"line_number":144,"context_line":"       :returns: List containing parent module, optional class, function name"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_2f8b0969","line":141,"updated":"2015-02-04 17:33:39.000000000","message":"What\u0027s this note here for? If current code is incompatible with python3, it should be in the bugtracker with related tag","commit_id":"48502ba9d256c212083786bd57c612f8b7e4b96d"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"9effe9c634d599731e36f9aad00e328af8a66fe6","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    \"\"\"Return list containing callback\u0027s module and name."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"       If the callback is an instance method also return the class name."},{"line_number":141,"context_line":"       Note: This will change to callback.__self__.__class__ in python3"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"       :param function callback: Function to call"},{"line_number":144,"context_line":"       :returns: List containing parent module, optional class, function name"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_b892b749","line":141,"in_reply_to":"da86d52c_2f8b0969","updated":"2015-02-05 17:19:18.000000000","message":"Would you prefer to see the bug created and referenced here, or would you prefer to not have docstrings polluted with this kind of information?","commit_id":"48502ba9d256c212083786bd57c612f8b7e4b96d"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"4806cbf8f0091c000b810a89b4f1cc444417e522","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    \"\"\"Return list containing callback\u0027s module and name."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"       If the callback is an instance method also return the class name."},{"line_number":141,"context_line":"       Note: This will change to callback.__self__.__class__ in python3"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"       :param function callback: Function to call"},{"line_number":144,"context_line":"       :returns: List containing parent module, optional class, function name"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_c9315b5b","line":141,"in_reply_to":"da86d52c_b892b749","updated":"2015-02-05 17:43:56.000000000","message":"the latter","commit_id":"48502ba9d256c212083786bd57c612f8b7e4b96d"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"35f4e6cebb3303f205bd365735e1f409ee37fac9","unresolved":false,"context_lines":[{"line_number":155,"context_line":"def register_event_callback(event, resource_type, callbacks):"},{"line_number":156,"context_line":"    \"\"\"Register each callback with the event"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    :param keystone.notifications.ACTIONS event: Action being registered"},{"line_number":159,"context_line":"    :param str resource_type: type of resource being operated on"},{"line_number":160,"context_line":"    :param list callbacks: list of callback items to be registered with event"},{"line_number":161,"context_line":"    :raises: ValueError, TypeError"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_8f3f9586","line":158,"updated":"2015-02-04 17:33:39.000000000","message":"AFAIK class cannot be here. It should go to a separate :type \u003ctype\u003e: entry.","commit_id":"48502ba9d256c212083786bd57c612f8b7e4b96d"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"9effe9c634d599731e36f9aad00e328af8a66fe6","unresolved":false,"context_lines":[{"line_number":155,"context_line":"def register_event_callback(event, resource_type, callbacks):"},{"line_number":156,"context_line":"    \"\"\"Register each callback with the event"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    :param keystone.notifications.ACTIONS event: Action being registered"},{"line_number":159,"context_line":"    :param str resource_type: type of resource being operated on"},{"line_number":160,"context_line":"    :param list callbacks: list of callback items to be registered with event"},{"line_number":161,"context_line":"    :raises: ValueError, TypeError"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_5e0283b4","line":158,"in_reply_to":"da86d52c_8f3f9586","updated":"2015-02-05 17:19:18.000000000","message":"Done","commit_id":"48502ba9d256c212083786bd57c612f8b7e4b96d"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"35f4e6cebb3303f205bd365735e1f409ee37fac9","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    :param context: Request context"},{"line_number":277,"context_line":"    :param user_id: Optional user ID, alternatively collected from context"},{"line_number":278,"context_line":"    :return: pycadf.Resource containing auditing data about the information"},{"line_number":279,"context_line":"    \"\"\""},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    remote_addr \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_84393cf4","line":278,"updated":"2015-02-04 17:33:39.000000000","message":"s/return/returns/","commit_id":"48502ba9d256c212083786bd57c612f8b7e4b96d"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"9effe9c634d599731e36f9aad00e328af8a66fe6","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    :param context: Request context"},{"line_number":277,"context_line":"    :param user_id: Optional user ID, alternatively collected from context"},{"line_number":278,"context_line":"    :return: pycadf.Resource containing auditing data about the information"},{"line_number":279,"context_line":"    \"\"\""},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    remote_addr \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_3ef78fd4","line":278,"in_reply_to":"da86d52c_84393cf4","updated":"2015-02-05 17:19:18.000000000","message":"Done","commit_id":"48502ba9d256c212083786bd57c612f8b7e4b96d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"8d910f0de4e08acc740dcdfc1e82623c6013a734","unresolved":false,"context_lines":[{"line_number":137,"context_line":"def _get_callback_info(callback):"},{"line_number":138,"context_line":"    \"\"\"Return list containing callback\u0027s module and name."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"       If the callback is an instance method also return the class name."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"       :param callback: Function to call"},{"line_number":143,"context_line":"       :type callback: function"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_0fab2e1f","line":140,"updated":"2015-02-13 20:30:40.000000000","message":"This stuff is tabbed over a bit too far","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"917f6e751745d782ad8b5eb70d87b9c819bcca91","unresolved":false,"context_lines":[{"line_number":137,"context_line":"def _get_callback_info(callback):"},{"line_number":138,"context_line":"    \"\"\"Return list containing callback\u0027s module and name."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"       If the callback is an instance method also return the class name."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"       :param callback: Function to call"},{"line_number":143,"context_line":"       :type callback: function"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_138ec627","line":140,"in_reply_to":"da86d52c_0fab2e1f","updated":"2015-02-19 20:43:42.000000000","message":"Done","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"8d910f0de4e08acc740dcdfc1e82623c6013a734","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"       :param callback: Function to call"},{"line_number":143,"context_line":"       :type callback: function"},{"line_number":144,"context_line":"       :returns: List containing parent module, optional class, function name"},{"line_number":145,"context_line":"       :rtype: list"},{"line_number":146,"context_line":"    \"\"\""},{"line_number":147,"context_line":"    if getattr(callback, \u0027im_class\u0027, None):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_ef741ad2","line":144,"updated":"2015-02-13 20:30:40.000000000","message":"This isn\u0027t quite true.","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"fa870ad73338f471cecd60a94224f7aba5fa273c","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"       :param callback: Function to call"},{"line_number":143,"context_line":"       :type callback: function"},{"line_number":144,"context_line":"       :returns: List containing parent module, optional class, function name"},{"line_number":145,"context_line":"       :rtype: list"},{"line_number":146,"context_line":"    \"\"\""},{"line_number":147,"context_line":"    if getattr(callback, \u0027im_class\u0027, None):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_5c00b800","line":144,"in_reply_to":"da86d52c_ef741ad2","updated":"2015-02-19 20:55:07.000000000","message":"Done","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"8d910f0de4e08acc740dcdfc1e82623c6013a734","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"def register_event_callback(event, resource_type, callbacks):"},{"line_number":156,"context_line":"    \"\"\"Register each callback with the event"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    :param event: Action being registered"},{"line_number":159,"context_line":"    :type event: keystone.notifications.ACTIONS"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_0f724ee3","line":156,"updated":"2015-02-13 20:30:40.000000000","message":"Add period","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"917f6e751745d782ad8b5eb70d87b9c819bcca91","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"def register_event_callback(event, resource_type, callbacks):"},{"line_number":156,"context_line":"    \"\"\"Register each callback with the event"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    :param event: Action being registered"},{"line_number":159,"context_line":"    :type event: keystone.notifications.ACTIONS"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_c81e3974","line":156,"in_reply_to":"da86d52c_0f724ee3","updated":"2015-02-19 20:43:42.000000000","message":"Done","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"86b83cdf0b37c0272a7e32859129164bb2d217eb","unresolved":false,"context_lines":[{"line_number":155,"context_line":"def register_event_callback(event, resource_type, callbacks):"},{"line_number":156,"context_line":"    \"\"\"Register each callback with the event"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    :param event: Action being registered"},{"line_number":159,"context_line":"    :type event: keystone.notifications.ACTIONS"},{"line_number":160,"context_line":"    :param resource_type: type of resource being operated on"},{"line_number":161,"context_line":"    :type resource_type: str"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_0656c22a","line":158,"updated":"2015-02-13 17:03:21.000000000","message":"suggest using either capitalizing the first letter of each docstring or leaving them lower-cased. Some are one way and some are another.","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"917f6e751745d782ad8b5eb70d87b9c819bcca91","unresolved":false,"context_lines":[{"line_number":155,"context_line":"def register_event_callback(event, resource_type, callbacks):"},{"line_number":156,"context_line":"    \"\"\"Register each callback with the event"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    :param event: Action being registered"},{"line_number":159,"context_line":"    :type event: keystone.notifications.ACTIONS"},{"line_number":160,"context_line":"    :param resource_type: type of resource being operated on"},{"line_number":161,"context_line":"    :type resource_type: str"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_898cb036","line":158,"in_reply_to":"da86d52c_0656c22a","updated":"2015-02-19 20:43:42.000000000","message":"Done","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2bc24d997fd4a5f537a7def554cf20475aa0572f","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    :type resource_type: str"},{"line_number":162,"context_line":"    :param callbacks: callback items to be registered with event"},{"line_number":163,"context_line":"    :type callbacks: list"},{"line_number":164,"context_line":"    :raises: ValueError, TypeError"},{"line_number":165,"context_line":"    \"\"\""},{"line_number":166,"context_line":"    if event not in ACTIONS:"},{"line_number":167,"context_line":"        raise ValueError(_(\u0027%(event)s is not a valid notification event, must \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_3e006f33","line":164,"updated":"2015-02-05 17:26:15.000000000","message":"this should be\n\n :raises ValueError: (under what condition?)\n :raises TypeError: (?)\n\nsee http://sphinx-doc.org/domains.html#info-field-lists","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"917f6e751745d782ad8b5eb70d87b9c819bcca91","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    :type resource_type: str"},{"line_number":162,"context_line":"    :param callbacks: callback items to be registered with event"},{"line_number":163,"context_line":"    :type callbacks: list"},{"line_number":164,"context_line":"    :raises: ValueError, TypeError"},{"line_number":165,"context_line":"    \"\"\""},{"line_number":166,"context_line":"    if event not in ACTIONS:"},{"line_number":167,"context_line":"        raise ValueError(_(\u0027%(event)s is not a valid notification event, must \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_6e70f5a4","line":164,"in_reply_to":"da86d52c_3e006f33","updated":"2015-02-19 20:43:42.000000000","message":"Done","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"86b83cdf0b37c0272a7e32859129164bb2d217eb","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"def clear_subscribers():"},{"line_number":230,"context_line":"    \"\"\"Empty subscribers dictionary. This effectively stops notifications"},{"line_number":231,"context_line":"       since there will be no subscribers to publish to."},{"line_number":232,"context_line":"    \"\"\""},{"line_number":233,"context_line":"    _SUBSCRIBERS.clear()"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_8610f25a","line":230,"updated":"2015-02-13 17:03:21.000000000","message":"Split this up into multiple lines where the first is under 80 characters. \n\nhttps://www.python.org/dev/peps/pep-0257/#multi-line-docstrings\n\nalso add period.","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"917f6e751745d782ad8b5eb70d87b9c819bcca91","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"def clear_subscribers():"},{"line_number":230,"context_line":"    \"\"\"Empty subscribers dictionary. This effectively stops notifications"},{"line_number":231,"context_line":"       since there will be no subscribers to publish to."},{"line_number":232,"context_line":"    \"\"\""},{"line_number":233,"context_line":"    _SUBSCRIBERS.clear()"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_ce6001d2","line":230,"in_reply_to":"da86d52c_8610f25a","updated":"2015-02-19 20:43:42.000000000","message":"Done","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"86b83cdf0b37c0272a7e32859129164bb2d217eb","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"def _get_request_audit_info(context, user_id\u003dNone):"},{"line_number":277,"context_line":"    \"\"\"Collect audit information about the request used for CADF"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    :param context: Request context"},{"line_number":280,"context_line":"    :param user_id: Optional user ID, alternatively collected from context"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_3146a250","line":277,"updated":"2015-02-13 17:03:21.000000000","message":"add period.","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"917f6e751745d782ad8b5eb70d87b9c819bcca91","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"def _get_request_audit_info(context, user_id\u003dNone):"},{"line_number":277,"context_line":"    \"\"\"Collect audit information about the request used for CADF"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    :param context: Request context"},{"line_number":280,"context_line":"    :param user_id: Optional user ID, alternatively collected from context"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_eeb22548","line":277,"in_reply_to":"da86d52c_3146a250","updated":"2015-02-19 20:43:42.000000000","message":"Done","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2bc24d997fd4a5f537a7def554cf20475aa0572f","unresolved":false,"context_lines":[{"line_number":279,"context_line":"    :param context: Request context"},{"line_number":280,"context_line":"    :param user_id: Optional user ID, alternatively collected from context"},{"line_number":281,"context_line":"    :returns: Auditing data about the request"},{"line_number":282,"context_line":"    :rtype: pycadf.Resource"},{"line_number":283,"context_line":"    \"\"\""},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    remote_addr \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_9ebf9b60","line":282,"updated":"2015-02-05 17:26:15.000000000","message":"I think you need :class:`pycadf.Resource` to make it a ref.","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"917f6e751745d782ad8b5eb70d87b9c819bcca91","unresolved":false,"context_lines":[{"line_number":279,"context_line":"    :param context: Request context"},{"line_number":280,"context_line":"    :param user_id: Optional user ID, alternatively collected from context"},{"line_number":281,"context_line":"    :returns: Auditing data about the request"},{"line_number":282,"context_line":"    :rtype: pycadf.Resource"},{"line_number":283,"context_line":"    \"\"\""},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    remote_addr \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_6e11d503","line":282,"in_reply_to":"da86d52c_9ebf9b60","updated":"2015-02-19 20:43:42.000000000","message":"Done","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"86b83cdf0b37c0272a7e32859129164bb2d217eb","unresolved":false,"context_lines":[{"line_number":416,"context_line":"def send_saml_audit_notification(action, context, user_id, group_ids,"},{"line_number":417,"context_line":"                                 identity_provider, protocol, token_id,"},{"line_number":418,"context_line":"                                 outcome):"},{"line_number":419,"context_line":"    \"\"\"Send notification to inform observers about SAML events"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    :param action: Action being audited"},{"line_number":422,"context_line":"    :param context: Current request context to collect request info from"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_f1624ad8","line":419,"updated":"2015-02-13 17:03:21.000000000","message":"add period.","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"917f6e751745d782ad8b5eb70d87b9c819bcca91","unresolved":false,"context_lines":[{"line_number":416,"context_line":"def send_saml_audit_notification(action, context, user_id, group_ids,"},{"line_number":417,"context_line":"                                 identity_provider, protocol, token_id,"},{"line_number":418,"context_line":"                                 outcome):"},{"line_number":419,"context_line":"    \"\"\"Send notification to inform observers about SAML events"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    :param action: Action being audited"},{"line_number":422,"context_line":"    :param context: Current request context to collect request info from"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_ae758d34","line":419,"in_reply_to":"da86d52c_f1624ad8","updated":"2015-02-19 20:43:42.000000000","message":"Done","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2bc24d997fd4a5f537a7def554cf20475aa0572f","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                                 outcome):"},{"line_number":419,"context_line":"    \"\"\"Send notification to inform observers about SAML events"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    :param action: Action being audited"},{"line_number":422,"context_line":"    :param context: Current request context to collect request info from"},{"line_number":423,"context_line":"    :param user_id: User ID from Keystone token"},{"line_number":424,"context_line":"    :param group_ids: List of Group IDs from Keystone token"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_5ea9a322","line":421,"updated":"2015-02-05 17:26:15.000000000","message":"what\u0027s the type of all these params?","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":14578,"name":"Tom Cameron","email":"tom.cameron@rackspace.com","username":"tom.cameron"},"change_message_id":"917f6e751745d782ad8b5eb70d87b9c819bcca91","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                                 outcome):"},{"line_number":419,"context_line":"    \"\"\"Send notification to inform observers about SAML events"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    :param action: Action being audited"},{"line_number":422,"context_line":"    :param context: Current request context to collect request info from"},{"line_number":423,"context_line":"    :param user_id: User ID from Keystone token"},{"line_number":424,"context_line":"    :param group_ids: List of Group IDs from Keystone token"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_69385ca0","line":421,"in_reply_to":"da86d52c_5ea9a322","updated":"2015-02-19 20:43:42.000000000","message":"Done","commit_id":"30e951f55a5734cab461815174fae818178a892d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"60812a9f5a3c8016ef53303a6e57d6ef53ed43f9","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            LOG.debug(msg, {\u0027callback\u0027: callback_str, \u0027event\u0027: event_str})"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"def notify_event_callbacks(service, resource_type, operation, payload):"},{"line_number":193,"context_line":"    \"\"\"Sends a notification to registered extensions.\"\"\""},{"line_number":194,"context_line":"    if operation in _SUBSCRIBERS:"},{"line_number":195,"context_line":"        if resource_type in _SUBSCRIBERS[operation]:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_3020f3af","line":192,"updated":"2015-03-12 18:05:50.000000000","message":"missing doc strings here","commit_id":"05cfb0a7e3e75f3dc97c7d6f8df5148071b089db"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"6d03a083aa5ec0e9cd1b5fbb8482a631bc2c457a","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"def reset_notifier():"},{"line_number":240,"context_line":"    \"\"\"Set _notifier to None which indicates it has not been set up\"\"\""},{"line_number":241,"context_line":"    global _notifier"},{"line_number":242,"context_line":"    _notifier \u003d None"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_e7a3c79b","line":240,"updated":"2015-03-13 18:35:24.000000000","message":"I\u0027d actually rather this not talk about the internal implemenation. Just what it\u0027s supposed to do.","commit_id":"05cfb0a7e3e75f3dc97c7d6f8df5148071b089db"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"52c19ac5559505c29dd4d74a3e5606dac50ac3f5","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"def reset_notifier():"},{"line_number":240,"context_line":"    \"\"\"Set _notifier to None which indicates it has not been set up\"\"\""},{"line_number":241,"context_line":"    global _notifier"},{"line_number":242,"context_line":"    _notifier \u003d None"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_fd8ceb81","line":240,"updated":"2015-02-20 01:48:33.000000000","message":"nit: add a dot \".\" in the end","commit_id":"05cfb0a7e3e75f3dc97c7d6f8df5148071b089db"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"60812a9f5a3c8016ef53303a6e57d6ef53ed43f9","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"def reset_notifier():"},{"line_number":240,"context_line":"    \"\"\"Set _notifier to None which indicates it has not been set up\"\"\""},{"line_number":241,"context_line":"    global _notifier"},{"line_number":242,"context_line":"    _notifier \u003d None"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_f071fba8","line":240,"in_reply_to":"ba7be1f8_fd8ceb81","updated":"2015-03-12 18:05:50.000000000","message":"++","commit_id":"05cfb0a7e3e75f3dc97c7d6f8df5148071b089db"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"60812a9f5a3c8016ef53303a6e57d6ef53ed43f9","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    This method doesn\u0027t raise an exception when sending the notification fails."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    :param operation: operation being performed (created, updated, or deleted)"},{"line_number":251,"context_line":"    :param resource_type: type of resource being operated on"},{"line_number":252,"context_line":"    :param resource_id: ID of resource being operated on"},{"line_number":253,"context_line":"    :param public:  if True (default), the event will be sent"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_70534b39","line":250,"updated":"2015-03-12 18:05:50.000000000","message":"need type docs here to be consistent?","commit_id":"05cfb0a7e3e75f3dc97c7d6f8df5148071b089db"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"60812a9f5a3c8016ef53303a6e57d6ef53ed43f9","unresolved":false,"context_lines":[{"line_number":279,"context_line":"def _get_request_audit_info(context, user_id\u003dNone):"},{"line_number":280,"context_line":"    \"\"\"Collect audit information about the request used for CADF."},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    :param context: Request context"},{"line_number":283,"context_line":"    :param user_id: Optional user ID, alternatively collected from context"},{"line_number":284,"context_line":"    :returns: Auditing data about the request"},{"line_number":285,"context_line":"    :rtype: :class:`pycadf.Resource`"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_d0b6b789","line":282,"updated":"2015-03-12 18:05:50.000000000","message":":type context: dict","commit_id":"05cfb0a7e3e75f3dc97c7d6f8df5148071b089db"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"60812a9f5a3c8016ef53303a6e57d6ef53ed43f9","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    \"\"\"Collect audit information about the request used for CADF."},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    :param context: Request context"},{"line_number":283,"context_line":"    :param user_id: Optional user ID, alternatively collected from context"},{"line_number":284,"context_line":"    :returns: Auditing data about the request"},{"line_number":285,"context_line":"    :rtype: :class:`pycadf.Resource`"},{"line_number":286,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_70a50b46","line":283,"updated":"2015-03-12 18:05:50.000000000","message":":type user_id: string","commit_id":"05cfb0a7e3e75f3dc97c7d6f8df5148071b089db"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"60812a9f5a3c8016ef53303a6e57d6ef53ed43f9","unresolved":false,"context_lines":[{"line_number":455,"context_line":"    \"\"\"Send CADF notification to inform observers about the affected resource."},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    This method logs an exception when sending the notification fails."},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    :param action: CADF action being audited (e.g., \u0027authenticate\u0027)"},{"line_number":460,"context_line":"    :param initiator: CADF resource representing the initiator"},{"line_number":461,"context_line":"    :param outcome: The CADF outcome (taxonomy.OUTCOME_PENDING,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_d044f775","line":458,"updated":"2015-03-12 18:05:50.000000000","message":"need type docs here?","commit_id":"05cfb0a7e3e75f3dc97c7d6f8df5148071b089db"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5158f954a28d8c3da212834c68278310604cda19","unresolved":false,"context_lines":[{"line_number":286,"context_line":"    :param context: Request context"},{"line_number":287,"context_line":"    :param user_id: Optional user ID, alternatively collected from context"},{"line_number":288,"context_line":"    :returns: Auditing data about the request"},{"line_number":289,"context_line":"    :rtype: :class:`pycadf.Resource`"},{"line_number":290,"context_line":"    \"\"\""},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    remote_addr \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_b18d057e","line":289,"updated":"2015-03-24 00:37:44.000000000","message":"pycadf.resource.Resource","commit_id":"b5f326ce1cec71a906b56148d6106a407e96dd0a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5158f954a28d8c3da212834c68278310604cda19","unresolved":false,"context_lines":[{"line_number":429,"context_line":"    :type action: str"},{"line_number":430,"context_line":"    :param context: Current request context to collect request info from"},{"line_number":431,"context_line":"    :type context: dict"},{"line_number":432,"context_line":"    :param user_id: User ID from Keystone token"},{"line_number":433,"context_line":"    :type user_id: str"},{"line_number":434,"context_line":"    :param group_ids: List of Group IDs from Keystone token"},{"line_number":435,"context_line":"    :type group_ids: list"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_11f419f1","line":432,"updated":"2015-03-24 00:37:44.000000000","message":"lowercase keystone","commit_id":"b5f326ce1cec71a906b56148d6106a407e96dd0a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5158f954a28d8c3da212834c68278310604cda19","unresolved":false,"context_lines":[{"line_number":437,"context_line":"    :type identity_provider: str or None"},{"line_number":438,"context_line":"    :param protocol: Protocol ID for IdP from the Keystone token"},{"line_number":439,"context_line":"    :type protocol: str"},{"line_number":440,"context_line":"    :param token_id: audit_id from Keystone token"},{"line_number":441,"context_line":"    :type token_id: str or None"},{"line_number":442,"context_line":"    :param outcome: One of :class:`pycadf.cadftaxonomy`"},{"line_number":443,"context_line":"    :type outcome: str"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_71daad79","line":440,"updated":"2015-03-24 00:37:44.000000000","message":"why don\u0027t we just pass in a token?","commit_id":"b5f326ce1cec71a906b56148d6106a407e96dd0a"}]}
