)]}'
{"HACKING.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b9cf5b4e0a12ecebf5f113513b9c8ed11223a39","unresolved":false,"context_lines":[{"line_number":37,"context_line":"- [N324] Ensure that jsonutils.%(fun)s must be used instead of json.%(fun)s"},{"line_number":38,"context_line":"- [N325] str() and unicode() cannot be used on an exception.  Remove use or use six.text_type()"},{"line_number":39,"context_line":"- [N326] Translated messages cannot be concatenated.  String should be included in translated message."},{"line_number":40,"context_line":"- [N327] Do not use xrange(). xrange() is not compatible with Python 3. Use range() or six.moves.range() instead.\""},{"line_number":41,"context_line":"- [N328] Validate that LOG.info messages use _LI."},{"line_number":42,"context_line":"- [N329] Validate that LOG.exception messages use _LE."},{"line_number":43,"context_line":"- [N330] Validate that LOG.warning and LOG.warn messages use _LW."}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_287570f9","line":40,"range":{"start_line":40,"start_character":2,"end_line":40,"end_character":8},"updated":"2016-06-29 15:58:40.000000000","message":"nit: is there are reason why N327 wasn\u0027t previously used?","commit_id":"fa11cb8bd4233d3c5ae07f009340616b0513da29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d1dfd079290318ee91cf0b2c76129a1d968e8647","unresolved":false,"context_lines":[{"line_number":37,"context_line":"- [N324] Ensure that jsonutils.%(fun)s must be used instead of json.%(fun)s"},{"line_number":38,"context_line":"- [N325] str() and unicode() cannot be used on an exception.  Remove use or use six.text_type()"},{"line_number":39,"context_line":"- [N326] Translated messages cannot be concatenated.  String should be included in translated message."},{"line_number":40,"context_line":"- [N327] Do not use xrange(). xrange() is not compatible with Python 3. Use range() or six.moves.range() instead.\""},{"line_number":41,"context_line":"- [N328] Validate that LOG.info messages use _LI."},{"line_number":42,"context_line":"- [N329] Validate that LOG.exception messages use _LE."},{"line_number":43,"context_line":"- [N330] Validate that LOG.warning and LOG.warn messages use _LW."}],"source_content_type":"text/x-rst","patch_set":15,"id":"7a8ec9b2_7a036742","line":40,"range":{"start_line":40,"start_character":113,"end_line":40,"end_character":114},"updated":"2016-09-22 02:34:53.000000000","message":"This double quote here is probably not needed.","commit_id":"664b5938e313304e7fb0207f2367fc2918eec401"}],"nova/hacking/checks.py":[{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"3bc05d2153acb935c67ea48f4d6417cd071e2239","unresolved":false,"context_lines":[{"line_number":527,"context_line":""},{"line_number":528,"context_line":"def check_python3_xrange(logical_line):"},{"line_number":529,"context_line":"    if re.search(r\"\\bxrange\\s*\\(\", logical_line):"},{"line_number":530,"context_line":"        yield(0, \"N325: Do not use xrange. Use range, or six.moves.range for \""},{"line_number":531,"context_line":"                 \"large loops.\")"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_0c0d163e","line":530,"updated":"2015-12-04 14:59:57.000000000","message":"remove \u0027,\u0027 before or","commit_id":"65670cf5d9e20c2627f5fc14f66e9085492d6fb0"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"ad20e3928c484dfe43ab32acf57e742495124b23","unresolved":false,"context_lines":[{"line_number":529,"context_line":"    if re.search(r\"\\bxrange\\s*\\(\", logical_line):"},{"line_number":530,"context_line":"        yield(0, \"N325: Do not use xrange. Use range, or six.moves.range for \""},{"line_number":531,"context_line":"                 \"large loops.\")"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"def check_greenthread_spawns(logical_line, physical_line, filename):"},{"line_number":535,"context_line":"    \"\"\"Check for use of greenthread.spawn(), greenthread.spawn_n(),"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_4cf4005a","line":532,"updated":"2015-12-03 07:10:41.000000000","message":"Just a nit: You say - six.moves.range for large loops but in test_driver - you seem to be using it to run the loop twice?","commit_id":"65670cf5d9e20c2627f5fc14f66e9085492d6fb0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a4577a98ca8f3d31fbc932d83aac35c058879ae1","unresolved":false,"context_lines":[{"line_number":529,"context_line":"    if re.search(r\"\\bxrange\\s*\\(\", logical_line):"},{"line_number":530,"context_line":"        yield(0, \"N325: Do not use xrange. Use range, or six.moves.range for \""},{"line_number":531,"context_line":"                 \"large loops.\")"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"def check_greenthread_spawns(logical_line, physical_line, filename):"},{"line_number":535,"context_line":"    \"\"\"Check for use of greenthread.spawn(), greenthread.spawn_n(),"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_fa7159a9","line":532,"in_reply_to":"7a740942_663076e9","updated":"2015-12-04 16:10:43.000000000","message":"Nit: it would be better to include a mention of py3 compatibility\" \"N325: \u0027xrange\u0027 is not compatible with Python 3. Use range or or six.moves.range instead.\"","commit_id":"65670cf5d9e20c2627f5fc14f66e9085492d6fb0"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"3bc05d2153acb935c67ea48f4d6417cd071e2239","unresolved":false,"context_lines":[{"line_number":529,"context_line":"    if re.search(r\"\\bxrange\\s*\\(\", logical_line):"},{"line_number":530,"context_line":"        yield(0, \"N325: Do not use xrange. Use range, or six.moves.range for \""},{"line_number":531,"context_line":"                 \"large loops.\")"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"def check_greenthread_spawns(logical_line, physical_line, filename):"},{"line_number":535,"context_line":"    \"\"\"Check for use of greenthread.spawn(), greenthread.spawn_n(),"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_663076e9","line":532,"in_reply_to":"9a8ffd7b_4cf4005a","updated":"2015-12-04 14:59:57.000000000","message":"+1, I think it should be just smth like \u0027use range or six.moves.range instead\u0027","commit_id":"65670cf5d9e20c2627f5fc14f66e9085492d6fb0"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"c4876b917b4e5e319849eeee834c19a57d63164a","unresolved":false,"context_lines":[{"line_number":527,"context_line":""},{"line_number":528,"context_line":"def check_python3_xrange(logical_line):"},{"line_number":529,"context_line":"    if re.search(r\"\\bxrange\\s*\\(\", logical_line):"},{"line_number":530,"context_line":"        yield(0, \"N325: Do not use xrange. \u0027xrange\u0027 is not compatible\""},{"line_number":531,"context_line":"              \"with Python 3. Use range or or six.moves.range instead.\")"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_8e881e24","line":530,"range":{"start_line":530,"start_character":59,"end_line":530,"end_character":69},"updated":"2015-12-17 13:38:11.000000000","message":"need a blank after compatible","commit_id":"f490a3c1451d6169f640155b6584026b901f37e4"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"cff81aa06155518946b33eb17af2ec2fd28ef48a","unresolved":false,"context_lines":[{"line_number":527,"context_line":""},{"line_number":528,"context_line":"def check_python3_xrange(logical_line):"},{"line_number":529,"context_line":"    if re.search(r\"\\bxrange\\s*\\(\", logical_line):"},{"line_number":530,"context_line":"        yield(0, \"N325: Do not use xrange. \u0027xrange\u0027 is not compatible \""},{"line_number":531,"context_line":"              \"with Python 3. Use range or or six.moves.range instead.\")"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_a207b680","line":530,"range":{"start_line":530,"start_character":41,"end_line":530,"end_character":42},"updated":"2016-01-06 04:31:14.000000000","message":"Can you add the parenthesis () to the function name?","commit_id":"ed0b8a28fa6781b66993b6bda87d9d7da4d5e73d"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"b91ab511be09f8c8257d92b04c5bbcdb75f3de08","unresolved":false,"context_lines":[{"line_number":527,"context_line":""},{"line_number":528,"context_line":"def check_python3_xrange(logical_line):"},{"line_number":529,"context_line":"    if re.search(r\"\\bxrange\\s*\\(\", logical_line):"},{"line_number":530,"context_line":"        yield(0, \"N325: Do not use xrange. \u0027xrange\u0027 is not compatible \""},{"line_number":531,"context_line":"              \"with Python 3. Use range or or six.moves.range instead.\")"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_c5141eea","line":530,"range":{"start_line":530,"start_character":41,"end_line":530,"end_character":42},"in_reply_to":"fa69d971_a207b680","updated":"2016-01-06 15:10:41.000000000","message":"Done","commit_id":"ed0b8a28fa6781b66993b6bda87d9d7da4d5e73d"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"cff81aa06155518946b33eb17af2ec2fd28ef48a","unresolved":false,"context_lines":[{"line_number":528,"context_line":"def check_python3_xrange(logical_line):"},{"line_number":529,"context_line":"    if re.search(r\"\\bxrange\\s*\\(\", logical_line):"},{"line_number":530,"context_line":"        yield(0, \"N325: Do not use xrange. \u0027xrange\u0027 is not compatible \""},{"line_number":531,"context_line":"              \"with Python 3. Use range or or six.moves.range instead.\")"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"def check_greenthread_spawns(logical_line, physical_line, filename):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_e2da8e16","line":531,"range":{"start_line":531,"start_character":43,"end_line":531,"end_character":45},"updated":"2016-01-06 04:31:14.000000000","message":"Why two ORs?","commit_id":"ed0b8a28fa6781b66993b6bda87d9d7da4d5e73d"},{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"b91ab511be09f8c8257d92b04c5bbcdb75f3de08","unresolved":false,"context_lines":[{"line_number":528,"context_line":"def check_python3_xrange(logical_line):"},{"line_number":529,"context_line":"    if re.search(r\"\\bxrange\\s*\\(\", logical_line):"},{"line_number":530,"context_line":"        yield(0, \"N325: Do not use xrange. \u0027xrange\u0027 is not compatible \""},{"line_number":531,"context_line":"              \"with Python 3. Use range or or six.moves.range instead.\")"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"def check_greenthread_spawns(logical_line, physical_line, filename):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_85d94659","line":531,"range":{"start_line":531,"start_character":43,"end_line":531,"end_character":45},"in_reply_to":"fa69d971_e2da8e16","updated":"2016-01-06 15:10:41.000000000","message":"Done","commit_id":"ed0b8a28fa6781b66993b6bda87d9d7da4d5e73d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"f07f5737711f89f64de3ffcc05a5efc05e9b5bc1","unresolved":false,"context_lines":[{"line_number":528,"context_line":"def check_python3_xrange(logical_line):"},{"line_number":529,"context_line":"    if re.search(r\"\\bxrange\\s*\\(\", logical_line):"},{"line_number":530,"context_line":"        yield(0, \"N325: Do not use xrange(). \u0027xrange()\u0027 is not compatible \""},{"line_number":531,"context_line":"              \"with Python 3. Use range() or six.moves.range() instead.\")"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"def check_greenthread_spawns(logical_line, physical_line, filename):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_8cbc1dbc","line":531,"range":{"start_line":531,"start_character":55,"end_line":531,"end_character":60},"updated":"2016-02-01 13:21:26.000000000","message":"New checks need an addition to the HACKING file and to test_hacking.py","commit_id":"b2d383938765c82f82209531b4c852eaad8cb035"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"edaa5f5e4ff265a0216502273ffaad39e2958936","unresolved":false,"context_lines":[{"line_number":2154,"context_line":"        #             call takes to return."},{"line_number":2155,"context_line":"        self._prepare_pci_devices_for_use("},{"line_number":2156,"context_line":"            pci_manager.get_instance_pci_devs(instance, \u0027all\u0027))"},{"line_number":2157,"context_line":"        for x in six.moves.range(CONF.libvirt.wait_soft_reboot_seconds):"},{"line_number":2158,"context_line":"            guest \u003d self._host.get_guest(instance)"},{"line_number":2159,"context_line":""},{"line_number":2160,"context_line":"            # TODO(sahid): We are converting all calls from a"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_f8de176c","line":2157,"updated":"2015-12-07 04:47:17.000000000","message":"This file seems to have already done a:\n\nfrom six.moves import range\n\nWhich means you do just do a x in range(","commit_id":"65670cf5d9e20c2627f5fc14f66e9085492d6fb0"}],"plugins/xenserver/xenapi/etc/xapi.d/plugins/xenhost":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"65893dc0125148e5d9affc71f56a596a8c9b54e2","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    except XenAPI.Failure, e:"},{"line_number":84,"context_line":"        # if session is invalid, e.g. xapi has restarted, then the pool"},{"line_number":85,"context_line":"        # join has been successful, wait for xapi to become alive again"},{"line_number":86,"context_line":"        for c in range(0, DEFAULT_TRIES):"},{"line_number":87,"context_line":"            try:"},{"line_number":88,"context_line":"                _run_command([\"xe\", \"vm-start\", \"uuid\u003d%s\" % compute_uuid])"},{"line_number":89,"context_line":"                return"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"7a5de9d1_11e624b0","line":86,"updated":"2016-01-31 11:01:49.000000000","message":"This only runs in python2.4","commit_id":"b2d383938765c82f82209531b4c852eaad8cb035"}]}
