)]}'
{"tempest/api/network/test_tags.py":[{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"e1d4e49b0772a468718fb9450284298c41b6dc88","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    @decorators.idempotent_id(\u0027ee76bfaf-ac94-4d74-9ecc-4bbd4c583cb1\u0027)"},{"line_number":57,"context_line":"    def test_create_list_show_update_delete_tags(self):"},{"line_number":58,"context_line":"        # Validate that creating a tag on a network resource works."},{"line_number":59,"context_line":"        created_tag_name \u003d self._create_tag(\u0027networks\u0027, self.network[\u0027id\u0027])"},{"line_number":60,"context_line":"        self.tags_client.check_tag(\u0027networks\u0027, self.network[\u0027id\u0027],"},{"line_number":61,"context_line":"                                   created_tag_name)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_745e4fe7","line":59,"range":{"start_line":59,"start_character":45,"end_line":59,"end_character":53},"updated":"2017-05-18 06:14:43.000000000","message":"Hi, Felipe. Here I want to know whether the tags client support to \u0027Enhanced Tag Extension\u0027 (such as subnets, ports, routers, and subnet pools). If supported, a resource type can\nbe choosen randomly in this test.","commit_id":"d986c73cd41a251164f715b938f9f40120987322"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af626c9fe9e75789e721529a489a760173ac9359","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from tempest import test"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TagsTestJSON(base.BaseNetworkTest):"},{"line_number":24,"context_line":"    \"\"\"Tests the following operations in the tags API:"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        Update all tags."}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_83614208","line":23,"updated":"2017-06-01 21:55:38.000000000","message":"There\u0027s no need for JSON (or XML) in class name anymore","commit_id":"3f14a9ff9532abf94541a67c3549ea7881e121f0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"719dc50bf1642ff474c0949023e0e02a8eb03728","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from tempest import test"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TagsTestJSON(base.BaseNetworkTest):"},{"line_number":24,"context_line":"    \"\"\"Tests the following operations in the tags API:"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        Update all tags."}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_5c2c24ab","line":23,"in_reply_to":"df140735_83614208","updated":"2017-06-02 03:33:42.000000000","message":"Done","commit_id":"3f14a9ff9532abf94541a67c3549ea7881e121f0"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af626c9fe9e75789e721529a489a760173ac9359","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual([created_tag_name], retrieved_tags)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # Generate 3 new tag names."},{"line_number":71,"context_line":"        replace_tags \u003d []"},{"line_number":72,"context_line":"        for _ in range(3):"},{"line_number":73,"context_line":"            replace_tags.append(data_utils.rand_name("},{"line_number":74,"context_line":"                self.__class__.__name__ + \u0027-Tag\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_2302760c","line":71,"updated":"2017-06-01 21:55:38.000000000","message":"Use a list comprehension: \n\n  replace_tags \u003d [data_utils.rand_name(\n                self.__class__.__name__ + \u0027-Tag\u0027) for _ in range(3)]","commit_id":"3f14a9ff9532abf94541a67c3549ea7881e121f0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"719dc50bf1642ff474c0949023e0e02a8eb03728","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual([created_tag_name], retrieved_tags)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # Generate 3 new tag names."},{"line_number":71,"context_line":"        replace_tags \u003d []"},{"line_number":72,"context_line":"        for _ in range(3):"},{"line_number":73,"context_line":"            replace_tags.append(data_utils.rand_name("},{"line_number":74,"context_line":"                self.__class__.__name__ + \u0027-Tag\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_1c1c6c76","line":71,"in_reply_to":"df140735_2302760c","updated":"2017-06-02 03:33:42.000000000","message":"Done","commit_id":"3f14a9ff9532abf94541a67c3549ea7881e121f0"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af626c9fe9e75789e721529a489a760173ac9359","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        updated_tags \u003d self.tags_client.update_all_tags("},{"line_number":79,"context_line":"            \u0027networks\u0027, self.network[\u0027id\u0027], replace_tags)[\u0027tags\u0027]"},{"line_number":80,"context_line":"        self.assertEqual(3, len(updated_tags))"},{"line_number":81,"context_line":"        for i in range(3):"},{"line_number":82,"context_line":"            self.assertIn(replace_tags[i], updated_tags)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # Delete the first tag and check that it has been removed."}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_de2ef190","line":81,"updated":"2017-06-01 21:55:38.000000000","message":"use set comparison:\n\nself.assertEqual(set(replace_tags), set(updated_tags))","commit_id":"3f14a9ff9532abf94541a67c3549ea7881e121f0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"719dc50bf1642ff474c0949023e0e02a8eb03728","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        updated_tags \u003d self.tags_client.update_all_tags("},{"line_number":79,"context_line":"            \u0027networks\u0027, self.network[\u0027id\u0027], replace_tags)[\u0027tags\u0027]"},{"line_number":80,"context_line":"        self.assertEqual(3, len(updated_tags))"},{"line_number":81,"context_line":"        for i in range(3):"},{"line_number":82,"context_line":"            self.assertIn(replace_tags[i], updated_tags)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # Delete the first tag and check that it has been removed."}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_dc11545f","line":81,"in_reply_to":"df140735_de2ef190","updated":"2017-06-02 03:33:42.000000000","message":"Done","commit_id":"3f14a9ff9532abf94541a67c3549ea7881e121f0"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"84de2f9d96660a5f37633925fc6c09107586ad29","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        # Validate that listing tags on a network resource works."},{"line_number":60,"context_line":"        retrieved_tags \u003d self.tags_client.list_tags("},{"line_number":61,"context_line":"            \u0027networks\u0027, self.network[\u0027id\u0027])[\u0027tags\u0027]"},{"line_number":62,"context_line":"        self.assertNotEmpty(retrieved_tags)"},{"line_number":63,"context_line":"        self.assertEqual([tag_name], retrieved_tags)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        # Generate 3 new tag names."}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_4aa17195","line":62,"range":{"start_line":62,"start_character":8,"end_line":62,"end_character":43},"updated":"2017-06-07 03:57:28.000000000","message":"this seems not necessary","commit_id":"e938af094b0e60e609675af6c4b68a6571eada05"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"05d3aa4ad0f977f2bba74ecf2f5534883e5a97f6","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        # Validate that listing tags on a network resource works."},{"line_number":60,"context_line":"        retrieved_tags \u003d self.tags_client.list_tags("},{"line_number":61,"context_line":"            \u0027networks\u0027, self.network[\u0027id\u0027])[\u0027tags\u0027]"},{"line_number":62,"context_line":"        self.assertNotEmpty(retrieved_tags)"},{"line_number":63,"context_line":"        self.assertEqual([tag_name], retrieved_tags)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        # Generate 3 new tag names."}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_1e2ded45","line":62,"range":{"start_line":62,"start_character":8,"end_line":62,"end_character":43},"in_reply_to":"df140735_4aa17195","updated":"2017-06-07 13:23:02.000000000","message":"Fixed in next patch","commit_id":"e938af094b0e60e609675af6c4b68a6571eada05"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"84de2f9d96660a5f37633925fc6c09107586ad29","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        # network resource has the 3 new tags."},{"line_number":71,"context_line":"        updated_tags \u003d self.tags_client.update_all_tags("},{"line_number":72,"context_line":"            \u0027networks\u0027, self.network[\u0027id\u0027], replace_tags)[\u0027tags\u0027]"},{"line_number":73,"context_line":"        self.addCleanup(self.tags_client.delete_all_tags, \u0027networks\u0027,"},{"line_number":74,"context_line":"                        self.network[\u0027id\u0027])"},{"line_number":75,"context_line":"        self.assertEqual(3, len(updated_tags))"},{"line_number":76,"context_line":"        self.assertEqual(set(replace_tags), set(updated_tags))"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_ea996579","line":74,"range":{"start_line":73,"start_character":0,"end_line":74,"end_character":43},"updated":"2017-06-07 03:57:28.000000000","message":"this is duplicated","commit_id":"e938af094b0e60e609675af6c4b68a6571eada05"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"05d3aa4ad0f977f2bba74ecf2f5534883e5a97f6","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        # network resource has the 3 new tags."},{"line_number":71,"context_line":"        updated_tags \u003d self.tags_client.update_all_tags("},{"line_number":72,"context_line":"            \u0027networks\u0027, self.network[\u0027id\u0027], replace_tags)[\u0027tags\u0027]"},{"line_number":73,"context_line":"        self.addCleanup(self.tags_client.delete_all_tags, \u0027networks\u0027,"},{"line_number":74,"context_line":"                        self.network[\u0027id\u0027])"},{"line_number":75,"context_line":"        self.assertEqual(3, len(updated_tags))"},{"line_number":76,"context_line":"        self.assertEqual(set(replace_tags), set(updated_tags))"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_5e0125af","line":74,"range":{"start_line":73,"start_character":0,"end_line":74,"end_character":43},"in_reply_to":"df140735_ea996579","updated":"2017-06-07 13:23:02.000000000","message":"Good catch, fixed in next patch.","commit_id":"e938af094b0e60e609675af6c4b68a6571eada05"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"2d5279195218033bf164cec26123caa5247015b2","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        cls.network \u003d cls.create_network()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @decorators.idempotent_id(\u0027ee76bfaf-ac94-4d74-9ecc-4bbd4c583cb1\u0027)"},{"line_number":50,"context_line":"    def test_create_list_show_update_delete_tags(self):"},{"line_number":51,"context_line":"        # Validate that creating a tag on a network resource works."},{"line_number":52,"context_line":"        tag_name \u003d data_utils.rand_name(self.__class__.__name__ + \u0027-Tag\u0027)"},{"line_number":53,"context_line":"        self.tags_client.create_tag(\u0027networks\u0027, self.network[\u0027id\u0027], tag_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_517be5f3","line":50,"updated":"2017-06-15 07:08:24.000000000","message":"heh, you do all of the operations in one test method. I was wondering we could split this into 2 or 3 (or more). Because I think a test case should be small/simple, basically.\nBut it\u0027s also a trade-off.. If we split this, we need to create tags several times. So, I\u0027m fine with this, so far.","commit_id":"1177942f0eb4724a3585b77bbcb6e2b9b27b0a40"}],"tempest/lib/services/network/tags_client.py":[{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"826821d61cfd4ccb55f5b5e8906b9009098aa199","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        http://developer.openstack.org/api-ref/networking/v2/index.html#add-a-tag"},{"line_number":63,"context_line":"        \"\"\""},{"line_number":64,"context_line":"        uri \u003d \u0027v2.0/%s/%s/tags/%s\u0027 % (resource_type, resource_id, tag)"},{"line_number":65,"context_line":"        resp, _ \u003d self.put(uri, {})"},{"line_number":66,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":67,"context_line":"        return rest_client.ResponseBody(resp)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_b9ee1f86","line":65,"range":{"start_line":65,"start_character":32,"end_line":65,"end_character":34},"updated":"2017-05-18 07:46:16.000000000","message":"How about trying json.dumps({})?","commit_id":"d986c73cd41a251164f715b938f9f40120987322"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"84de2f9d96660a5f37633925fc6c09107586ad29","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class TagsClient(rest_client.RestClient):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def update_all_tags(self, resource_type, resource_id, tags):"},{"line_number":24,"context_line":"        \"\"\"Replace all tags on the resource."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        For more information, please refer to the official API reference:"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_aae00dce","line":23,"range":{"start_line":23,"start_character":4,"end_line":23,"end_character":23},"updated":"2017-06-07 03:57:28.000000000","message":"nit:\nusually we will put the interfaces in sequence create - update - show - delete...","commit_id":"e938af094b0e60e609675af6c4b68a6571eada05"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"05d3aa4ad0f977f2bba74ecf2f5534883e5a97f6","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class TagsClient(rest_client.RestClient):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def update_all_tags(self, resource_type, resource_id, tags):"},{"line_number":24,"context_line":"        \"\"\"Replace all tags on the resource."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        For more information, please refer to the official API reference:"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_febfd9cd","line":23,"range":{"start_line":23,"start_character":4,"end_line":23,"end_character":23},"in_reply_to":"df140735_aae00dce","updated":"2017-06-07 13:23:02.000000000","message":"Fixed in next patch","commit_id":"e938af094b0e60e609675af6c4b68a6571eada05"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"84de2f9d96660a5f37633925fc6c09107586ad29","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":45,"context_line":"        return rest_client.ResponseBody(resp)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def check_tag_existence(self, resource_type, resource_id, tag):"},{"line_number":48,"context_line":"        \"\"\"Confirm that a given tag is set on the resource."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        For more information, please refer to the official API reference:"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_cad10132","line":47,"range":{"start_line":47,"start_character":8,"end_line":47,"end_character":27},"updated":"2017-06-07 03:57:28.000000000","message":"seems only this one interface is not included in BaseNetworkClient, so any other reason why you not inherit from BaseNetworkClient?","commit_id":"e938af094b0e60e609675af6c4b68a6571eada05"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"e65745b285f585bb5b5a32b3f4e1f1c4aa9c44f9","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":45,"context_line":"        return rest_client.ResponseBody(resp)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def check_tag_existence(self, resource_type, resource_id, tag):"},{"line_number":48,"context_line":"        \"\"\"Confirm that a given tag is set on the resource."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        For more information, please refer to the official API reference:"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_be38413d","line":47,"range":{"start_line":47,"start_character":8,"end_line":47,"end_character":27},"in_reply_to":"df140735_9e7c5d21","updated":"2017-06-07 13:26:43.000000000","message":"Never mind, checked the other ones, status codes seem consistent, I can make your change in next patch.","commit_id":"e938af094b0e60e609675af6c4b68a6571eada05"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"05d3aa4ad0f977f2bba74ecf2f5534883e5a97f6","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":45,"context_line":"        return rest_client.ResponseBody(resp)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def check_tag_existence(self, resource_type, resource_id, tag):"},{"line_number":48,"context_line":"        \"\"\"Confirm that a given tag is set on the resource."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        For more information, please refer to the official API reference:"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_9e7c5d21","line":47,"range":{"start_line":47,"start_character":8,"end_line":47,"end_character":27},"in_reply_to":"df140735_cad10132","updated":"2017-06-07 13:23:02.000000000","message":"I explain in first sentence of commit message:\n\n\"This patch creates the network v2.0 tags client.\nUnlike most network clients, the ``tags_client`` inherits\nfrom ``rest_client``, because most of the response codes\nfrom the server differ from the hardcoded status codes\nused throughout ``BaseNetworkClient``. For example,\n``show_resource`` expects a response code of 200,\nbut ``check_tag_existence`` does a GET request\nwhich returns a 204 -- so ``show_resource`` cannot\nbe used.\"\n\nSo, 2 things are possible: 1) I add another patch to add a new kwarg to the methods in BaseNetworkClient to allow the status code to be overriden or 2) Keep this code unchanged.","commit_id":"e938af094b0e60e609675af6c4b68a6571eada05"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5dd096d9447482f2ef5ec14b6eb32c711acac935","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        http://developer.openstack.org/api-ref/networking/v2/index.html#add-a-tag"},{"line_number":63,"context_line":"        \"\"\""},{"line_number":64,"context_line":"        uri \u003d \u0027v2.0/%s/%s/tags/%s\u0027 % (resource_type, resource_id, tag)"},{"line_number":65,"context_line":"        resp, _ \u003d self.put(uri, \u0027{}\u0027)"},{"line_number":66,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":67,"context_line":"        return rest_client.ResponseBody(resp)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_4944cdb7","line":65,"range":{"start_line":65,"start_character":23,"end_line":65,"end_character":26},"updated":"2017-06-07 14:08:07.000000000","message":"This one also doesn\u0027t work with create_resource because it uses update_resource but expects 201 response code.","commit_id":"e938af094b0e60e609675af6c4b68a6571eada05"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"58b1dd4d7531e83dbc4faf066fc105c163ca6fa5","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        # NOTE(felipemonteiro): Cannot use ``update_resource`` method because"},{"line_number":31,"context_line":"        # this API requires self.put but returns 201 instead of 200 expected"},{"line_number":32,"context_line":"        # by ``update_resource``."},{"line_number":33,"context_line":"        uri \u003d \u0027v2.0/%s/%s/tags/%s\u0027 % (resource_type, resource_id, tag)"},{"line_number":34,"context_line":"        resp, _ \u003d self.put(uri, json.dumps({}))"},{"line_number":35,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":36,"context_line":"        return rest_client.ResponseBody(resp)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf091321_ae04a8c7","line":33,"range":{"start_line":33,"start_character":15,"end_line":33,"end_character":19},"updated":"2017-06-08 03:36:06.000000000","message":"nit:\nthis may be replaced with self.uri_prefix","commit_id":"b3a3b21f855031c7eb329ac23a9a5361c6b25481"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"09ee4a28dd846d0f81988822812b9056182dd213","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        # NOTE(felipemonteiro): Cannot use ``update_resource`` method because"},{"line_number":31,"context_line":"        # this API requires self.put but returns 201 instead of 200 expected"},{"line_number":32,"context_line":"        # by ``update_resource``."},{"line_number":33,"context_line":"        uri \u003d \u0027v2.0/%s/%s/tags/%s\u0027 % (resource_type, resource_id, tag)"},{"line_number":34,"context_line":"        resp, _ \u003d self.put(uri, json.dumps({}))"},{"line_number":35,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":36,"context_line":"        return rest_client.ResponseBody(resp)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_a96fa290","line":33,"range":{"start_line":33,"start_character":15,"end_line":33,"end_character":19},"in_reply_to":"bf091321_ae04a8c7","updated":"2017-06-13 21:02:19.000000000","message":"Thanks, fixed in next patch.","commit_id":"b3a3b21f855031c7eb329ac23a9a5361c6b25481"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"58b1dd4d7531e83dbc4faf066fc105c163ca6fa5","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":"        # TODO(felipemonteiro): Use the \"check_resource\" method in"},{"line_number":45,"context_line":"        # ``BaseNetworkClient`` once it has been implemented."},{"line_number":46,"context_line":"        uri \u003d \u0027v2.0/%s/%s/tags/%s\u0027 % (resource_type, resource_id, tag)"},{"line_number":47,"context_line":"        resp, _ \u003d self.get(uri)"},{"line_number":48,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":49,"context_line":"        return rest_client.ResponseBody(resp)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf091321_6e0e90e6","line":46,"range":{"start_line":46,"start_character":15,"end_line":46,"end_character":19},"updated":"2017-06-08 03:36:06.000000000","message":"ditto","commit_id":"b3a3b21f855031c7eb329ac23a9a5361c6b25481"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"2d5279195218033bf164cec26123caa5247015b2","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        http://developer.openstack.org/api-ref/networking/v2/index.html#add-a-tag"},{"line_number":29,"context_line":"        \"\"\""},{"line_number":30,"context_line":"        # NOTE(felipemonteiro): Cannot use ``update_resource`` method because"},{"line_number":31,"context_line":"        # this API requires self.put but returns 201 instead of 200 expected"},{"line_number":32,"context_line":"        # by ``update_resource``."},{"line_number":33,"context_line":"        uri \u003d \u0027%s/%s/%s/tags/%s\u0027 % ("},{"line_number":34,"context_line":"            self.uri_prefix, resource_type, resource_id, tag)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_318069c0","line":31,"updated":"2017-06-15 07:08:24.000000000","message":"Can we add a parameter to the method like \"expect_response_code\"? But we can change it with following patch if we need it.","commit_id":"1177942f0eb4724a3585b77bbcb6e2b9b27b0a40"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"03a156051e81e57a9fbaa47a671cd9efdc1addfc","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        http://developer.openstack.org/api-ref/networking/v2/index.html#add-a-tag"},{"line_number":29,"context_line":"        \"\"\""},{"line_number":30,"context_line":"        # NOTE(felipemonteiro): Cannot use ``update_resource`` method because"},{"line_number":31,"context_line":"        # this API requires self.put but returns 201 instead of 200 expected"},{"line_number":32,"context_line":"        # by ``update_resource``."},{"line_number":33,"context_line":"        uri \u003d \u0027%s/%s/%s/tags/%s\u0027 % ("},{"line_number":34,"context_line":"            self.uri_prefix, resource_type, resource_id, tag)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_6db4a7d1","line":31,"in_reply_to":"7f231b9d_318069c0","updated":"2017-06-16 00:03:40.000000000","message":"I was thinking of that, but then thought it was better reserved for a different commit. I\u0027ll go commit it in a different patch set because it\u0027s definitely cleaner to use expect_response_code.","commit_id":"1177942f0eb4724a3585b77bbcb6e2b9b27b0a40"}]}
