)]}'
{"neutron_lib/callbacks/events.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"73513f82dc7d4f6b62722d52f73f998eeed852ed","unresolved":false,"context_lines":[{"line_number":27,"context_line":"ABORT_DELETE \u003d \u0027abort_delete\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"ABORT \u003d \u0027abort_\u0027"},{"line_number":30,"context_line":"BEFORE \u003d \u0027before_\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_3cf0ddfd","line":30,"updated":"2015-12-08 00:28:57.000000000","message":"no units needed here.","commit_id":"19245c40ef11708d40f88fe400b4cca046a2324f"}],"neutron_lib/callbacks/exceptions.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"11090b516e612b88072aadf2387bfd9982cab655","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from neutron.common import exceptions"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class Invalid(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_d247991b","line":13,"updated":"2015-12-04 20:15:56.000000000","message":"this should never reference neutron","commit_id":"3040f0644c35ca2255ad3747d291c9e3dc9b72ed"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"831eeda0d7a0ac1b45cc6d28373e41c9a319f609","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from neutron.common import exceptions"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class Invalid(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_67335015","line":13,"updated":"2015-12-07 13:05:41.000000000","message":"this should be neutron_lib.. i think NeutronException has been merged into neutron-lib","commit_id":"20844bb4df5e080615bd8de3fbcb5217d511a087"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"d5c67df2c0f707838ce3eab673ed28ff6eb79b76","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from neutron.common import exceptions"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class Invalid(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_9b65691f","line":13,"in_reply_to":"7a740942_67335015","updated":"2015-12-07 17:43:02.000000000","message":"+1","commit_id":"20844bb4df5e080615bd8de3fbcb5217d511a087"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"1f3a3433a95c39439276ac0577826c73e33e3c30","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from neutron.common import exceptions"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class Invalid(exceptions.NeutronException):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_860f4c87","line":13,"in_reply_to":"7a740942_9b65691f","updated":"2015-12-07 18:01:53.000000000","message":"Thanks. Will update.","commit_id":"20844bb4df5e080615bd8de3fbcb5217d511a087"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"73513f82dc7d4f6b62722d52f73f998eeed852ed","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.error \u003d error"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __str__(self):"},{"line_number":39,"context_line":"        return \u0027Callback %s failed with \"%s\"\u0027 % (self.callback_id, self.error)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_fcf575ec","line":39,"updated":"2015-12-08 00:28:57.000000000","message":"if it has special code, it should have a unit test.  test_callbacks_exceptions.py, refer to test_exceptions.py","commit_id":"19245c40ef11708d40f88fe400b4cca046a2324f"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"41e11e63d3033e989f94a88e7f52a967139362b7","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.error \u003d error"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __str__(self):"},{"line_number":39,"context_line":"        return \u0027Callback %s failed with \"%s\"\u0027 % (self.callback_id, self.error)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_dc541dcb","line":39,"in_reply_to":"7a740942_fcf575ec","updated":"2015-12-08 14:46:07.000000000","message":"There are already tests for the exception. Will add tests for the exception methods.","commit_id":"19245c40ef11708d40f88fe400b4cca046a2324f"}],"neutron_lib/callbacks/manager.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"73513f82dc7d4f6b62722d52f73f998eeed852ed","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    # TODO(armax): consider using something other than names"},{"line_number":160,"context_line":"    # https://www.python.org/dev/peps/pep-3155/, but this"},{"line_number":161,"context_line":"    # might be okay for now."},{"line_number":162,"context_line":"    return reflection.get_callable_name(callback)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_1cd2c15c","line":162,"updated":"2015-12-08 00:28:57.000000000","message":"this unit test is almost complete, but it\u0027s missing _get_id()","commit_id":"19245c40ef11708d40f88fe400b4cca046a2324f"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"41e11e63d3033e989f94a88e7f52a967139362b7","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    # TODO(armax): consider using something other than names"},{"line_number":160,"context_line":"    # https://www.python.org/dev/peps/pep-3155/, but this"},{"line_number":161,"context_line":"    # might be okay for now."},{"line_number":162,"context_line":"    return reflection.get_callable_name(callback)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_c5667c50","line":162,"in_reply_to":"7a740942_1cd2c15c","updated":"2015-12-08 14:46:07.000000000","message":"_get_id is used in tests, but the output of this is not tested. Frankly, it is not something we need to test, as _get_id can\u0027t break (reflection can, but I don\u0027t think we should be testing the library used).\n\nTo make you happy, I\u0027ll add one check of _get_id. :)","commit_id":"19245c40ef11708d40f88fe400b4cca046a2324f"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"e16b53a66995e59d08051118d043a185f62f9764","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                    del self._callbacks[resource][event][callback_id]"},{"line_number":133,"context_line":"            del self._index[callback_id]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def notify(self, resource, event, trigger, **kwargs):"},{"line_number":136,"context_line":"        \"\"\"Notify all subscribed callback(s)."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        Dispatch the resource\u0027s event to the subscribed callbacks."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_ea5c5eef","line":135,"updated":"2015-12-14 21:05:40.000000000","message":"Isn\u0027t kwargs supposed to be gone?","commit_id":"41642658ece0465734455209face693b899c1528"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c914b222d69cede09db0ebfa1abb04cb6f93980b","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                    del self._callbacks[resource][event][callback_id]"},{"line_number":133,"context_line":"            del self._index[callback_id]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def notify(self, resource, event, trigger, **kwargs):"},{"line_number":136,"context_line":"        \"\"\"Notify all subscribed callback(s)."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        Dispatch the resource\u0027s event to the subscribed callbacks."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_206847f5","line":135,"in_reply_to":"5a710552_40fc733e","updated":"2015-12-14 22:12:25.000000000","message":"Should we make the payload optional (as a keyword arg), or mandatory (positional)?","commit_id":"41642658ece0465734455209face693b899c1528"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"f478ac88af4469f7d2025f3d74ff8ba8d6ecd551","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                    del self._callbacks[resource][event][callback_id]"},{"line_number":133,"context_line":"            del self._index[callback_id]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def notify(self, resource, event, trigger, **kwargs):"},{"line_number":136,"context_line":"        \"\"\"Notify all subscribed callback(s)."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        Dispatch the resource\u0027s event to the subscribed callbacks."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_40fc733e","line":135,"in_reply_to":"5a710552_ea5c5eef","updated":"2015-12-14 22:07:14.000000000","message":"It should! Just checking that you\u0027re reviewing. :) \n\nActually, I wanted to vett the whole idea of registration, to see if it makes sense, before cleaning this up. Please see the spots with TODO(pcm) in this patchset for questions I had related to the proposed method.","commit_id":"41642658ece0465734455209face693b899c1528"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c914b222d69cede09db0ebfa1abb04cb6f93980b","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        for callback_id, callback in callbacks:"},{"line_number":169,"context_line":"            LOG.debug(\"Calling callback %s\", callback_id)"},{"line_number":170,"context_line":"            actual_payload_type \u003d type(kwargs.get(\u0027payload\u0027, None))"},{"line_number":171,"context_line":"            if actual_payload_type !\u003d payload_type_expected:"},{"line_number":172,"context_line":"                raise exceptions.BadPayloadType("},{"line_number":173,"context_line":"                    resource\u003dresource,"},{"line_number":174,"context_line":"                    event\u003devent,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_9b108e50","line":171,"updated":"2015-12-14 22:12:25.000000000","message":"This should test isinstance - methinks","commit_id":"41642658ece0465734455209face693b899c1528"}],"neutron_lib/callbacks/registry.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"73513f82dc7d4f6b62722d52f73f998eeed852ed","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def clear():"},{"line_number":48,"context_line":"    _get_callback_manager().clear()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_9cc6b198","line":48,"updated":"2015-12-08 00:28:57.000000000","message":"no unit test.","commit_id":"19245c40ef11708d40f88fe400b4cca046a2324f"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"41e11e63d3033e989f94a88e7f52a967139362b7","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def clear():"},{"line_number":48,"context_line":"    _get_callback_manager().clear()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_3699b57c","line":48,"in_reply_to":"7a740942_9cc6b198","updated":"2015-12-08 14:46:07.000000000","message":"Done","commit_id":"19245c40ef11708d40f88fe400b4cca046a2324f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"7d5c4ad11ec825543de597985ca9f95b67f115bd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3a7e1126_9b98976c","updated":"2015-12-16 23:05:23.000000000","message":"This file has zero test coverage.\n\n Name                                  Stmts   Miss Branch BrPart  Cover\n -----------------------------------------------------------------------\n neutron_lib/__init__.py                   2      0      0      0   100%\n neutron_lib/_i18n.py                      7      0      0      0   100%\n neutron_lib/callbacks/__init__.py         0      0      0      0   100%\n neutron_lib/callbacks/events.py          14      0      0      0   100%\n neutron_lib/callbacks/exceptions.py      17      0      4      0   100%\n neutron_lib/callbacks/manager.py         78      2     28      7    92%\n neutron_lib/callbacks/registry.py        18     18      2      0     0%**\n neutron_lib/callbacks/resources.py        9      0      0      0   100%\n neutron_lib/constants.py                 73     73      0      0     0%\n neutron_lib/exceptions.py               110      1     10      1    98%\n neutron_lib/version.py                    2      2      0      0     0%\n -----------------------------------------------------------------------\n TOTAL                                   330     96     44      8    72%","commit_id":"a57b6ff2de04289539ff43dec97fdab720a7b148"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4aa22a5964e43d368cbd63496c68647402fe59ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3a7e1126_398ccb34","in_reply_to":"3a7e1126_13f9b580","updated":"2015-12-17 14:53:13.000000000","message":"Since this is an API, I\u0027ll add in tests w/mocks to ensure the calls are directed right.","commit_id":"a57b6ff2de04289539ff43dec97fdab720a7b148"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"77669cda0165e2486cf4713852f144dbbb52a3c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3a7e1126_13f9b580","in_reply_to":"3a7e1126_9b98976c","updated":"2015-12-17 13:31:59.000000000","message":"I don\u0027t think test coverage is needed here. The methods are wrappers for calls into manager.py, where the functionality lives (and is tested).\n\nI don\u0027t think there is usefulness in verifying that the singleton access works.","commit_id":"a57b6ff2de04289539ff43dec97fdab720a7b148"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"7d5c4ad11ec825543de597985ca9f95b67f115bd","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def unsubscribe(callback, resource, event):"},{"line_number":32,"context_line":"    _get_callback_manager().xounsubscribe(callback, resource, event)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def unsubscribe_by_resource(callback, resource):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_9b08972a","line":32,"updated":"2015-12-16 23:05:23.000000000","message":"xounsubscribe -\u003e unsubscribe","commit_id":"a57b6ff2de04289539ff43dec97fdab720a7b148"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"77669cda0165e2486cf4713852f144dbbb52a3c6","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def unsubscribe(callback, resource, event):"},{"line_number":32,"context_line":"    _get_callback_manager().xounsubscribe(callback, resource, event)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def unsubscribe_by_resource(callback, resource):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_f31749eb","line":32,"in_reply_to":"3a7e1126_9b08972a","updated":"2015-12-17 13:31:59.000000000","message":"whoops. Emacs... C-x o \u003d\u003e other buffer. Will fix.","commit_id":"a57b6ff2de04289539ff43dec97fdab720a7b148"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4aa22a5964e43d368cbd63496c68647402fe59ea","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def unsubscribe(callback, resource, event):"},{"line_number":32,"context_line":"    _get_callback_manager().xounsubscribe(callback, resource, event)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def unsubscribe_by_resource(callback, resource):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_79ed73ee","line":32,"in_reply_to":"3a7e1126_f31749eb","updated":"2015-12-17 14:53:13.000000000","message":"Done","commit_id":"a57b6ff2de04289539ff43dec97fdab720a7b148"}],"neutron_lib/callbacks/resources.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"73513f82dc7d4f6b62722d52f73f998eeed852ed","unresolved":false,"context_lines":[{"line_number":19,"context_line":"SECURITY_GROUP \u003d \u0027security_group\u0027"},{"line_number":20,"context_line":"SECURITY_GROUP_RULE \u003d \u0027security_group_rule\u0027"},{"line_number":21,"context_line":"SUBNET \u003d \u0027subnet\u0027"},{"line_number":22,"context_line":"SUBNET_GATEWAY \u003d \u0027subnet_gateway\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_3c3e9d8c","line":22,"updated":"2015-12-08 00:28:57.000000000","message":"constants, nothing needed.","commit_id":"19245c40ef11708d40f88fe400b4cca046a2324f"}],"neutron_lib/tests/unit/callback/test_manager.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"11090b516e612b88072aadf2387bfd9982cab655","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron_lib.callbacks import events"},{"line_number":18,"context_line":"from neutron_lib.callbacks import exceptions"},{"line_number":19,"context_line":"from neutron_lib.callbacks import manager"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_f20f35df","line":16,"updated":"2015-12-04 20:15:56.000000000","message":"There should be unit tests for every method/function/exception that has code.","commit_id":"3040f0644c35ca2255ad3747d291c9e3dc9b72ed"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"d5c67df2c0f707838ce3eab673ed28ff6eb79b76","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron_lib.callbacks import events"},{"line_number":18,"context_line":"from neutron_lib.callbacks import exceptions"},{"line_number":19,"context_line":"from neutron_lib.callbacks import manager"},{"line_number":20,"context_line":"from neutron_lib.callbacks import resources"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_5b6b81f1","line":17,"updated":"2015-12-07 17:43:02.000000000","message":"unit tests are not complete.","commit_id":"20844bb4df5e080615bd8de3fbcb5217d511a087"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"1f3a3433a95c39439276ac0577826c73e33e3c30","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron_lib.callbacks import events"},{"line_number":18,"context_line":"from neutron_lib.callbacks import exceptions"},{"line_number":19,"context_line":"from neutron_lib.callbacks import manager"},{"line_number":20,"context_line":"from neutron_lib.callbacks import resources"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_26577859","line":17,"in_reply_to":"7a740942_5b6b81f1","updated":"2015-12-07 18:01:53.000000000","message":"This is just a move of the existing callback unit tests from neutron. Are you requesting additional tests? What testing would you want to see?","commit_id":"20844bb4df5e080615bd8de3fbcb5217d511a087"}],"neutron_lib/tests/unit/callbacks/test_callback_exceptions.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"42339b176c5794ce68accfc54fa342f51f5c82ba","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    raise exc_class(**kwargs)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestCallbackExceptions(base.TestCase):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def _check_exception(self, exc_class, expected_msg, **kwargs):"},{"line_number":35,"context_line":"        raise_exc_class \u003d functools.partial(_raise, exc_class)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_963e1e28","line":32,"updated":"2015-12-09 17:39:16.000000000","message":"I\u0027d suggest deriving from the other exception test class.","commit_id":"fb61047fc61fc9267d3fd3c3bf391c5769efe28b"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"bda61836928b292ae3ad7dbc578fa5818c2dd4db","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    raise exc_class(**kwargs)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestCallbackExceptions(base.TestCase):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def _check_exception(self, exc_class, expected_msg, **kwargs):"},{"line_number":35,"context_line":"        raise_exc_class \u003d functools.partial(_raise, exc_class)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_9973ae15","line":32,"in_reply_to":"7a740942_19b49ecf","updated":"2015-12-09 18:56:31.000000000","message":"You can not dup the helper, right?","commit_id":"fb61047fc61fc9267d3fd3c3bf391c5769efe28b"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"57ebdacffbd017785fe88483e1e3896c22c77ee5","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    raise exc_class(**kwargs)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestCallbackExceptions(base.TestCase):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def _check_exception(self, exc_class, expected_msg, **kwargs):"},{"line_number":35,"context_line":"        raise_exc_class \u003d functools.partial(_raise, exc_class)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_19b49ecf","line":32,"in_reply_to":"7a740942_963e1e28","updated":"2015-12-09 18:54:00.000000000","message":"OK. Was just cutting out an extra level of inheritance that didn\u0027t do anything.","commit_id":"fb61047fc61fc9267d3fd3c3bf391c5769efe28b"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"a94fb00787e2991e1c0e793692364f889ccd89f3","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    raise exc_class(**kwargs)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestCallbackExceptions(base.TestCase):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def _check_exception(self, exc_class, expected_msg, **kwargs):"},{"line_number":35,"context_line":"        raise_exc_class \u003d functools.partial(_raise, exc_class)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_57166da8","line":32,"in_reply_to":"7a740942_9973ae15","updated":"2015-12-09 19:43:23.000000000","message":"If you are talking about _check_nexc(), no, because some of the exceptions are not based on neutron exceptions and don\u0027t have use_fatal_exceptions() method.","commit_id":"fb61047fc61fc9267d3fd3c3bf391c5769efe28b"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"817e83dcf128d9ce32f1d45f9553d53adc3880a0","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def _check_exception(self, exc_class, expected_msg, **kwargs):"},{"line_number":31,"context_line":"        raise_exc_class \u003d functools.partial(base._raise, exc_class)"},{"line_number":32,"context_line":"        e \u003d self.assertRaises(exc_class, raise_exc_class, **kwargs)"},{"line_number":33,"context_line":"        self.assertEqual(expected_msg, str(e))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_invalid(self):"},{"line_number":36,"context_line":"        self._check_exception("}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_ad2420c6","line":33,"updated":"2015-12-09 20:30:04.000000000","message":"Is there a reason you didn\u0027t use the check call in the base class? I agree that deriving without doing that is a waste.","commit_id":"4c538fe33011fff49f041a70397983de048ae29a"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ca4ebc97ec31284633bcea5cab72af335141362e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def _check_exception(self, exc_class, expected_msg, **kwargs):"},{"line_number":31,"context_line":"        raise_exc_class \u003d functools.partial(base._raise, exc_class)"},{"line_number":32,"context_line":"        e \u003d self.assertRaises(exc_class, raise_exc_class, **kwargs)"},{"line_number":33,"context_line":"        self.assertEqual(expected_msg, str(e))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_invalid(self):"},{"line_number":36,"context_line":"        self._check_exception("}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_3a1b6182","line":33,"in_reply_to":"7a740942_ad2420c6","updated":"2015-12-10 12:20:24.000000000","message":"As replied in PS5, _check_nexc() has assert for use_fatal_exceptions(), which is present in Neutron based exceptions. CallbackFailure is not based on a neutron exception, and does not have that method.\n\nThat is why I didn\u0027t derive from the exception class.","commit_id":"4c538fe33011fff49f041a70397983de048ae29a"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c86830aff8737d08fa88c2385810c08d24cc12ef","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def test_duplicate_registration(self):"},{"line_number":59,"context_line":"        self._check_exception("},{"line_number":60,"context_line":"            ex.DuplicatePayloadRegistration,"},{"line_number":61,"context_line":"            \"Payload type \u003ctype \u0027dict\u0027\u003e is already registered for resource \""},{"line_number":62,"context_line":"            \"\u0027foo\u0027 and event \u0027bar\u0027.\","},{"line_number":63,"context_line":"            payload_type\u003ddict, resource\u003d\u0027foo\u0027, event\u003d\u0027bar\u0027)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_9bf64ed6","line":61,"updated":"2015-12-14 22:19:48.000000000","message":"Py34 displays dict as \u003cclass \u0027dict\u0027\u003e","commit_id":"41642658ece0465734455209face693b899c1528"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c86830aff8737d08fa88c2385810c08d24cc12ef","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self._check_exception("},{"line_number":76,"context_line":"            ex.BadPayloadType,"},{"line_number":77,"context_line":"            \"Notification for resource \u0027foo\u0027 and event \u0027bar\u0027 has wrong \""},{"line_number":78,"context_line":"            \"payload type \u003ctype \u0027list\u0027\u003e.\","},{"line_number":79,"context_line":"            payload_type\u003dlist, resource\u003d\u0027foo\u0027, event\u003d\u0027bar\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_3b1aba18","line":78,"updated":"2015-12-14 22:19:48.000000000","message":"Difference in repr outptu for py34.","commit_id":"41642658ece0465734455209face693b899c1528"}],"neutron_lib/tests/unit/callbacks/test_manager.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c86830aff8737d08fa88c2385810c08d24cc12ef","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                            mock.ANY, payload\u003d{})"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def test_notify_with_exception(self):"},{"line_number":209,"context_line":"        self.manager.register_payload_type(mock.ANY, events.BEFORE_CREATE)"},{"line_number":210,"context_line":"        with mock.patch.object(self.manager, \u0027_notify_loop\u0027) as n:"},{"line_number":211,"context_line":"            n.return_value \u003d [\u0027error\u0027]"},{"line_number":212,"context_line":"            self.assertRaises(exceptions.CallbackFailure,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_dbce16b4","line":209,"updated":"2015-12-14 22:19:48.000000000","message":"Don\u0027t use mock for resource. Not hashable.","commit_id":"41642658ece0465734455209face693b899c1528"}]}
