)]}'
{"TESTING.rst":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"0270dc47ddf665ba21cc04fc7845a2c53a6da53b","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    $ ./.venv/bin/pip install pudb"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    $ OS_POST_MORTEM_DEBUGGER\u003dpudb ./tools/with_venv.sh python -m \\"},{"line_number":200,"context_line":"                                    testtools.run [test module path]"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9aa7fdbe_9b8201c7","line":200,"updated":"2014-10-29 15:53:24.000000000","message":"probably using tox -e venv pip install pudb\n\nand tox -e venv python -m testtools.run [test module path] \n\nworks within tox venv, but I\u0027m having some problem with that venv atm.","commit_id":"da849da0a895b7a84e821d97f3636c8dfd1c7815"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"f10e3bed66437623479a10ee9057a12e542771a2","unresolved":false,"context_lines":[{"line_number":192,"context_line":"OS_POST_MORTEM_DEBUGGER\u003dpudb enables post mortem debugging with pudb [#pudb]_"},{"line_number":193,"context_line":"instead of pdb. Pudb is full-screen, console-based visual debugger for Python"},{"line_number":194,"context_line":"which let you inspect variables, the stack, and breakpoints in a very"},{"line_number":195,"context_line":"visual way, keeping a high degree of compatibility with pdb."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    $ tox -e venv pip install pudb"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a8c0949_8ef73b8c","line":195,"updated":"2014-10-29 21:43:46.000000000","message":".-\u003e:","commit_id":"a28af73df3f1675f2065a5047017223bc5c180a9"}],"neutron/tests/base.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"0500d2f6b40e452720976ff38dfc4bf46459f692","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        super(BaseTestCase, self).setUp()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        # Configure this first to ensure pm debugging support for setUp()"},{"line_number":76,"context_line":"        debugger \u003d os.environ.get(\u0027OS_POST_MORTEM_DEBUGGER\u0027)"},{"line_number":77,"context_line":"        if debugger:"},{"line_number":78,"context_line":"            post_mortem_debug.set_debugger(debugger)"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9aa7fdbe_cccf7e56","line":76,"updated":"2014-10-29 10:50:59.000000000","message":"Since this is only needed when postmortem debugging is enabled, the logical place for configuring the debugger would be inside the if block starting on line 80.\n\nAlso:\n- consider setting the default in retrieving the environment variable to \u0027pdb\u0027 so that the logic around pdb and pudb can be consistent (i.e. on-demand)\n- consider using functools.partial to parametize the exception handler before it is passed to addOnException to avoid having to rely on globals (this should make testing easier too)\n- please add mention of OS_POST_MORTEM_DEBUGGER to the relevent section of TESTING.rst.  A mention of why pudb is useful (including links) is also recommended.","commit_id":"d2dac283e6bc235f5b296ac8b87d87b32f407a2a"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"0400189ee5d038734badd3567c37f77d6dce41c1","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        super(BaseTestCase, self).setUp()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        # Configure this first to ensure pm debugging support for setUp()"},{"line_number":76,"context_line":"        debugger \u003d os.environ.get(\u0027OS_POST_MORTEM_DEBUGGER\u0027)"},{"line_number":77,"context_line":"        if debugger:"},{"line_number":78,"context_line":"            post_mortem_debug.set_debugger(debugger)"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9aa7fdbe_7bbabdc1","line":76,"in_reply_to":"9aa7fdbe_cccf7e56","updated":"2014-10-29 15:49:27.000000000","message":"+1, let\u0027s see how do the next patchset looks.\n\nI have made OS_POST_MORTEM_DEBUGGER enabling the debugger itself, so you don\u0027t need to pass both flags, but it\u0027s backwards compatible so people don\u0027t need to rewire their devel envs.","commit_id":"d2dac283e6bc235f5b296ac8b87d87b32f407a2a"}],"neutron/tests/post_mortem_debug.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"1cf5061d81d1b52c42b646a69122681ab1a373ff","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    return functools.partial(_exception_handler, debugger)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def _get_debugger(debugger_name):"},{"line_number":28,"context_line":"    if debugger_name \u003d\u003d \u0027pdb\u0027:"},{"line_number":29,"context_line":"        import pdb"},{"line_number":30,"context_line":"        return pdb"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8c0949_b513220c","line":27,"updated":"2014-11-04 11:18:38.000000000","message":"Jakub Libosvar suggestion:\ntry:\n    debugger \u003d __import__(debugger_name)\n    return debugger\nexpect ImportError:","commit_id":"37c010361e28a7aa0c78b12827c7889e5d50df59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a47150a99279c18a428f05def3cd27379af763ec","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def _get_debugger(debugger_name):"},{"line_number":28,"context_line":"    debugger \u003d __import__(debugger_name)"},{"line_number":29,"context_line":"    if debugger and \u0027post_mortem\u0027 in dir(debugger):"},{"line_number":30,"context_line":"        return debugger"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    raise ValueError("}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_e8187c86","line":29,"updated":"2014-11-11 18:57:29.000000000","message":"Can be debugger evaluated as False? __import__ will raise exception if it cannot be imported so I guess:\n\n if hasattr(debugger, \u0027port_mortem\u0027):\n\nshould be ok.","commit_id":"c0ab787a79f39d4cfc5ff3e90f7bc2e6de9c6a2a"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"55ccddd99c0e571cd0b7ae7c047e4c992af3b3d6","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def _get_debugger(debugger_name):"},{"line_number":28,"context_line":"    debugger \u003d __import__(debugger_name)"},{"line_number":29,"context_line":"    if debugger and \u0027post_mortem\u0027 in dir(debugger):"},{"line_number":30,"context_line":"        return debugger"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    raise ValueError("}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_2aa3f801","line":29,"in_reply_to":"5a890539_e8187c86","updated":"2014-11-14 11:09:56.000000000","message":"+1 Correct, thanks Jakub, doing!,","commit_id":"c0ab787a79f39d4cfc5ff3e90f7bc2e6de9c6a2a"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"59517df09583a5e66a3555615e699ef84af76e1f","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import functools"},{"line_number":17,"context_line":"import traceback"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DEFAULT_DEBUGGER \u003d \u0027pdb\u0027"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def get_exception_handler(debugger_name\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_333a3099","line":19,"updated":"2014-11-26 16:26:28.000000000","message":"*sigh* I\u0027m too slow.  With the change to not use a default, this constant and it\u0027s use should have been unnecessary (i.e. remove this line, make the kwarg on line 22 an argument, and remove the \u0027or\u0027 close from line 23).","commit_id":"d37ff165f4cbf0079357895843dd2724e5a90b49"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d03bc9530289146f92b46d98705e4be1c4915c5c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import functools"},{"line_number":17,"context_line":"import traceback"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DEFAULT_DEBUGGER \u003d \u0027pdb\u0027"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def get_exception_handler(debugger_name\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_560deae7","line":19,"in_reply_to":"5a890539_333a3099","updated":"2014-11-26 16:50:29.000000000","message":"True!!, this isn\u0027t needed anymore, I will remove it in a follow up patch.\n\nGood catch.","commit_id":"d37ff165f4cbf0079357895843dd2724e5a90b49"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35c40f57433a93f4453e004bb5558b7c2e02a37a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"            return debugger"},{"line_number":32,"context_line":"    except ImportError:"},{"line_number":33,"context_line":"        raise ValueError("},{"line_number":34,"context_line":"            _(\"can\u0027t import %s module as a post mortem debugger\") %"},{"line_number":35,"context_line":"            debugger_name)"},{"line_number":36,"context_line":"    raise ValueError("},{"line_number":37,"context_line":"        _(\"%s is not a supported post mortem debugger\") % debugger_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_56aeca82","line":34,"updated":"2014-11-26 16:55:45.000000000","message":"Also, I don\u0027t think we want to have to internationalize test-only messages. (same comment applies to line 37)","commit_id":"d37ff165f4cbf0079357895843dd2724e5a90b49"}]}
