)]}'
{"nova/api/openstack/compute/views/servers.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":192,"context_line":"    @staticmethod"},{"line_number":193,"context_line":"    def _get_host_id(instance):"},{"line_number":194,"context_line":"        host \u003d instance.get(\"host\")"},{"line_number":195,"context_line":"        project \u003d six.text_type(instance.get(\"project_id\"))"},{"line_number":196,"context_line":"        if host:"},{"line_number":197,"context_line":"            sha_hash \u003d hashlib.sha224(encodeutils.safe_encode(project + host))"},{"line_number":198,"context_line":"            return sha_hash.hexdigest()"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_b5400309","line":195,"range":{"start_line":195,"start_character":22,"end_line":195,"end_character":31},"updated":"2016-01-20 16:22:29.000000000","message":"Why not keeping str() here for Python 2?","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        host \u003d instance.get(\"host\")"},{"line_number":195,"context_line":"        project \u003d six.text_type(instance.get(\"project_id\"))"},{"line_number":196,"context_line":"        if host:"},{"line_number":197,"context_line":"            sha_hash \u003d hashlib.sha224(encodeutils.safe_encode(project + host))"},{"line_number":198,"context_line":"            return sha_hash.hexdigest()"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _get_addresses(self, request, instance, extend_address\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_75ce0b85","line":197,"range":{"start_line":197,"start_character":38,"end_line":197,"end_character":49},"updated":"2016-01-20 16:22:29.000000000","message":"Using safe_encode() with the incoming parameter is not reliable: it depends on the current locale encoding which can be ASCII :-(\nhttps://wiki.openstack.org/wiki/Python3#safe_encode\n\nI just proposed a new to_utf8() function to oslo.utils: change I00463716b6012cbef383855999f63f99f2f52540.\n\nBefore to_utf8() is merged, releasd and oslo.utils 3.5 is in requirements, you can repeat the short pattern:\n\n if isinstance(text, six.text_type):\n     text \u003d text.encode(\u0027utf-8\u0027)","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/compute/api.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e738496c56e2bce7d59467fad4f30b859f78c95a","unresolved":false,"context_lines":[{"line_number":740,"context_line":"            image_defined_bdms \u003d block_device.from_legacy_mapping("},{"line_number":741,"context_line":"                image_defined_bdms, None, root_device_name)"},{"line_number":742,"context_line":"        else:"},{"line_number":743,"context_line":"            image_defined_bdms \u003d list(map(block_device.BlockDeviceDict,"},{"line_number":744,"context_line":"                                     image_defined_bdms))"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"        if image_mapping:"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa69d971_fe91f0f1","line":743,"range":{"start_line":743,"start_character":33,"end_line":743,"end_character":41},"updated":"2016-01-05 13:22:15.000000000","message":"Imo, it would better to use list comprehensions here.","commit_id":"79eb68f851647d7470072e6ea6bbb3f385b296cf"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"4a8a88f2aff037ba6c58c148bd39e9b5f8344287","unresolved":false,"context_lines":[{"line_number":675,"context_line":"            image_defined_bdms \u003d block_device.from_legacy_mapping("},{"line_number":676,"context_line":"                image_defined_bdms, None, root_device_name)"},{"line_number":677,"context_line":"        else:"},{"line_number":678,"context_line":"            image_defined_bdms \u003d list(map(block_device.BlockDeviceDict,"},{"line_number":679,"context_line":"                                     image_defined_bdms))"},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"        if image_mapping:"}],"source_content_type":"text/x-python","patch_set":34,"id":"da6ed579_4b031574","line":678,"range":{"start_line":678,"start_character":33,"end_line":678,"end_character":41},"updated":"2016-01-12 14:18:05.000000000","message":"so what about list comprehension here? Imo, \n[block_device.BlockDeviceDict(bdms) for bdms in image_defined_bdms] is much better than map -\u003e list.\n\nThis question relates to the all same changes across this patch","commit_id":"2f35da47f177db83e68c2c710b2670907f015e3c"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"f4578605de6af2ec26af834e702ca2b63ec8de89","unresolved":false,"context_lines":[{"line_number":675,"context_line":"            image_defined_bdms \u003d block_device.from_legacy_mapping("},{"line_number":676,"context_line":"                image_defined_bdms, None, root_device_name)"},{"line_number":677,"context_line":"        else:"},{"line_number":678,"context_line":"            image_defined_bdms \u003d list(map(block_device.BlockDeviceDict,"},{"line_number":679,"context_line":"                                     image_defined_bdms))"},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"        if image_mapping:"}],"source_content_type":"text/x-python","patch_set":34,"id":"da6ed579_bafc593f","line":678,"range":{"start_line":678,"start_character":33,"end_line":678,"end_character":41},"in_reply_to":"da6ed579_4b031574","updated":"2016-01-12 14:25:33.000000000","message":"i am trying to do the absolute minimum thing here so it works and its easy to review. if i had to do the correct list comprehensions for every instance of this pattern, i\u0027d probably get something wrong","commit_id":"2f35da47f177db83e68c2c710b2670907f015e3c"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                image_defined_bdms, None, root_device_name)"},{"line_number":678,"context_line":"        else:"},{"line_number":679,"context_line":"            image_defined_bdms \u003d list(map(block_device.BlockDeviceDict,"},{"line_number":680,"context_line":"                                     image_defined_bdms))"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"        if image_mapping:"},{"line_number":683,"context_line":"            image_mapping \u003d self._prepare_image_mapping(instance_type,"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_f5b51bd0","line":680,"range":{"start_line":680,"start_character":37,"end_line":680,"end_character":55},"updated":"2016-01-20 16:22:29.000000000","message":"I like list-comprehension to avoid the creation of a temporary list on Python 2, but your code does the job (it works) ;-)","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/compute/manager.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":582,"context_line":"        our_events \u003d self._events or {}"},{"line_number":583,"context_line":"        # NOTE(danms): Block new events"},{"line_number":584,"context_line":"        self._events \u003d None"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        for instance_uuid, events in our_events.items():"},{"line_number":587,"context_line":"            for event_name, eventlet_event in events.items():"},{"line_number":588,"context_line":"                LOG.debug(\u0027Canceling in-flight event %(event)s for \u0027"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_35f2d39b","line":585,"range":{"start_line":585,"start_character":0,"end_line":585,"end_character":0},"updated":"2016-01-20 16:22:29.000000000","message":"You may use:\n\nif not our_events:\n   return\n\nIt avoids creating a directory. The test works with the None value.","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/keymgr/single_key_mgr.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _generate_hex_key(self, **kwargs):"},{"line_number":51,"context_line":"        key_length \u003d kwargs.get(\u0027key_length\u0027, 256)"},{"line_number":52,"context_line":"        return \u00270\u0027 * int(key_length / 4)  # hex digit \u003d\u003e 4 bits"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _generate_key_id(self):"},{"line_number":55,"context_line":"        return self.key_id"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_354973d1","line":52,"updated":"2016-01-20 16:22:29.000000000","message":"use key_length // 4","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/network/manager.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e738496c56e2bce7d59467fad4f30b859f78c95a","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"        used_subnets \u003d [net.cidr for net in nets]"},{"line_number":1282,"context_line":""},{"line_number":1283,"context_line":"        def find_next(subnet):"},{"line_number":1284,"context_line":"            next_subnet \u003d subnet.next()"},{"line_number":1285,"context_line":"            while next_subnet in subnets_v4:"},{"line_number":1286,"context_line":"                next_subnet \u003d next_subnet.next()"},{"line_number":1287,"context_line":"            if next_subnet in fixed_net_v4:"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa69d971_995a4e29","line":1284,"range":{"start_line":1284,"start_character":26,"end_line":1284,"end_character":39},"updated":"2016-01-05 13:22:15.000000000","message":"Can you explain this change? Based on https://www.python.org/dev/peps/pep-3114/ your change looks like wrong.","commit_id":"79eb68f851647d7470072e6ea6bbb3f385b296cf"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"4a8a88f2aff037ba6c58c148bd39e9b5f8344287","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"        used_subnets \u003d [net.cidr for net in nets]"},{"line_number":1282,"context_line":""},{"line_number":1283,"context_line":"        def find_next(subnet):"},{"line_number":1284,"context_line":"            next_subnet \u003d subnet.next()"},{"line_number":1285,"context_line":"            while next_subnet in subnets_v4:"},{"line_number":1286,"context_line":"                next_subnet \u003d next_subnet.next()"},{"line_number":1287,"context_line":"            if next_subnet in fixed_net_v4:"}],"source_content_type":"text/x-python","patch_set":34,"id":"da6ed579_d9aa7f70","line":1284,"range":{"start_line":1284,"start_character":26,"end_line":1284,"end_character":39},"updated":"2016-01-12 14:18:05.000000000","message":"please, describe this change in commit message","commit_id":"2f35da47f177db83e68c2c710b2670907f015e3c"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"f4578605de6af2ec26af834e702ca2b63ec8de89","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"        used_subnets \u003d [net.cidr for net in nets]"},{"line_number":1282,"context_line":""},{"line_number":1283,"context_line":"        def find_next(subnet):"},{"line_number":1284,"context_line":"            next_subnet \u003d subnet.next()"},{"line_number":1285,"context_line":"            while next_subnet in subnets_v4:"},{"line_number":1286,"context_line":"                next_subnet \u003d next_subnet.next()"},{"line_number":1287,"context_line":"            if next_subnet in fixed_net_v4:"}],"source_content_type":"text/x-python","patch_set":34,"id":"da6ed579_da4b4daf","line":1284,"range":{"start_line":1284,"start_character":26,"end_line":1284,"end_character":39},"in_reply_to":"da6ed579_d9aa7f70","updated":"2016-01-12 14:25:33.000000000","message":"the previous change for these 3 lines from \"subnet.next()\" to \"next(subnet)\" but that change breaks tests. so i am just flipping it back to what it was before the previous change.","commit_id":"2f35da47f177db83e68c2c710b2670907f015e3c"}],"nova/objects/pci_device.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e738496c56e2bce7d59467fad4f30b859f78c95a","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        # functions like claim/allocate etc. The id is allocated by"},{"line_number":123,"context_line":"        # database. The extra_info is created by the object."},{"line_number":124,"context_line":"        no_changes \u003d (\u0027status\u0027, \u0027instance_uuid\u0027, \u0027id\u0027, \u0027extra_info\u0027)"},{"line_number":125,"context_line":"        list(map(lambda x: dev_dict.pop(x, None),"},{"line_number":126,"context_line":"                 [key for key in no_changes]))"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        for k, v in dev_dict.items():"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa69d971_59413637","line":125,"range":{"start_line":125,"start_character":8,"end_line":125,"end_character":16},"updated":"2016-01-05 13:22:15.000000000","message":"What about list comprehension here?","commit_id":"79eb68f851647d7470072e6ea6bbb3f385b296cf"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        # database. The extra_info is created by the object."},{"line_number":144,"context_line":"        no_changes \u003d (\u0027status\u0027, \u0027instance_uuid\u0027, \u0027id\u0027, \u0027extra_info\u0027)"},{"line_number":145,"context_line":"        list(map(lambda x: dev_dict.pop(x, None),"},{"line_number":146,"context_line":"                 [key for key in no_changes]))"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        for k, v in dev_dict.items():"},{"line_number":149,"context_line":"            if k in self.fields.keys():"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_b5e7a3ab","line":146,"updated":"2016-01-20 16:22:29.000000000","message":"While your code is correct, the original code smells. Why creating a temporary list but don\u0027t store it? It looks like a dead simple loop, no?\n\nfor key in no_changes:\n    dev_dict.pop(key, None)\n\n[key for key in no_changes] is also strange. Why not using directly no_changes, or list(no_changes)?","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/pci/manager.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"8dee4d2e000f4f4c7d900fce908bccacd2dab30c","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        existed |\u003d set(mig[\u0027instance_uuid\u0027] for mig in migrations)"},{"line_number":277,"context_line":"        existed |\u003d set(inst[\u0027uuid\u0027] for inst in orphans)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        for uuid in list(self.claims.keys()):"},{"line_number":280,"context_line":"            if uuid not in existed:"},{"line_number":281,"context_line":"                devs \u003d self.claims.pop(uuid, [])"},{"line_number":282,"context_line":"                for dev in devs:"}],"source_content_type":"text/x-python","patch_set":45,"id":"3aaa91ec_3c8eab78","line":279,"range":{"start_line":279,"start_character":20,"end_line":279,"end_character":24},"updated":"2016-06-22 12:16:07.000000000","message":"nit: not needed here since we iterate through it","commit_id":"4d597e4a6bff6fd5ab05e39d3031117f49e665ee"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"8dee4d2e000f4f4c7d900fce908bccacd2dab30c","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                devs \u003d self.claims.pop(uuid, [])"},{"line_number":282,"context_line":"                for dev in devs:"},{"line_number":283,"context_line":"                    self._free_device(dev)"},{"line_number":284,"context_line":"        for uuid in list(self.allocations.keys()):"},{"line_number":285,"context_line":"            if uuid not in existed:"},{"line_number":286,"context_line":"                devs \u003d self.allocations.pop(uuid, [])"},{"line_number":287,"context_line":"                for dev in devs:"}],"source_content_type":"text/x-python","patch_set":45,"id":"3aaa91ec_7cee7323","line":284,"range":{"start_line":284,"start_character":20,"end_line":284,"end_character":24},"updated":"2016-06-22 12:16:07.000000000","message":"ditto","commit_id":"4d597e4a6bff6fd5ab05e39d3031117f49e665ee"}],"nova/tests/unit/cells/test_cells_messaging.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        self.assertEqual(99, bcast_message.max_hop_count)"},{"line_number":202,"context_line":"        self.assertTrue(bcast_message.is_broadcast)"},{"line_number":203,"context_line":"        # Correct next hops?"},{"line_number":204,"context_line":"        next_hops \u003d list(bcast_message._get_next_hops())"},{"line_number":205,"context_line":"        child_cells \u003d list(self.state_manager.get_child_cells())"},{"line_number":206,"context_line":"        self.assertEqual(child_cells, next_hops)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_99af39e3","line":204,"updated":"2016-01-20 16:22:29.000000000","message":"Hum, I\u0027m not sure that it\u0027s correct to have to cast to list in the caller. Why not modifying the method directly to return a list.\n\nSame remark for other changes in this file.","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"8dee4d2e000f4f4c7d900fce908bccacd2dab30c","unresolved":false,"context_lines":[{"line_number":1450,"context_line":"        if not up:"},{"line_number":1451,"context_line":"            # fudge things so we only have 1 child to broadcast to"},{"line_number":1452,"context_line":"            state_manager \u003d self.src_msg_runner.state_manager"},{"line_number":1453,"context_line":"            for cell in list(state_manager.get_child_cells()):"},{"line_number":1454,"context_line":"                if cell.name !\u003d \u0027child-cell2\u0027:"},{"line_number":1455,"context_line":"                    del state_manager.child_cells[cell.name]"},{"line_number":1456,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"3aaa91ec_fc1d4310","line":1453,"range":{"start_line":1453,"start_character":24,"end_line":1453,"end_character":28},"updated":"2016-06-22 12:16:07.000000000","message":"again, not sure we need to make it a list since dict_keys type is also an iterable","commit_id":"4d597e4a6bff6fd5ab05e39d3031117f49e665ee"}],"nova/tests/unit/cells/test_cells_state_manager.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        self.assertEqual(0, cap[\u0027ram_free\u0027][\u0027units_by_mb\u0027][\u00270\u0027])"},{"line_number":147,"context_line":"        self.assertEqual(0, cap[\u0027disk_free\u0027][\u0027units_by_mb\u0027][\u00270\u0027])"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        units \u003d int(cell_free_ram / 50)"},{"line_number":150,"context_line":"        self.assertEqual(units, cap[\u0027ram_free\u0027][\u0027units_by_mb\u0027][\u002750\u0027])"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        sz \u003d 25 * 1024"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_59e78140","line":149,"updated":"2016-01-20 16:22:29.000000000","message":"use cell_free_ram // 50","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e738496c56e2bce7d59467fad4f30b859f78c95a","unresolved":false,"context_lines":[{"line_number":7546,"context_line":"        bdms \u003d block_device_obj.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":7547,"context_line":"            self.context, instance_uuid)"},{"line_number":7548,"context_line":""},{"line_number":7549,"context_line":"        ephemeral \u003d list(filter(block_device.new_format_is_ephemeral, bdms))"},{"line_number":7550,"context_line":"        self.assertEqual(1, len(ephemeral))"},{"line_number":7551,"context_line":"        swap \u003d list(filter(block_device.new_format_is_swap, bdms))"},{"line_number":7552,"context_line":"        self.assertEqual(1, len(swap))"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa69d971_39c7a297","line":7549,"range":{"start_line":7549,"start_character":19,"end_line":7549,"end_character":31},"updated":"2016-01-05 13:22:15.000000000","message":"list comprehension will be simlier","commit_id":"79eb68f851647d7470072e6ea6bbb3f385b296cf"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e738496c56e2bce7d59467fad4f30b859f78c95a","unresolved":false,"context_lines":[{"line_number":7548,"context_line":""},{"line_number":7549,"context_line":"        ephemeral \u003d list(filter(block_device.new_format_is_ephemeral, bdms))"},{"line_number":7550,"context_line":"        self.assertEqual(1, len(ephemeral))"},{"line_number":7551,"context_line":"        swap \u003d list(filter(block_device.new_format_is_swap, bdms))"},{"line_number":7552,"context_line":"        self.assertEqual(1, len(swap))"},{"line_number":7553,"context_line":""},{"line_number":7554,"context_line":"        self.assertEqual(1024, swap[0].volume_size)"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa69d971_f9e58a37","line":7551,"range":{"start_line":7551,"start_character":14,"end_line":7551,"end_character":26},"updated":"2016-01-05 13:22:15.000000000","message":"the same here","commit_id":"79eb68f851647d7470072e6ea6bbb3f385b296cf"}],"nova/tests/unit/db/test_migrations.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                list(icehouse_placeholders) +"},{"line_number":178,"context_line":"                list(juno_placeholders) +"},{"line_number":179,"context_line":"                list(kilo_placeholders) +"},{"line_number":180,"context_line":"                list(liberty_placeholders))"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def migrate_up(self, version, with_data\u003dFalse):"},{"line_number":183,"context_line":"        if with_data:"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_393c0d93","line":180,"updated":"2016-01-20 16:22:29.000000000","message":"For readability, you should move the cast to list around the call to range() directly.","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/tests/unit/pci/test_stats.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        list(map(self.pci_stats.add_device,"},{"line_number":72,"context_line":"                 [self.fake_dev_1, self.fake_dev_2,"},{"line_number":73,"context_line":"                  self.fake_dev_3, self.fake_dev_4]))"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def setUp(self):"},{"line_number":76,"context_line":"        super(PciDeviceStatsTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_d925b15c","line":73,"updated":"2016-01-20 16:22:29.000000000","message":"Again, it looks like a loop!\n\n for dev in [self.fake_dev_1, self.fake_dev_2, self.fake_dev_3, self.fake_dev_4]:\n     self.pci_stats.add_device(dev)\n\nSame remark for other changes below.","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/tests/unit/utils.py":[{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"216b8c2bf59e7a8a32fb56f744c36a31fc15e54a","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                     \u0027vcpus\u0027: 4,"},{"line_number":84,"context_line":"                     \u0027root_gb\u0027: 40,"},{"line_number":85,"context_line":"                     \u0027bridge\u0027: \u0027br101\u0027,"},{"line_number":86,"context_line":"                     \u0027ephemeral_gb\u0027: 1,"},{"line_number":87,"context_line":"                     \u0027image_ref\u0027: \u0027cedef40a-ed67-4d10-800e-17455edce175\u0027,"},{"line_number":88,"context_line":"                     \u0027instance_type_id\u0027: flavor[\u0027id\u0027],"},{"line_number":89,"context_line":"                     \u0027system_metadata\u0027: {},"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_7fcdc52f","line":86,"updated":"2016-01-06 14:50:08.000000000","message":"Why is this included in a python3 port? I think it should either be mentioned in the commit message or included in a separate patch.","commit_id":"b05b9679e63dc7fd9ed782350be7fb04c3d3a26f"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"886c570272dba109d3d3b1743f0c8d9fb80244de","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                     \u0027vcpus\u0027: 4,"},{"line_number":84,"context_line":"                     \u0027root_gb\u0027: 40,"},{"line_number":85,"context_line":"                     \u0027bridge\u0027: \u0027br101\u0027,"},{"line_number":86,"context_line":"                     \u0027ephemeral_gb\u0027: 1,"},{"line_number":87,"context_line":"                     \u0027image_ref\u0027: \u0027cedef40a-ed67-4d10-800e-17455edce175\u0027,"},{"line_number":88,"context_line":"                     \u0027instance_type_id\u0027: flavor[\u0027id\u0027],"},{"line_number":89,"context_line":"                     \u0027system_metadata\u0027: {},"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_9ae0c4ce","line":86,"in_reply_to":"fa69d971_7fcdc52f","updated":"2016-01-06 16:03:47.000000000","message":"if you remove this line, a test fails under python34. the test passes in py27 as py27 allows comparing None with an integer and py34 does not. So the right thing to do is fix the test here","commit_id":"b05b9679e63dc7fd9ed782350be7fb04c3d3a26f"}],"nova/tests/unit/virt/disk/mount/test_nbd.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def _fake_listdir_nbd_devices(path):"},{"line_number":42,"context_line":"    if isinstance(path, six.string_types):"},{"line_number":43,"context_line":"        if path.startswith(\u0027/sys/block\u0027):"},{"line_number":44,"context_line":"            return [\u0027nbd0\u0027, \u0027nbd1\u0027]"},{"line_number":45,"context_line":"    return ORIG_LISTDIR(path)"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_b9cb1d72","line":42,"updated":"2016-01-20 16:22:29.000000000","message":"you may merge isinstance test with the startswith test, I mean put them in the same if.","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"8dee4d2e000f4f4c7d900fce908bccacd2dab30c","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def _fake_listdir_nbd_devices(path):"},{"line_number":42,"context_line":"    if isinstance(path, six.string_types):"},{"line_number":43,"context_line":"        if path.startswith(\u0027/sys/block\u0027):"},{"line_number":44,"context_line":"            return [\u0027nbd0\u0027, \u0027nbd1\u0027]"},{"line_number":45,"context_line":"    return ORIG_LISTDIR(path)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"3aaa91ec_1cd2cf00","line":43,"range":{"start_line":42,"start_character":4,"end_line":43,"end_character":41},"updated":"2016-06-22 12:16:07.000000000","message":"why not just writing it as a single if statement like:\n\nif isinstance(path, six.string_types) and path.startswith(\u0027/sys/block\u0027):\n    # [...]","commit_id":"4d597e4a6bff6fd5ab05e39d3031117f49e665ee"}],"nova/tests/unit/virt/ironic/test_driver.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":269,"context_line":"                    \"numa_topology\"]"},{"line_number":270,"context_line":"        wantkeys.sort()"},{"line_number":271,"context_line":"        gotkeys \u003d list(result.keys())"},{"line_number":272,"context_line":"        gotkeys.sort()"},{"line_number":273,"context_line":"        self.assertEqual(wantkeys, gotkeys)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        if has_inst_info:"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_19a109aa","line":272,"updated":"2016-01-20 16:22:29.000000000","message":"you can write: gotkeys \u003d sorted(result.keys())","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/tests/unit/virt/libvirt/fake_libvirt_utils.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"25c1ba407dd9a5ee3d9edf28a42479ee0a924e04","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":"import six"},{"line_number":17,"context_line":"from six.moves import StringIO"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_utils import encodeutils"}],"source_content_type":"text/x-python","patch_set":40,"id":"da6ed579_67af1c7e","line":16,"range":{"start_line":16,"start_character":7,"end_line":16,"end_character":10},"updated":"2016-01-18 10:50:03.000000000","message":"six is a third party module, it should be imported after line no #19\n\nrefer, http://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"a371e3dbaa29ec6c7191b29cc03026aa09195077"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                self.fp \u003d six.BytesIO(encodeutils.safe_encode("},{"line_number":94,"context_line":"                        files[os.path.split(path)[-1]]))"},{"line_number":95,"context_line":"            else:"},{"line_number":96,"context_line":"                self.fp \u003d StringIO(files[os.path.split(path)[-1]])"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def __enter__(self):"},{"line_number":99,"context_line":"        return self.fp"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_99265915","line":96,"updated":"2016-01-20 16:22:29.000000000","message":"Hum, this code is more complex than it can be. You should use six.BytesIO on py2 and py3, and simplify the code to create the content. Something like:\n\n if path not in files:\n     path \u003d os.path.split(path)[-1]\n content \u003d files[path]\n if six.PY3:\n     content \u003d encodeutils.safe_encode(content)\n self.fp \u003d six.BytesIO(content)\n\nRemark: os.path.split(path)[-1] can be replaced with os.path.basename():\n\n path \u003d os.path.basename(path)\n content \u003d files[path]\n ...","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"216b8c2bf59e7a8a32fb56f744c36a31fc15e54a","unresolved":false,"context_lines":[{"line_number":1693,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":1694,"context_line":"        self.assertFalse(hasattr(drvr, \u0027_bad_libvirt_numa_version_warn\u0027))"},{"line_number":1695,"context_line":"        with mock.patch.object(drvr._host, \u0027has_version\u0027, return_value\u003dTrue):"},{"line_number":1696,"context_line":"            for i in six.moves.xrange(2):"},{"line_number":1697,"context_line":"                self.assertFalse(drvr._has_numa_support())"},{"line_number":1698,"context_line":"        self.assertTrue(drvr._bad_libvirt_numa_version_warn)"},{"line_number":1699,"context_line":"        self.assertEqual(1, mock_warn.call_count)"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_dfb39196","line":1696,"updated":"2016-01-06 14:50:08.000000000","message":"I think this may no longer be necessary, as it is covered by:\n\nhttps://review.openstack.org/#/c/205307/","commit_id":"b05b9679e63dc7fd9ed782350be7fb04c3d3a26f"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"886c570272dba109d3d3b1743f0c8d9fb80244de","unresolved":false,"context_lines":[{"line_number":1693,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":1694,"context_line":"        self.assertFalse(hasattr(drvr, \u0027_bad_libvirt_numa_version_warn\u0027))"},{"line_number":1695,"context_line":"        with mock.patch.object(drvr._host, \u0027has_version\u0027, return_value\u003dTrue):"},{"line_number":1696,"context_line":"            for i in six.moves.xrange(2):"},{"line_number":1697,"context_line":"                self.assertFalse(drvr._has_numa_support())"},{"line_number":1698,"context_line":"        self.assertTrue(drvr._bad_libvirt_numa_version_warn)"},{"line_number":1699,"context_line":"        self.assertEqual(1, mock_warn.call_count)"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_5a0b2c7d","line":1696,"in_reply_to":"fa69d971_dfb39196","updated":"2016-01-06 16:03:47.000000000","message":"Dane, if that review goes in first, i\u0027ll fix this review as needed. Note that the review you are pointing to does not really enable any additional tests that pass because of the fixing xrange. I do not like fixing code assuming it will work without evidence that it helped (by enabling tests)","commit_id":"b05b9679e63dc7fd9ed782350be7fb04c3d3a26f"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":1732,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":1733,"context_line":"        self.assertFalse(hasattr(drvr, \u0027_bad_libvirt_numa_version_warn\u0027))"},{"line_number":1734,"context_line":"        with mock.patch.object(drvr._host, \u0027has_version\u0027, return_value\u003dTrue):"},{"line_number":1735,"context_line":"            for i in six.moves.xrange(2):"},{"line_number":1736,"context_line":"                self.assertFalse(drvr._has_numa_support())"},{"line_number":1737,"context_line":"        self.assertTrue(drvr._bad_libvirt_numa_version_warn)"},{"line_number":1738,"context_line":"        self.assertEqual(1, mock_warn.call_count)"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_394f2d94","line":1735,"updated":"2016-01-20 16:22:29.000000000","message":"You should not worry of the performance of a very short range (2 items): call directly range(2), it works on Python 2 and Python 3. six is not needed here.","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":7645,"context_line":"                                   \u0027ramdisk_id\u0027: \u0027fake_ramdisk_id\u0027,"},{"line_number":7646,"context_line":"                                   \u0027project_id\u0027: \u0027fake-project\u0027})"},{"line_number":7647,"context_line":"        instance \u003d objects.Instance(**self.test_instance)"},{"line_number":7648,"context_line":"        with mock.patch.object(imagebackend.Image, \u0027get_disk_size\u0027) as m_size:"},{"line_number":7649,"context_line":"            m_size.return_value \u003d 0"},{"line_number":7650,"context_line":"            conn._create_images_and_backing(self.context, instance,"},{"line_number":7651,"context_line":"                                            \u0027/fake/instance/dir\u0027, disk_info)"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_5958e156","line":7648,"updated":"2016-01-20 16:22:29.000000000","message":"You can directly pass return_value\u003d0 parameter to patch.object().","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":12105,"context_line":"            drvr.post_live_migration_at_destination("},{"line_number":12106,"context_line":"                    self.context, instance, network_info, True,"},{"line_number":12107,"context_line":"                    block_device_info\u003dblock_device_info)"},{"line_number":12108,"context_line":"            self.assertIn(\u0027fake\u0027, encodeutils.safe_decode(self.resultXML))"},{"line_number":12109,"context_line":"            mock_volume_save.assert_called_once_with()"},{"line_number":12110,"context_line":""},{"line_number":12111,"context_line":"    def test_create_propagates_exceptions(self):"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_9c3ac7cc","line":12108,"updated":"2016-01-20 16:22:29.000000000","message":"Question: does it work to search for b\u0027fake\u0027? (Is resultXML a byte string on py2 and py3?)","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"8dee4d2e000f4f4c7d900fce908bccacd2dab30c","unresolved":false,"context_lines":[{"line_number":1992,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":1993,"context_line":"        self.assertFalse(hasattr(drvr, \u0027_bad_libvirt_numa_version_warn\u0027))"},{"line_number":1994,"context_line":"        with mock.patch.object(drvr._host, \u0027has_version\u0027, return_value\u003dTrue):"},{"line_number":1995,"context_line":"            for i in six.moves.xrange(2):"},{"line_number":1996,"context_line":"                self.assertFalse(drvr._has_numa_support())"},{"line_number":1997,"context_line":"        self.assertTrue(drvr._bad_libvirt_numa_version_warn)"},{"line_number":1998,"context_line":"        self.assertEqual(1, mock_warn.call_count)"}],"source_content_type":"text/x-python","patch_set":45,"id":"3aaa91ec_1c264fce","line":1995,"range":{"start_line":1995,"start_character":21,"end_line":1995,"end_character":41},"updated":"2016-06-22 12:16:07.000000000","message":"IMHO, there\u0027s no need to change range(2) since we just iterate through it.","commit_id":"4d597e4a6bff6fd5ab05e39d3031117f49e665ee"}],"nova/virt/block_device.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        bdm.attach(*attach_args, **attach_kwargs)"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    list(map(_log_and_attach, block_device_mapping))"},{"line_number":519,"context_line":"    return block_device_mapping"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_3c3cfb92","line":518,"updated":"2016-01-20 16:22:29.000000000","message":"Again? Strange loop?\n\n for item in block_device_mapping:\n     _log_and_attach(item)","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"def refresh_conn_infos(block_device_mapping, *refresh_args, **refresh_kwargs):"},{"line_number":523,"context_line":"    list(map(operator.methodcaller(\u0027refresh_connection_info\u0027,"},{"line_number":524,"context_line":"                                   *refresh_args, **refresh_kwargs),"},{"line_number":525,"context_line":"             block_device_mapping))"},{"line_number":526,"context_line":"    return block_device_mapping"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_1c5ed7e9","line":523,"updated":"2016-01-20 16:22:29.000000000","message":"Ditto","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/virt/hardware.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":795,"context_line":"        return"},{"line_number":796,"context_line":""},{"line_number":797,"context_line":"    topology \u003d objects.VirtCPUTopology(sockets\u003d1,"},{"line_number":798,"context_line":"                                       cores\u003dint(len(pinning) / threads_no),"},{"line_number":799,"context_line":"                                       threads\u003dthreads_no)"},{"line_number":800,"context_line":"    instance_cell.pin_vcpus(*pinning)"},{"line_number":801,"context_line":"    instance_cell.cpu_topology \u003d topology"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_dc259f5c","line":798,"updated":"2016-01-20 16:22:29.000000000","message":"use: len(pinning) // threads_no","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":15524,"name":"dane-fichter","email":"dane.fichter@jhuapl.edu","username":"dane-fichter"},"change_message_id":"216b8c2bf59e7a8a32fb56f744c36a31fc15e54a","unresolved":false,"context_lines":[{"line_number":2142,"context_line":"        #             call takes to return."},{"line_number":2143,"context_line":"        self._prepare_pci_devices_for_use("},{"line_number":2144,"context_line":"            pci_manager.get_instance_pci_devs(instance, \u0027all\u0027))"},{"line_number":2145,"context_line":"        for x in six.moves.xrange(CONF.libvirt.wait_soft_reboot_seconds):"},{"line_number":2146,"context_line":"            guest \u003d self._host.get_guest(instance)"},{"line_number":2147,"context_line":""},{"line_number":2148,"context_line":"            state \u003d guest.get_power_state(self._host)"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_4a0b5d24","line":2145,"updated":"2016-01-06 14:50:08.000000000","message":"See previous comment about xrange -\u003e six.moves.xrange port","commit_id":"b05b9679e63dc7fd9ed782350be7fb04c3d3a26f"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"886c570272dba109d3d3b1743f0c8d9fb80244de","unresolved":false,"context_lines":[{"line_number":2142,"context_line":"        #             call takes to return."},{"line_number":2143,"context_line":"        self._prepare_pci_devices_for_use("},{"line_number":2144,"context_line":"            pci_manager.get_instance_pci_devs(instance, \u0027all\u0027))"},{"line_number":2145,"context_line":"        for x in six.moves.xrange(CONF.libvirt.wait_soft_reboot_seconds):"},{"line_number":2146,"context_line":"            guest \u003d self._host.get_guest(instance)"},{"line_number":2147,"context_line":""},{"line_number":2148,"context_line":"            state \u003d guest.get_power_state(self._host)"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa69d971_da763c05","line":2145,"in_reply_to":"fa69d971_4a0b5d24","updated":"2016-01-06 16:03:47.000000000","message":"addressed in my other response","commit_id":"b05b9679e63dc7fd9ed782350be7fb04c3d3a26f"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":2200,"context_line":"        #             call takes to return."},{"line_number":2201,"context_line":"        self._prepare_pci_devices_for_use("},{"line_number":2202,"context_line":"            pci_manager.get_instance_pci_devs(instance, \u0027all\u0027))"},{"line_number":2203,"context_line":"        for x in six.moves.xrange(CONF.libvirt.wait_soft_reboot_seconds):"},{"line_number":2204,"context_line":"            guest \u003d self._host.get_guest(instance)"},{"line_number":2205,"context_line":""},{"line_number":2206,"context_line":"            state \u003d guest.get_power_state(self._host)"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_dcdcbf48","line":2203,"updated":"2016-01-20 16:22:29.000000000","message":"use directly range()","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/virt/libvirt/imagebackend.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":646,"context_line":"        def create_lvm_image(base, size):"},{"line_number":647,"context_line":"            base_size \u003d disk.get_disk_size(base)"},{"line_number":648,"context_line":"            self.verify_base_size(base, size, base_size\u003dbase_size)"},{"line_number":649,"context_line":"            resize \u003d size \u003e base_size if size else None"},{"line_number":650,"context_line":"            size \u003d size if resize else base_size"},{"line_number":651,"context_line":"            lvm.create_volume(self.vg, self.lv,"},{"line_number":652,"context_line":"                                         size, sparse\u003dself.sparse)"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_1cba57e2","line":649,"updated":"2016-01-20 16:22:29.000000000","message":"I suggest: else False","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/virt/libvirt/imagecache.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":113,"context_line":"def is_valid_info_file(path):"},{"line_number":114,"context_line":"    \"\"\"Test if a given path matches the pattern for info files.\"\"\""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    if six.PY3:"},{"line_number":117,"context_line":"        digest_size \u003d hashlib.sha1().digest_size * 2"},{"line_number":118,"context_line":"    else:"},{"line_number":119,"context_line":"        digest_size \u003d hashlib.sha1().digestsize * 2"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_dc983f6d","line":116,"updated":"2016-01-20 16:22:29.000000000","message":"hashlib.sha1().digest_size works also on Python 2.","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        to be disk images."},{"line_number":286,"context_line":"        \"\"\""},{"line_number":287,"context_line":"        if six.PY3:"},{"line_number":288,"context_line":"            digest_size \u003d hashlib.sha1().digest_size * 2"},{"line_number":289,"context_line":"        else:"},{"line_number":290,"context_line":"            digest_size \u003d hashlib.sha1().digestsize * 2"},{"line_number":291,"context_line":"        for ent in os.listdir(base_dir):"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_3cbb9bc6","line":288,"updated":"2016-01-20 16:22:29.000000000","message":"ditto","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/virt/libvirt/storage/lvm.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":192,"context_line":"    # and caters for versions of dd that don\u0027t have"},{"line_number":193,"context_line":"    # the easier to use iflag\u003dcount_bytes option."},{"line_number":194,"context_line":"    while remaining_bytes:"},{"line_number":195,"context_line":"        zero_blocks \u003d int(remaining_bytes / bs)"},{"line_number":196,"context_line":"        seek_blocks \u003d int((volume_size - remaining_bytes) / bs)"},{"line_number":197,"context_line":"        zero_cmd \u003d (\u0027dd\u0027, \u0027bs\u003d%s\u0027 % bs,"},{"line_number":198,"context_line":"                    \u0027if\u003d/dev/zero\u0027, \u0027of\u003d%s\u0027 % path,"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_bcc78b44","line":195,"updated":"2016-01-20 16:22:29.000000000","message":"int // int \u003d\u003e int","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/virt/libvirt/utils.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":313,"context_line":"    if six.PY3:"},{"line_number":314,"context_line":"        return io.open(*args, **kwargs)"},{"line_number":315,"context_line":"    else:"},{"line_number":316,"context_line":"        return file(*args, **kwargs)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"def file_delete(path):"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_bcf54b84","line":316,"range":{"start_line":316,"start_character":8,"end_line":316,"end_character":14},"updated":"2016-01-20 16:22:29.000000000","message":"Why not using return open()? It works on Python 2 and Python 3. On Python 2, file() is an alias to open().\n\nOr use also io.open() on Python 2? On Python 3, open() is just an alias to io.open().","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}],"nova/virt/xenapi/volume_utils.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ef116698f4d7c07d82d0e06c3ba4823fc8e5c795","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        if six.PY3:"},{"line_number":299,"context_line":"            return int(mountpoint)"},{"line_number":300,"context_line":"        else:"},{"line_number":301,"context_line":"            return string.atoi(mountpoint, 10)"},{"line_number":302,"context_line":"    else:"},{"line_number":303,"context_line":"        LOG.warning(_LW(\u0027Mountpoint cannot be translated: %s\u0027), mountpoint)"},{"line_number":304,"context_line":"        return -1"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a68dd71_7cf9134d","line":301,"updated":"2016-01-20 16:22:29.000000000","message":"come on, this is completly outdated: use also int() on Python 2!","commit_id":"2d7c81eeb393a5fae9c02ed8556b05bb4ffa787d"}]}
