)]}'
{"nova/objects/build_request.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a87c9a1efd662fb27e9ea7ca760c15c14bb716cf","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        # was never persisted."},{"line_number":105,"context_line":"        self.instance.created_at \u003d self.created_at"},{"line_number":106,"context_line":"        self.instance.updated_at \u003d self.updated_at"},{"line_number":107,"context_line":"        self.instance.tags \u003d objects.TagList([])"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def _load_block_device_mappings(self, db_bdms):"},{"line_number":110,"context_line":"        # \u0027db_bdms\u0027 is a serialized BlockDeviceMappingList object. If it\u0027s None"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_d7c6164a","side":"PARENT","line":107,"range":{"start_line":107,"start_character":45,"end_line":107,"end_character":47},"updated":"2017-04-25 19:43:42.000000000","message":"This probably actually had no effect:\n\nhttps://github.com/openstack/oslo.versionedobjects/blob/master/oslo_versionedobjects/base.py#L797\n\nThe args are ignored.","commit_id":"7924fdc93a900eed27b598efb8bf374ae43188b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"de888dcf14f14f33838933ca93364433fa951ed4","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # created_at/updated_at. There is no soft delete for this object."},{"line_number":51,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":53,"context_line":"        \u0027tags\u0027: fields.ObjectField(\u0027TagList\u0027, nullable\u003dTrue),"},{"line_number":54,"context_line":"    }"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def obj_make_compatible(self, primitive, target_version):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_aca69d52","line":53,"range":{"start_line":53,"start_character":46,"end_line":53,"end_character":59},"updated":"2017-04-25 19:09:53.000000000","message":"I\u0027m not sure that this should be nullable\u003dTrue, it\u0027s not for the Instance object tags field definition:\n\n\u0027tags\u0027: fields.ObjectField(\u0027TagList\u0027),","commit_id":"2d792fedd5ba3af3638ae50409349b3fa78e14e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2edc37fd3c8cc05e0b4cee152c70ba72aeb1d5fe","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":60,"context_line":"        if target_version \u003c (1, 1) and \u0027block_device_mappings\u0027 in primitive:"},{"line_number":61,"context_line":"            del primitive[\u0027block_device_mappings\u0027]"},{"line_number":62,"context_line":"        elif target_version \u003c (1, 3) and \u0027tags\u0027 in primitive:"},{"line_number":63,"context_line":"            del primitive[\u0027tags\u0027]"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def _load_instance(self, db_instance):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_92b3fc4d","line":62,"updated":"2017-04-25 19:45:03.000000000","message":"We should have a unit test for this in nova.tests.objects.test_build_request.","commit_id":"2d792fedd5ba3af3638ae50409349b3fa78e14e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa912d2f946e11043b7e2a6b042a79d93d7af456","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":60,"context_line":"        if target_version \u003c (1, 1) and \u0027block_device_mappings\u0027 in primitive:"},{"line_number":61,"context_line":"            del primitive[\u0027block_device_mappings\u0027]"},{"line_number":62,"context_line":"        elif target_version \u003c (1, 3) and \u0027tags\u0027 in primitive:"},{"line_number":63,"context_line":"            del primitive[\u0027tags\u0027]"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def _load_instance(self, db_instance):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_d2d7444f","line":62,"in_reply_to":"5ff73747_92b3fc4d","updated":"2017-04-25 19:45:38.000000000","message":"Sorry I mean nova.tests.unit.objects.test_build_request.","commit_id":"2d792fedd5ba3af3638ae50409349b3fa78e14e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"de888dcf14f14f33838933ca93364433fa951ed4","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        if db_tags is None:"},{"line_number":136,"context_line":"            LOG.debug(\u0027Failed to load tags from BuildRequest \u0027"},{"line_number":137,"context_line":"                      \u0027for instance %s because it is None\u0027, self.instance_uuid)"},{"line_number":138,"context_line":"            self.tags \u003d objects.TagList()"},{"line_number":139,"context_line":"            return"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        self.tags \u003d ("}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_572b2681","line":138,"range":{"start_line":138,"start_character":24,"end_line":138,"end_character":41},"updated":"2017-04-25 19:09:53.000000000","message":"Does this need to match what _load_instance used to do?\n\nobjects.TagList([])\n\nSo pass in an empty list?","commit_id":"2d792fedd5ba3af3638ae50409349b3fa78e14e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a87c9a1efd662fb27e9ea7ca760c15c14bb716cf","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        if db_tags is None:"},{"line_number":136,"context_line":"            LOG.debug(\u0027Failed to load tags from BuildRequest \u0027"},{"line_number":137,"context_line":"                      \u0027for instance %s because it is None\u0027, self.instance_uuid)"},{"line_number":138,"context_line":"            self.tags \u003d objects.TagList()"},{"line_number":139,"context_line":"            return"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        self.tags \u003d ("}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_b7c5ca3e","line":138,"range":{"start_line":138,"start_character":24,"end_line":138,"end_character":41},"in_reply_to":"5ff73747_572b2681","updated":"2017-04-25 19:43:42.000000000","message":"See above, I don\u0027t think it matters.","commit_id":"2d792fedd5ba3af3638ae50409349b3fa78e14e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"de888dcf14f14f33838933ca93364433fa951ed4","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        # so this is okay for the moment."},{"line_number":244,"context_line":"        instance \u003d objects.Instance(context)"},{"line_number":245,"context_line":"        for field in self.instance.obj_fields:"},{"line_number":246,"context_line":"            # NOTE(danms): Don\u0027t copy the defaulted tags field"},{"line_number":247,"context_line":"            # as instance.create() won\u0027t handle it properly."},{"line_number":248,"context_line":"            if field \u003d\u003d \u0027tags\u0027:"},{"line_number":249,"context_line":"                continue"},{"line_number":250,"context_line":"            if self.instance.obj_attr_is_set(field):"},{"line_number":251,"context_line":"                setattr(instance, field, getattr(self.instance, field))"},{"line_number":252,"context_line":"        return instance"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_ec5a654e","line":249,"range":{"start_line":246,"start_character":12,"end_line":249,"end_character":24},"updated":"2017-04-25 19:09:53.000000000","message":"Do change this later when the API support is added in?","commit_id":"2d792fedd5ba3af3638ae50409349b3fa78e14e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"de888dcf14f14f33838933ca93364433fa951ed4","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        build_requests \u003d cls.get_all(context)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        # Fortunately some filters do not apply here."},{"line_number":365,"context_line":"        # \u0027tags\u0027 can not be applied at boot time so will not be set for an"},{"line_number":366,"context_line":"        # instance here."},{"line_number":367,"context_line":"        # \u0027changes-since\u0027 works off of the updated_at field which has not yet"},{"line_number":368,"context_line":"        # been set at the point in the boot process where build_request still"},{"line_number":369,"context_line":"        # exists. So it can be ignored."}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_ac29fd9b","line":366,"range":{"start_line":365,"start_character":10,"end_line":366,"end_character":24},"updated":"2017-04-25 19:09:53.000000000","message":"This will need to be handled in the API change.","commit_id":"2d792fedd5ba3af3638ae50409349b3fa78e14e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c145a8c78f471e5c32940f42a808a0a97037ac8f","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":60,"context_line":"        if target_version \u003c (1, 1) and \u0027block_device_mappings\u0027 in primitive:"},{"line_number":61,"context_line":"            del primitive[\u0027block_device_mappings\u0027]"},{"line_number":62,"context_line":"        elif target_version \u003c (1, 3) and \u0027tags\u0027 in primitive:"},{"line_number":63,"context_line":"            del primitive[\u0027tags\u0027]"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def _load_instance(self, db_instance):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_72d3d039","line":62,"updated":"2017-04-25 19:50:47.000000000","message":"Need a unit test for this.","commit_id":"e6c07096d0708c7efdfde68aabbbbd44206d7eb5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"a40b65cd939ff93e820b33c1f282dc1528855515","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":60,"context_line":"        if target_version \u003c (1, 1) and \u0027block_device_mappings\u0027 in primitive:"},{"line_number":61,"context_line":"            del primitive[\u0027block_device_mappings\u0027]"},{"line_number":62,"context_line":"        elif target_version \u003c (1, 3) and \u0027tags\u0027 in primitive:"},{"line_number":63,"context_line":"            del primitive[\u0027tags\u0027]"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def _load_instance(self, db_instance):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_4203540e","line":62,"in_reply_to":"5ff73747_72d3d039","updated":"2017-04-26 06:41:50.000000000","message":"Done","commit_id":"e6c07096d0708c7efdfde68aabbbbd44206d7eb5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c145a8c78f471e5c32940f42a808a0a97037ac8f","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        # was never persisted."},{"line_number":109,"context_line":"        self.instance.created_at \u003d self.created_at"},{"line_number":110,"context_line":"        self.instance.updated_at \u003d self.updated_at"},{"line_number":111,"context_line":"        self.instance.tags \u003d self.tags"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _load_block_device_mappings(self, db_bdms):"},{"line_number":114,"context_line":"        # \u0027db_bdms\u0027 is a serialized BlockDeviceMappingList object. If it\u0027s None"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_52a454b9","line":111,"updated":"2017-04-25 19:50:47.000000000","message":"We should probably have a test asserting that when we set tags on the build request, create it and reload it from the database that the build_request.instance.tags is the same thing.","commit_id":"e6c07096d0708c7efdfde68aabbbbd44206d7eb5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"607db3b4fe951f3ae731bd41bcf16192dec06fe2","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        # was never persisted."},{"line_number":109,"context_line":"        self.instance.created_at \u003d self.created_at"},{"line_number":110,"context_line":"        self.instance.updated_at \u003d self.updated_at"},{"line_number":111,"context_line":"        self.instance.tags \u003d self.tags"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _load_block_device_mappings(self, db_bdms):"},{"line_number":114,"context_line":"        # \u0027db_bdms\u0027 is a serialized BlockDeviceMappingList object. If it\u0027s None"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_704bac58","line":111,"in_reply_to":"5ff73747_420a348a","updated":"2017-04-26 14:47:40.000000000","message":"I think so, at least if the test is using the database (extends TestCase). You\u0027d create a BuildRequest object, set a tag on it, create it in the DB which will then reload it from the database and set the fields, and you\u0027d then assert that build_request.tags is equal to build_request.instance.tags.","commit_id":"e6c07096d0708c7efdfde68aabbbbd44206d7eb5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"a40b65cd939ff93e820b33c1f282dc1528855515","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        # was never persisted."},{"line_number":109,"context_line":"        self.instance.created_at \u003d self.created_at"},{"line_number":110,"context_line":"        self.instance.updated_at \u003d self.updated_at"},{"line_number":111,"context_line":"        self.instance.tags \u003d self.tags"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _load_block_device_mappings(self, db_bdms):"},{"line_number":114,"context_line":"        # \u0027db_bdms\u0027 is a serialized BlockDeviceMappingList object. If it\u0027s None"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_e213805b","line":111,"in_reply_to":"5ff73747_52a454b9","updated":"2017-04-26 06:41:50.000000000","message":"OK, I will add a test","commit_id":"e6c07096d0708c7efdfde68aabbbbd44206d7eb5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"678cdc06bcd51fcfa1d0b38b02e34fdf335fc753","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        # was never persisted."},{"line_number":109,"context_line":"        self.instance.created_at \u003d self.created_at"},{"line_number":110,"context_line":"        self.instance.updated_at \u003d self.updated_at"},{"line_number":111,"context_line":"        self.instance.tags \u003d self.tags"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _load_block_device_mappings(self, db_bdms):"},{"line_number":114,"context_line":"        # \u0027db_bdms\u0027 is a serialized BlockDeviceMappingList object. If it\u0027s None"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_420a348a","line":111,"in_reply_to":"5ff73747_52a454b9","updated":"2017-04-26 07:12:16.000000000","message":"could this be done in a unit test? No?","commit_id":"e6c07096d0708c7efdfde68aabbbbd44206d7eb5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c145a8c78f471e5c32940f42a808a0a97037ac8f","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        # Fortunately some filters do not apply here."},{"line_number":367,"context_line":"        # \u0027tags\u0027 can not be applied at boot time so will not be set for an"},{"line_number":368,"context_line":"        # instance here."},{"line_number":369,"context_line":"        #  TODO(zhengzhenyu): Handle this when the API supports creating"},{"line_number":370,"context_line":"        # servers with tags."},{"line_number":371,"context_line":"        # \u0027changes-since\u0027 works off of the updated_at field which has not yet"},{"line_number":372,"context_line":"        # been set at the point in the boot process where build_request still"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_b20278b3","line":369,"range":{"start_line":369,"start_character":10,"end_line":369,"end_character":11},"updated":"2017-04-25 19:50:47.000000000","message":"Oops one too many spaces.","commit_id":"e6c07096d0708c7efdfde68aabbbbd44206d7eb5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"a40b65cd939ff93e820b33c1f282dc1528855515","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        # Fortunately some filters do not apply here."},{"line_number":367,"context_line":"        # \u0027tags\u0027 can not be applied at boot time so will not be set for an"},{"line_number":368,"context_line":"        # instance here."},{"line_number":369,"context_line":"        #  TODO(zhengzhenyu): Handle this when the API supports creating"},{"line_number":370,"context_line":"        # servers with tags."},{"line_number":371,"context_line":"        # \u0027changes-since\u0027 works off of the updated_at field which has not yet"},{"line_number":372,"context_line":"        # been set at the point in the boot process where build_request still"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_5f968ff2","line":369,"range":{"start_line":369,"start_character":10,"end_line":369,"end_character":11},"in_reply_to":"5ff73747_b20278b3","updated":"2017-04-26 06:41:50.000000000","message":"Done","commit_id":"e6c07096d0708c7efdfde68aabbbbd44206d7eb5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0b3e5e09177d719bc4b6b7f3934e3f528a04ece7","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        # was never persisted."},{"line_number":109,"context_line":"        self.instance.created_at \u003d self.created_at"},{"line_number":110,"context_line":"        self.instance.updated_at \u003d self.updated_at"},{"line_number":111,"context_line":"        self.instance.tags \u003d self.tags"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _load_block_device_mappings(self, db_bdms):"},{"line_number":114,"context_line":"        # \u0027db_bdms\u0027 is a serialized BlockDeviceMappingList object. If it\u0027s None"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_f80facde","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":38},"updated":"2017-04-26 10:58:39.000000000","message":"Copy Outstanding comments from patchset 2:\nMatt Riedemann\n3:50 AM\nWe should probably have a test asserting that when we set tags on the build request, create it and reload it from the database that the build_request.instance.tags is the same thing.\n\nZhenyu Zheng\n3:12 PM\ncould this be done in a unit test? No?","commit_id":"a2f42b1cb58919fe7a9da0d0423f83f36dfbaa40"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b5e2bcb55df52bab4525700e436f377130dc0d9a","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        # was never persisted."},{"line_number":109,"context_line":"        self.instance.created_at \u003d self.created_at"},{"line_number":110,"context_line":"        self.instance.updated_at \u003d self.updated_at"},{"line_number":111,"context_line":"        self.instance.tags \u003d self.tags"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _load_block_device_mappings(self, db_bdms):"},{"line_number":114,"context_line":"        # \u0027db_bdms\u0027 is a serialized BlockDeviceMappingList object. If it\u0027s None"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_f0a57c05","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":38},"in_reply_to":"5ff73747_f80facde","updated":"2017-04-26 14:48:10.000000000","message":"I think so, at least if the test is using the database (extends TestCase). You\u0027d create a BuildRequest object, set a tag on it, create it in the DB which will then reload it from the database and set the fields, and you\u0027d then assert that build_request.tags is equal to build_request.instance.tags.","commit_id":"a2f42b1cb58919fe7a9da0d0423f83f36dfbaa40"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2b8684bb2015771811e893071c378581a4907897","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        for field in self.instance.obj_fields:"},{"line_number":246,"context_line":"            # NOTE(danms): Don\u0027t copy the defaulted tags field"},{"line_number":247,"context_line":"            # as instance.create() won\u0027t handle it properly."},{"line_number":248,"context_line":"            # TODO(zhengzhenyu): Handle this when the API supports creating"},{"line_number":249,"context_line":"            # servers with tags."},{"line_number":250,"context_line":"            if field \u003d\u003d \u0027tags\u0027:"},{"line_number":251,"context_line":"                continue"},{"line_number":252,"context_line":"            if self.instance.obj_attr_is_set(field):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff0f0b1f_47ca1f6d","line":249,"range":{"start_line":248,"start_character":33,"end_line":249,"end_character":32},"updated":"2017-05-22 09:02:31.000000000","message":"I guess you want to say: \"Handle this when the instance.create() supports creating instances with tags\"?\n\nYour patch will enable the API to support creating servers with tags, or you mean you will change this code after your last patch?","commit_id":"31c09ddd20cf0953d7cedde0544e17afde78c7c3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e493e9fa5eb748f22520580d65338e8a59186757","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        for field in self.instance.obj_fields:"},{"line_number":246,"context_line":"            # NOTE(danms): Don\u0027t copy the defaulted tags field"},{"line_number":247,"context_line":"            # as instance.create() won\u0027t handle it properly."},{"line_number":248,"context_line":"            # TODO(zhengzhenyu): Handle this when the API supports creating"},{"line_number":249,"context_line":"            # servers with tags."},{"line_number":250,"context_line":"            if field \u003d\u003d \u0027tags\u0027:"},{"line_number":251,"context_line":"                continue"},{"line_number":252,"context_line":"            if self.instance.obj_attr_is_set(field):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff0f0b1f_a39d1d67","line":249,"range":{"start_line":248,"start_character":33,"end_line":249,"end_character":32},"in_reply_to":"ff0f0b1f_340cc63f","updated":"2017-05-24 09:08:21.000000000","message":"ah, I see now, thanks. I probably just need to wait for the last patch up","commit_id":"31c09ddd20cf0953d7cedde0544e17afde78c7c3"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"51c88c8c81b1eb8164e10fefd4525e36be90e046","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        for field in self.instance.obj_fields:"},{"line_number":246,"context_line":"            # NOTE(danms): Don\u0027t copy the defaulted tags field"},{"line_number":247,"context_line":"            # as instance.create() won\u0027t handle it properly."},{"line_number":248,"context_line":"            # TODO(zhengzhenyu): Handle this when the API supports creating"},{"line_number":249,"context_line":"            # servers with tags."},{"line_number":250,"context_line":"            if field \u003d\u003d \u0027tags\u0027:"},{"line_number":251,"context_line":"                continue"},{"line_number":252,"context_line":"            if self.instance.obj_attr_is_set(field):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff0f0b1f_a738db3c","line":249,"range":{"start_line":248,"start_character":33,"end_line":249,"end_character":32},"in_reply_to":"ff0f0b1f_47ca1f6d","updated":"2017-05-22 09:06:38.000000000","message":"I think it means I will change this in the last patch, this note is added by Matt :)","commit_id":"31c09ddd20cf0953d7cedde0544e17afde78c7c3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"77ac6e7cfa6c2c54ec25dc72872cc30c6d1ce645","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        for field in self.instance.obj_fields:"},{"line_number":246,"context_line":"            # NOTE(danms): Don\u0027t copy the defaulted tags field"},{"line_number":247,"context_line":"            # as instance.create() won\u0027t handle it properly."},{"line_number":248,"context_line":"            # TODO(zhengzhenyu): Handle this when the API supports creating"},{"line_number":249,"context_line":"            # servers with tags."},{"line_number":250,"context_line":"            if field \u003d\u003d \u0027tags\u0027:"},{"line_number":251,"context_line":"                continue"},{"line_number":252,"context_line":"            if self.instance.obj_attr_is_set(field):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff0f0b1f_340cc63f","line":249,"range":{"start_line":248,"start_character":33,"end_line":249,"end_character":32},"in_reply_to":"ff0f0b1f_a738db3c","updated":"2017-05-23 14:41:15.000000000","message":"Right, we\u0027ll need to handle this \"if field \u003d\u003d \u0027tags\u0027\" continue conditional in the last patch in the series which adds support for applying tags when creating a server. Otherwise I don\u0027t think the tags get put on the build request and created in conductor.","commit_id":"31c09ddd20cf0953d7cedde0544e17afde78c7c3"}],"nova/tests/unit/objects/test_build_request.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"820dce3b9e96d1ba0748451d8b3da79e7910e646","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        self.assertNotIn(\u0027tags\u0027, primitive)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"class TestBuildRequestObject(test_objects._LocalTest,"},{"line_number":171,"context_line":"                             _TestBuildRequestObject):"},{"line_number":172,"context_line":"    pass"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"class TestRemoteBuildRequestObject(test_objects._RemoteTest,"},{"line_number":176,"context_line":"                                   _TestBuildRequestObject):"},{"line_number":177,"context_line":"    pass"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_b0ddb471","line":176,"range":{"start_line":170,"start_character":0,"end_line":176,"end_character":60},"updated":"2017-04-26 14:49:51.000000000","message":"These are both backed by a sqlite database, so you can perform the build request create and load test to see that the build request tags are stored on the build request.instance.tags field.","commit_id":"a2f42b1cb58919fe7a9da0d0423f83f36dfbaa40"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d8f6da4c1ddb7bfa4e937ca48dbc3b7a39f419c1","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    def test_create_with_tags_set(self):"},{"line_number":170,"context_line":"        build_request_obj \u003d fake_build_request.fake_req_obj(self.context)"},{"line_number":171,"context_line":"        build_request_obj.create()"},{"line_number":172,"context_line":"        self.assertEqual(build_request_obj.instance.tags,"},{"line_number":173,"context_line":"                         build_request_obj.tags)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class TestBuildRequestObject(test_objects._LocalTest,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5ff73747_feb52f7f","line":173,"range":{"start_line":172,"start_character":0,"end_line":173,"end_character":48},"updated":"2017-04-27 10:28:42.000000000","message":"@Matt, is this what you are looking for?","commit_id":"6482f64f0fa0f869f66aab1713626a943adf7e80"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e37c078a7d6a516a376a0cedadf9d935cc1e09ca","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    def test_create_with_tags_set(self):"},{"line_number":170,"context_line":"        build_request_obj \u003d fake_build_request.fake_req_obj(self.context)"},{"line_number":171,"context_line":"        build_request_obj.create()"},{"line_number":172,"context_line":"        self.assertEqual(build_request_obj.instance.tags,"},{"line_number":173,"context_line":"                         build_request_obj.tags)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class TestBuildRequestObject(test_objects._LocalTest,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5ff73747_09a408a5","line":173,"range":{"start_line":172,"start_character":0,"end_line":173,"end_character":48},"in_reply_to":"5ff73747_feb52f7f","updated":"2017-04-27 22:50:19.000000000","message":"Yes, a description for the test would be nice, and asserting that build_request_obj.tags is not empty before calling create() would be good.","commit_id":"6482f64f0fa0f869f66aab1713626a943adf7e80"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a386aeb9609541c2110440152e0255b57177d076","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        build_request_obj.create()"},{"line_number":176,"context_line":"        # Can\u0027t compare list objects directly, just compare the single"},{"line_number":177,"context_line":"        # item they contain."},{"line_number":178,"context_line":"        objects.base.obj_equal_prims(build_request_obj.tags[0],"},{"line_number":179,"context_line":"                                     build_request_obj.instance.tags[0])"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5ff73747_7327dacb","line":178,"range":{"start_line":178,"start_character":8,"end_line":178,"end_character":20},"updated":"2017-04-28 20:58:00.000000000","message":"Let\u0027s not rely on imports from other modules, just import nova.objects.base in this test module.","commit_id":"a56919d2c2a5f43ed977402b540d600cecc9d808"}]}
