)]}'
{"nova/api/openstack/compute/contrib/server_usage.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            # only way we can keep that with instance objects is to strip"},{"line_number":36,"context_line":"            # the tzinfo from the stamp and str() it."},{"line_number":37,"context_line":"            server[key] \u003d (instance[k].replace(tzinfo\u003dNone)"},{"line_number":38,"context_line":"                           if instance[k] else None)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @wsgi.extends"},{"line_number":41,"context_line":"    def show(self, req, resp_obj, id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2Fnag%3D","line":38,"updated":"2013-06-26 17:42:50.000000000","message":"Unfortunately, this api has always returned the date/time stamp as it comes back from str(datetime), instead of using one of our isotime() helpers. Now that instance objects include non-TZ-naive datetimes, we need to tweak this in order to maintain API stability. This removes the UTC timezone on the object, so that it will str() out to the same thing it did before.","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":493,"context_line":"                except IndexError:"},{"line_number":494,"context_line":"                    pass"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        return instances"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def _get_servers(self, req, is_detail):"},{"line_number":499,"context_line":"        \"\"\"Returns a list of servers, based on any search options specified.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnZc%3D","side":"PARENT","line":496,"updated":"2013-06-26 17:42:50.000000000","message":"instance[\u0027fault\u0027] is included by default in compute_api\u0027s returned objects now.","commit_id":"13b108b8452f4ce5a7450e97f4b5de0563e419a3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":974,"context_line":"        if \u0027accessIPv4\u0027 in body[\u0027server\u0027]:"},{"line_number":975,"context_line":"            access_ipv4 \u003d body[\u0027server\u0027][\u0027accessIPv4\u0027]"},{"line_number":976,"context_line":"            if access_ipv4 is None:"},{"line_number":977,"context_line":"                access_ipv4 \u003d \u0027\u0027"},{"line_number":978,"context_line":"            if access_ipv4:"},{"line_number":979,"context_line":"                self._validate_access_ipv4(access_ipv4)"},{"line_number":980,"context_line":"            update_dict[\u0027access_ip_v4\u0027] \u003d access_ipv4.strip()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnaA%3D","side":"PARENT","line":977,"updated":"2013-06-26 17:42:50.000000000","message":"In new-world instances, a blank (i.e. \u0027\u0027) address is not valid, so we can\u0027t allow the update to complete like this. Leaving it as None does the right thing.","commit_id":"13b108b8452f4ce5a7450e97f4b5de0563e419a3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":965,"context_line":"            if access_ipv4:"},{"line_number":966,"context_line":"                self._validate_access_ipv4(access_ipv4)"},{"line_number":967,"context_line":"            update_dict[\u0027access_ip_v4\u0027] \u003d ("},{"line_number":968,"context_line":"                access_ipv4 and access_ipv4.strip() or None)"},{"line_number":969,"context_line":""},{"line_number":970,"context_line":"        if \u0027accessIPv6\u0027 in body[\u0027server\u0027]:"},{"line_number":971,"context_line":"            access_ipv6 \u003d body[\u0027server\u0027][\u0027accessIPv6\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnZo%3D","line":968,"updated":"2013-06-26 17:42:50.000000000","message":"If they passed a blank address, be sure to convert that to a None, else strip() it as before.","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":972,"context_line":"            if access_ipv6:"},{"line_number":973,"context_line":"                self._validate_access_ipv6(access_ipv6)"},{"line_number":974,"context_line":"            update_dict[\u0027access_ip_v6\u0027] \u003d ("},{"line_number":975,"context_line":"                access_ipv6 and access_ipv6.strip() or None)"},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"        if \u0027auto_disk_config\u0027 in body[\u0027server\u0027]:"},{"line_number":978,"context_line":"            auto_disk_config \u003d strutils.bool_from_string("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnZk%3D","line":975,"updated":"2013-06-26 17:42:50.000000000","message":"Same deal for IPv6","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":991,"context_line":"            instance \u003d self.compute_api.get(ctxt, id,"},{"line_number":992,"context_line":"                                            want_objects\u003dTrue)"},{"line_number":993,"context_line":"            req.cache_db_instance(instance)"},{"line_number":994,"context_line":"            self.compute_api.update(ctxt, instance, **update_dict)"},{"line_number":995,"context_line":"        except exception.NotFound:"},{"line_number":996,"context_line":"            msg \u003d _(\"Instance could not be found\")"},{"line_number":997,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnZg%3D","line":994,"updated":"2013-06-26 17:42:50.000000000","message":"This update still happens as it did before. The addresses being None will be handled by the sqlalchemy layer as the columns are nullable\u003dTrue.","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"3aa256cb67920b285d7e0c1fa9399dff26ecaf5c","unresolved":false,"context_lines":[{"line_number":996,"context_line":"            msg \u003d _(\"Instance could not be found\")"},{"line_number":997,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":998,"context_line":""},{"line_number":999,"context_line":"        # NOTE(danms): Until compute_api.update() is object-aware,"},{"line_number":1000,"context_line":"        # we need to apply the updates to the instance object so"},{"line_number":1001,"context_line":"        # that views will return the new data"},{"line_number":1002,"context_line":"        instance.update(update_dict)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2Fko0%3D","line":999,"updated":"2013-06-27 15:22:20.000000000","message":"Perhaps a FIXME is more appropriate than a NOTE.","commit_id":"1947fd7bfa600731065678594d7db4da89787ef3"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"5dd991b33b3556c9b01ae075c04b96512bf480b5","unresolved":false,"context_lines":[{"line_number":541,"context_line":"                                                     limit\u003dlimit,"},{"line_number":542,"context_line":"                                                     marker\u003dmarker,"},{"line_number":543,"context_line":"                                                     want_objects\u003dTrue)"},{"line_number":544,"context_line":"            instance_list.fill_faults()"},{"line_number":545,"context_line":"        except exception.MarkerNotFound:"},{"line_number":546,"context_line":"            msg \u003d _(\u0027marker [%s] not found\u0027) % marker"},{"line_number":547,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPn%2F%2FZZU%3D","line":544,"updated":"2013-07-02 18:46:38.000000000","message":"This only needs to be done \u0027if is_detail\u0027.","commit_id":"0892b2ece11af1b4d4b732fd7f1d26c206037266"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"a7e01e0af384485e73613b0b52f3c7db09ad6517","unresolved":false,"context_lines":[{"line_number":969,"context_line":"            if access_ipv4:"},{"line_number":970,"context_line":"                self._validate_access_ipv4(access_ipv4)"},{"line_number":971,"context_line":"            update_dict[\u0027access_ip_v4\u0027] \u003d ("},{"line_number":972,"context_line":"                access_ipv4 and access_ipv4.strip() or None)"},{"line_number":973,"context_line":""},{"line_number":974,"context_line":"        if \u0027accessIPv6\u0027 in body[\u0027server\u0027]:"},{"line_number":975,"context_line":"            access_ipv6 \u003d body[\u0027server\u0027][\u0027accessIPv6\u0027]"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAPn%2F%2FQqA%3D","line":972,"updated":"2013-07-05 19:45:03.000000000","message":"This is changing behavior.  If access_ipv4 was None, it would be set to \u0027\u0027 before, and now it\u0027s set to None.","commit_id":"2a781f48c220353b82b748796998b2f5a12c4ad4"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"a7e01e0af384485e73613b0b52f3c7db09ad6517","unresolved":false,"context_lines":[{"line_number":976,"context_line":"            if access_ipv6:"},{"line_number":977,"context_line":"                self._validate_access_ipv6(access_ipv6)"},{"line_number":978,"context_line":"            update_dict[\u0027access_ip_v6\u0027] \u003d ("},{"line_number":979,"context_line":"                access_ipv6 and access_ipv6.strip() or None)"},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"        if \u0027auto_disk_config\u0027 in body[\u0027server\u0027]:"},{"line_number":982,"context_line":"            auto_disk_config \u003d strutils.bool_from_string("}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAPn%2F%2FQp8%3D","line":979,"updated":"2013-07-05 19:45:03.000000000","message":"same here","commit_id":"2a781f48c220353b82b748796998b2f5a12c4ad4"}],"nova/api/openstack/compute/views/servers.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                \"updated\": timeutils.isotime(instance[\"updated_at\"]),"},{"line_number":98,"context_line":"                \"addresses\": self._get_addresses(request, instance),"},{"line_number":99,"context_line":"                \"accessIPv4\": str(ip_v4) if ip_v4 is not None else \u0027\u0027,"},{"line_number":100,"context_line":"                \"accessIPv6\": str(ip_v6) if ip_v6 is not None else \u0027\u0027,"},{"line_number":101,"context_line":"                \"links\": self._get_links(request,"},{"line_number":102,"context_line":"                                         instance[\"uuid\"],"},{"line_number":103,"context_line":"                                         self._collection_name),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnZQ%3D","line":100,"updated":"2013-06-26 17:42:50.000000000","message":"The way netaddr.IPAddress works, an address of 0.0.0.0 will equate to boolean False. Thus, we need to check if it\u0027s actually None, else include it as-is.","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        elif isinstance(metadata, dict):"},{"line_number":145,"context_line":"            return metadata"},{"line_number":146,"context_line":"        else:"},{"line_number":147,"context_line":"            return {}"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @staticmethod"},{"line_number":150,"context_line":"    def _get_vm_state(instance):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnYw%3D","line":147,"updated":"2013-06-26 17:42:50.000000000","message":"This is just temporary until bug #1192012 is done. Right now, we could have a creative combination of Instance objects, instance dicts with list-like metadata, or instance dicts with dict-like metadata.","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"}],"nova/compute/api.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":1442,"context_line":"            if uuidutils.is_uuid_like(instance_id):"},{"line_number":1443,"context_line":"                instance \u003d self.db.instance_get_by_uuid(context, instance_id)"},{"line_number":1444,"context_line":"            elif utils.is_int_like(instance_id):"},{"line_number":1445,"context_line":"                instance \u003d self.db.instance_get(context, instance_id)"},{"line_number":1446,"context_line":"            else:"},{"line_number":1447,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance_id)"},{"line_number":1448,"context_line":"        except exception.InvalidID:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnYU%3D","line":1445,"updated":"2013-06-26 17:42:50.000000000","message":"We don\u0027t have an Instance.get_by_id() yet, so just do the regular sqlalchemy lookup here.","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":1458,"context_line":"        else:"},{"line_number":1459,"context_line":"            inst \u003d dict(instance.iteritems())"},{"line_number":1460,"context_line":"            # NOTE(comstud): Doesn\u0027t get returned with iteritems"},{"line_number":1461,"context_line":"            inst[\u0027name\u0027] \u003d instance[\u0027name\u0027]"},{"line_number":1462,"context_line":"        return inst"},{"line_number":1463,"context_line":""},{"line_number":1464,"context_line":"    def get_all(self, context, search_opts\u003dNone, sort_key\u003d\u0027created_at\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnYk%3D","line":1461,"updated":"2013-06-26 17:42:50.000000000","message":"Allow graceful transition to getting objects back from this interface. We already converted to instance dicts, so just do the object conversion instead if that\u0027s what they want.","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"}],"nova/tests/api/ec2/test_cloud.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":887,"context_line":"                \u0027launched_at\u0027: timeutils.utcnow(),"},{"line_number":888,"context_line":"                \u0027hostname\u0027: \u0027server-1111\u0027,"},{"line_number":889,"context_line":"                \u0027created_at\u0027: datetime.datetime(2012, 5, 1, 1, 1, 1,"},{"line_number":890,"context_line":"                                                tzinfo\u003dutc),"},{"line_number":891,"context_line":"                \u0027system_metadata\u0027: sys_meta"},{"line_number":892,"context_line":"        }"},{"line_number":893,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnXs%3D","line":890,"updated":"2013-06-26 17:42:50.000000000","message":"The DB layer actually returns naive datetime objects, but since we compare the results to these below, just make them TZ-aware for ease.","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"}],"nova/tests/api/openstack/compute/contrib/test_disk_config.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.stubs.Set(nova.db, \u0027instance_get\u0027, fake_instance_get)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        def fake_instance_get_by_uuid(context, uuid, columns_to_get\u003dNone):"},{"line_number":70,"context_line":"            for instance in FAKE_INSTANCES:"},{"line_number":71,"context_line":"                if uuid \u003d\u003d instance[\u0027uuid\u0027]:"},{"line_number":72,"context_line":"                    return instance"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnXk%3D","line":69,"updated":"2013-06-26 17:42:50.000000000","message":"This fake method was missing one of the properties of the method it\u0027s mocking.","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"}],"nova/tests/api/openstack/compute/plugins/v3/test_servers.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":687,"context_line":""},{"line_number":688,"context_line":"        def fake_get_all(compute_self, context, search_opts\u003dNone,"},{"line_number":689,"context_line":"                         sort_key\u003dNone, sort_dir\u003d\u0027desc\u0027,"},{"line_number":690,"context_line":"                         limit\u003dNone, marker\u003dNone, columns_to_join\u003dNone):"},{"line_number":691,"context_line":"            return [fakes.stub_instance(100, uuid\u003dserver_uuid)]"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"        self.stubs.Set(compute_api.API, \u0027get_all\u0027, fake_get_all)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnXU%3D","line":690,"updated":"2013-06-26 17:42:50.000000000","message":"This pattern is repeated a lot in this file. Just adding the missing argument from the real method these are mocking.","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"}],"nova/tests/api/openstack/compute/test_server_actions.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":997,"context_line":"        def fake_locked(context, instance_uuid):"},{"line_number":998,"context_line":"            return fake_instance.fake_db_instance(name\u003d\"foo\","},{"line_number":999,"context_line":"                                                  uuid\u003dFAKE_UUID,"},{"line_number":1000,"context_line":"                                                  locked\u003dTrue)"},{"line_number":1001,"context_line":"        self.stubs.Set(db, \u0027instance_get_by_uuid\u0027, fake_locked)"},{"line_number":1002,"context_line":"        body \u003d dict(reboot\u003ddict(type\u003d\"HARD\"))"},{"line_number":1003,"context_line":"        req \u003d fakes.HTTPRequest.blank(self.url)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnXE%3D","line":1000,"updated":"2013-06-26 17:42:50.000000000","message":"This just returns a more complete fake instance object using the helper, since objects will expect it to be complete.","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"}],"nova/tests/api/openstack/compute/test_servers.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":694,"context_line":""},{"line_number":695,"context_line":"        def fake_get_all(compute_self, context, search_opts\u003dNone,"},{"line_number":696,"context_line":"                         sort_key\u003dNone, sort_dir\u003d\u0027desc\u0027,"},{"line_number":697,"context_line":"                         limit\u003dNone, marker\u003dNone, want_objects\u003dFalse):"},{"line_number":698,"context_line":"            db_list \u003d [fakes.stub_instance(100, uuid\u003dserver_uuid)]"},{"line_number":699,"context_line":"            return instance_obj._make_instance_list("},{"line_number":700,"context_line":"                context, instance_obj.InstanceList(), db_list, FIELDS)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnW8%3D","line":697,"updated":"2013-06-26 17:42:50.000000000","message":"That pattern again, of fixing the argument list to match that of the mocked method. Repeated here a lot as well.","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":697,"context_line":"                         limit\u003dNone, marker\u003dNone, want_objects\u003dFalse):"},{"line_number":698,"context_line":"            db_list \u003d [fakes.stub_instance(100, uuid\u003dserver_uuid)]"},{"line_number":699,"context_line":"            return instance_obj._make_instance_list("},{"line_number":700,"context_line":"                context, instance_obj.InstanceList(), db_list, FIELDS)"},{"line_number":701,"context_line":""},{"line_number":702,"context_line":"        self.stubs.Set(compute_api.API, \u0027get_all\u0027, fake_get_all)"},{"line_number":703,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnWs%3D","line":700,"updated":"2013-06-26 17:42:50.000000000","message":"This is mocking compute_api\u0027s get_all() method, which returns objects in this case.","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":1074,"context_line":"        self.assertEqual(res_dict[\u0027server\u0027][\u0027id\u0027], FAKE_UUID)"},{"line_number":1075,"context_line":"        self.assertEqual(res_dict[\u0027server\u0027][\u0027name\u0027], \u0027server_test\u0027)"},{"line_number":1076,"context_line":"        self.assertEqual(res_dict[\u0027server\u0027][\u0027accessIPv4\u0027], \u00270.0.0.0\u0027)"},{"line_number":1077,"context_line":"        self.assertEqual(res_dict[\u0027server\u0027][\u0027accessIPv6\u0027], \u0027beef::123\u0027)"},{"line_number":1078,"context_line":""},{"line_number":1079,"context_line":"    def test_update_server_invalid_xml_raises_lookup(self):"},{"line_number":1080,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/servers/%s\u0027 % FAKE_UUID)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnWk%3D","line":1077,"updated":"2013-06-26 17:42:50.000000000","message":"Since we\u0027re storing the ip address as a real object instead of a string, something like ::0001 will get optimized to ::1 in the result. Since this would already happen if the database backend is postgres, I think this \"api change\" is trivial and okay.","commit_id":"ddb630c40db79064e69139cbf9464df1eae62b5a"}],"nova/tests/api/openstack/fakes.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6462f08bb337224543ba594125ad0d835e8a0b0a","unresolved":false,"context_lines":[{"line_number":404,"context_line":"                                      \u0027ips\u0027: [_ip(ip) for ip in pub0]},"},{"line_number":405,"context_line":"                                      {\u0027cidr\u0027: \u0027b33f::/64\u0027,"},{"line_number":406,"context_line":"                                       \u0027ips\u0027: [_ip(ip) for ip in pub1]}]}}]"},{"line_number":407,"context_line":"        return {\"info_cache\": {\"network_info\": nw_cache}}"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    if not isinstance(nw_cache, basestring):"},{"line_number":410,"context_line":"        nw_cache \u003d jsonutils.dumps(nw_cache)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FnWY%3D","side":"PARENT","line":407,"updated":"2013-06-26 17:42:50.000000000","message":"This was not JSON-ing the network_info, which was papered over previously. No reason not to just drop through to the code below, which handles it properly.","commit_id":"13b108b8452f4ce5a7450e97f4b5de0563e419a3"}]}
