)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"80591e2f811ce871a9a1c9246e6c569d4556911f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alexander Gubanov \u003cogubanov@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-11-26 21:23:01 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP: Add tests API microversion with instance tags"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added tempest tests for server tags in nova-api."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a8ffd7b_9036f7b2","line":7,"updated":"2015-12-01 12:13:43.000000000","message":"tests \u0027for\u0027 ...","commit_id":"2e4fe54de16c8250165866acb15cebc74b4f1b12"}],"tempest/api/compute/servers/test_server_tags.py":[{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"ede6137c299e850b0bd43afb3f0ede69fdd1ed84","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # delete all instance\u0027s tags"},{"line_number":70,"context_line":"        tags \u003d []"},{"line_number":71,"context_line":"        self.client.delete_instance_tags(self.server2_id, tags)"},{"line_number":72,"context_line":"        resp \u003d self.client.list_instance_tags(self.server2_id)[\u0027tags\u0027]"},{"line_number":73,"context_line":"        expected \u003d []"},{"line_number":74,"context_line":"        self.assertEqual(set(expected), set(resp))"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_a1ce052c","line":71,"updated":"2015-11-26 13:00:18.000000000","message":"you can just remove \u0027tags\u0027 from call: \n\n self.client.delete_instance_tags(self.server2_id)\n\nbecause default value for tags is None","commit_id":"8eb25cadd38e77ad2786a549cedd17f1d6214ad6"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"80591e2f811ce871a9a1c9246e6c569d4556911f","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    @classmethod"},{"line_number":28,"context_line":"    def resource_setup(cls):"},{"line_number":29,"context_line":"        super(ServerTagsTestJSON, cls).resource_setup()"},{"line_number":30,"context_line":"        server \u003d cls.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":31,"context_line":"        cls.server_id \u003d server[\u0027id\u0027]"},{"line_number":32,"context_line":"        server2 \u003d cls.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":33,"context_line":"        cls.server2_id \u003d server2[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_5511615c","line":30,"updated":"2015-12-01 12:13:43.000000000","message":"maybe rename to server1 and tags1 to have similar names?","commit_id":"2e4fe54de16c8250165866acb15cebc74b4f1b12"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"1c7506db0dc892413ddf42741d422e7039145aa3","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    @classmethod"},{"line_number":28,"context_line":"    def resource_setup(cls):"},{"line_number":29,"context_line":"        super(ServerTagsTestJSON, cls).resource_setup()"},{"line_number":30,"context_line":"        server \u003d cls.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":31,"context_line":"        cls.server_id \u003d server[\u0027id\u0027]"},{"line_number":32,"context_line":"        server2 \u003d cls.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":33,"context_line":"        cls.server2_id \u003d server2[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_30ece628","line":30,"in_reply_to":"9a8ffd7b_5511615c","updated":"2015-12-01 14:13:23.000000000","message":"I disagree, it this case I should make rename for all other test cases.","commit_id":"2e4fe54de16c8250165866acb15cebc74b4f1b12"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"80591e2f811ce871a9a1c9246e6c569d4556911f","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        expected \u003d [\u0027red\u0027]"},{"line_number":67,"context_line":"        self.assertEqual(set(expected), set(resp))"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # delete all instance\u0027s tags"},{"line_number":70,"context_line":"    @test.idempotent_id(\u0027fa4c721c-719f-11e5-9d70-fef1119cdc9f\u0027)"},{"line_number":71,"context_line":"    def test_delete_all_instance_tags(self):"},{"line_number":72,"context_line":"        self.client.delete_instance_tags(self.server2_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_f54ad5ab","line":69,"updated":"2015-12-01 12:13:43.000000000","message":"this comment should be inside function","commit_id":"2e4fe54de16c8250165866acb15cebc74b4f1b12"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"1c7506db0dc892413ddf42741d422e7039145aa3","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        expected \u003d [\u0027red\u0027]"},{"line_number":67,"context_line":"        self.assertEqual(set(expected), set(resp))"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # delete all instance\u0027s tags"},{"line_number":70,"context_line":"    @test.idempotent_id(\u0027fa4c721c-719f-11e5-9d70-fef1119cdc9f\u0027)"},{"line_number":71,"context_line":"    def test_delete_all_instance_tags(self):"},{"line_number":72,"context_line":"        self.client.delete_instance_tags(self.server2_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_0de98d1a","line":69,"in_reply_to":"9a8ffd7b_f54ad5ab","updated":"2015-12-01 14:13:23.000000000","message":"oops, ok","commit_id":"2e4fe54de16c8250165866acb15cebc74b4f1b12"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"476c0a43c92a1755bae36d95e9c75634cf0b1f7b","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # restore tags"},{"line_number":78,"context_line":"        new_tags \u003d [\u0027red\u0027, \u0027white\u0027]"},{"line_number":79,"context_line":"        resp \u003d self.client.set_instance_tags(self.server2_id, new_tags)[\u0027tags\u0027]"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @test.idempotent_id(\u00270576a9de-7676-11e5-8bcf-feff819cdc9f\u0027)"},{"line_number":82,"context_line":"    def test_list_instance_by_tags(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_661f255c","line":79,"updated":"2015-12-01 10:50:08.000000000","message":"Why? I think they will be restored in SetUp().","commit_id":"2e4fe54de16c8250165866acb15cebc74b4f1b12"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"1c7506db0dc892413ddf42741d422e7039145aa3","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # restore tags"},{"line_number":78,"context_line":"        new_tags \u003d [\u0027red\u0027, \u0027white\u0027]"},{"line_number":79,"context_line":"        resp \u003d self.client.set_instance_tags(self.server2_id, new_tags)[\u0027tags\u0027]"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @test.idempotent_id(\u00270576a9de-7676-11e5-8bcf-feff819cdc9f\u0027)"},{"line_number":82,"context_line":"    def test_list_instance_by_tags(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_add88180","line":79,"in_reply_to":"9a8ffd7b_661f255c","updated":"2015-12-01 14:13:23.000000000","message":"yes, you are right, thanks!","commit_id":"2e4fe54de16c8250165866acb15cebc74b4f1b12"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"80591e2f811ce871a9a1c9246e6c569d4556911f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        # tags\u003dred : [server, server2]"},{"line_number":84,"context_line":"        filters \u003d {\u0027tags\u0027: [\u0027red\u0027]}"},{"line_number":85,"context_line":"        resp \u003d self.client.list_instance_by_tag_filters(filters)"},{"line_number":86,"context_line":"        cur \u003d [i[\u0027id\u0027] for i in resp[\u0027servers\u0027]]"},{"line_number":87,"context_line":"        expected \u003d [self.server_id, self.server2_id]"},{"line_number":88,"context_line":"        self.assertEqual(set(expected), set(cur))"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_f030a3ea","line":86,"updated":"2015-12-01 12:13:43.000000000","message":"I don\u0027t like \u0027cur\u0027 everywhere. Maybe we can rename it to \u0027ids\u0027 or \u0027server_ids\u0027 or \u0027resp_ids\u0027 or smth else?","commit_id":"2e4fe54de16c8250165866acb15cebc74b4f1b12"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"1c7506db0dc892413ddf42741d422e7039145aa3","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        # tags\u003dred : [server, server2]"},{"line_number":84,"context_line":"        filters \u003d {\u0027tags\u0027: [\u0027red\u0027]}"},{"line_number":85,"context_line":"        resp \u003d self.client.list_instance_by_tag_filters(filters)"},{"line_number":86,"context_line":"        cur \u003d [i[\u0027id\u0027] for i in resp[\u0027servers\u0027]]"},{"line_number":87,"context_line":"        expected \u003d [self.server_id, self.server2_id]"},{"line_number":88,"context_line":"        self.assertEqual(set(expected), set(cur))"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_4dbeb500","line":86,"in_reply_to":"9a8ffd7b_f030a3ea","updated":"2015-12-01 14:13:23.000000000","message":"ok, I got it","commit_id":"2e4fe54de16c8250165866acb15cebc74b4f1b12"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"476c0a43c92a1755bae36d95e9c75634cf0b1f7b","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        self.assertEqual(set(expected), set(cur))"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # not-tags\u003dred,white : [server3]"},{"line_number":116,"context_line":"        filters \u003d {\u0027not-tags\u0027: [\u0027red\u0027, \u0027white\u0027]}"},{"line_number":117,"context_line":"        resp \u003d self.client.list_instance_by_tag_filters(filters)"},{"line_number":118,"context_line":"        cur \u003d [i[\u0027id\u0027] for i in resp[\u0027servers\u0027]]"},{"line_number":119,"context_line":"        expected \u003d [self.server3_id]"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_e6f0f5cb","line":116,"updated":"2015-12-01 10:50:08.000000000","message":"I think you should add case with not-tags: [red, green], It will help to check difference between not-tags and not-tags-any.\n\nin this case not-tags should return [server2, server3].","commit_id":"2e4fe54de16c8250165866acb15cebc74b4f1b12"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"1c7506db0dc892413ddf42741d422e7039145aa3","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        self.assertEqual(set(expected), set(cur))"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # not-tags\u003dred,white : [server3]"},{"line_number":116,"context_line":"        filters \u003d {\u0027not-tags\u0027: [\u0027red\u0027, \u0027white\u0027]}"},{"line_number":117,"context_line":"        resp \u003d self.client.list_instance_by_tag_filters(filters)"},{"line_number":118,"context_line":"        cur \u003d [i[\u0027id\u0027] for i in resp[\u0027servers\u0027]]"},{"line_number":119,"context_line":"        expected \u003d [self.server3_id]"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_702fce88","line":116,"in_reply_to":"9a8ffd7b_e6f0f5cb","updated":"2015-12-01 14:13:23.000000000","message":"ok, I got it.","commit_id":"2e4fe54de16c8250165866acb15cebc74b4f1b12"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"80591e2f811ce871a9a1c9246e6c569d4556911f","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @test.idempotent_id(\u0027eb2ee6ee-93db-11e5-8994-feff819cdc9f\u0027)"},{"line_number":141,"context_line":"    def test_list_instance_by_tags_and_not_tags(self):"},{"line_number":142,"context_line":"        # tags\u003dred + not-tags\u003dred : []"},{"line_number":143,"context_line":"        filters \u003d {\u0027tags\u0027: [\u0027red\u0027], \u0027not-tags\u0027: [\u0027red\u0027]}"},{"line_number":144,"context_line":"        resp \u003d self.client.list_instance_by_tag_filters(filters)"},{"line_number":145,"context_line":"        cur \u003d [i[\u0027id\u0027] for i in resp[\u0027servers\u0027]]"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_907357b4","line":142,"updated":"2015-12-01 12:13:43.000000000","message":"maybe we should use logical word \u0027AND\u0027 in comments instead of \u0027+\u0027?","commit_id":"2e4fe54de16c8250165866acb15cebc74b4f1b12"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"1c7506db0dc892413ddf42741d422e7039145aa3","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @test.idempotent_id(\u0027eb2ee6ee-93db-11e5-8994-feff819cdc9f\u0027)"},{"line_number":141,"context_line":"    def test_list_instance_by_tags_and_not_tags(self):"},{"line_number":142,"context_line":"        # tags\u003dred + not-tags\u003dred : []"},{"line_number":143,"context_line":"        filters \u003d {\u0027tags\u0027: [\u0027red\u0027], \u0027not-tags\u0027: [\u0027red\u0027]}"},{"line_number":144,"context_line":"        resp \u003d self.client.list_instance_by_tag_filters(filters)"},{"line_number":145,"context_line":"        cur \u003d [i[\u0027id\u0027] for i in resp[\u0027servers\u0027]]"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_0d5e6de9","line":142,"in_reply_to":"9a8ffd7b_907357b4","updated":"2015-12-01 14:13:23.000000000","message":"ok, I\u0027ll change it.","commit_id":"2e4fe54de16c8250165866acb15cebc74b4f1b12"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"9ba2325006d7052de84c94d9e5943c1ccadb1260","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.assertEqual(set(tags), set(resp))"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @test.idempotent_id(\u0027115a85e0-9593-11e5-8994-feff819cdc9f\u0027)"},{"line_number":64,"context_line":"    def test_set_instance_tags_duplicate(self):"},{"line_number":65,"context_line":"        # set new tags with duplicate entries"},{"line_number":66,"context_line":"        tags \u003d [\u0027black\u0027, \u0027white\u0027, \u0027yellow\u0027, \u0027black\u0027]"},{"line_number":67,"context_line":"        resp \u003d self.client.set_instance_tags(self.server2_id, tags)[\u0027tags\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_86f79758","line":64,"updated":"2015-12-01 15:12:17.000000000","message":"It does not have sense. Set operation can\u0027t raise Duplication error. Add operation can.","commit_id":"d0e82cd7767acfffe14ce620e54e2ff7f7b605ad"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"3011d58f56fbd2bc33bda253f9415a7eaa342e23","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.assertEqual(set(tags), set(resp))"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @test.idempotent_id(\u0027115a85e0-9593-11e5-8994-feff819cdc9f\u0027)"},{"line_number":64,"context_line":"    def test_set_instance_tags_duplicate(self):"},{"line_number":65,"context_line":"        # set new tags with duplicate entries"},{"line_number":66,"context_line":"        tags \u003d [\u0027black\u0027, \u0027white\u0027, \u0027yellow\u0027, \u0027black\u0027]"},{"line_number":67,"context_line":"        resp \u003d self.client.set_instance_tags(self.server2_id, tags)[\u0027tags\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_5f2f2e3e","line":64,"in_reply_to":"9a8ffd7b_86f79758","updated":"2015-12-01 15:51:12.000000000","message":"ok, I got it","commit_id":"d0e82cd7767acfffe14ce620e54e2ff7f7b605ad"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"9ba2325006d7052de84c94d9e5943c1ccadb1260","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    @test.idempotent_id(\u0027789ceacc-95b6-11e5-8994-feff819cdc9f\u0027)"},{"line_number":73,"context_line":"    def test_set_instance_tags_exceed_length(self):"},{"line_number":74,"context_line":"        # set new tags exceed maximum length (60) for one instance"},{"line_number":75,"context_line":"        tags \u003d [\u0027black\u0027 * 60, \u0027white\u0027]"},{"line_number":76,"context_line":"        self.assertRaises(lib_exc.BadRequest, self.client.set_instance_tags,"},{"line_number":77,"context_line":"                          self.server2_id, tags)"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_93f7d758","line":75,"updated":"2015-12-01 15:12:17.000000000","message":"it\u0027s Ok. But I\u0027m worry that here length of your tag is 300. What if we will change max length to 70 in future? maybe it will be better to use here tag with length 61? what do you think?","commit_id":"d0e82cd7767acfffe14ce620e54e2ff7f7b605ad"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"3011d58f56fbd2bc33bda253f9415a7eaa342e23","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    @test.idempotent_id(\u0027789ceacc-95b6-11e5-8994-feff819cdc9f\u0027)"},{"line_number":73,"context_line":"    def test_set_instance_tags_exceed_length(self):"},{"line_number":74,"context_line":"        # set new tags exceed maximum length (60) for one instance"},{"line_number":75,"context_line":"        tags \u003d [\u0027black\u0027 * 60, \u0027white\u0027]"},{"line_number":76,"context_line":"        self.assertRaises(lib_exc.BadRequest, self.client.set_instance_tags,"},{"line_number":77,"context_line":"                          self.server2_id, tags)"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_bf209a4a","line":75,"in_reply_to":"9a8ffd7b_93f7d758","updated":"2015-12-01 15:51:12.000000000","message":"I made it by example\nhttps://github.com/openstack/tempest/blob/master/tempest/api/compute/servers/test_server_metadata_negative.py#L39-L53","commit_id":"d0e82cd7767acfffe14ce620e54e2ff7f7b605ad"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"9ba2325006d7052de84c94d9e5943c1ccadb1260","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    @test.idempotent_id(\u00278b672000-95b6-11e5-8994-feff819cdc9f\u0027)"},{"line_number":81,"context_line":"    def test_set_instance_tags_exceed_number(self):"},{"line_number":82,"context_line":"        # set new tags exceed maximum number (50) per instance"},{"line_number":83,"context_line":"        tags \u003d [str(i) for i in range(100)]"},{"line_number":84,"context_line":"        self.assertRaises(lib_exc.BadRequest, self.client.set_instance_tags,"},{"line_number":85,"context_line":"                          self.server2_id, tags)"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_13b9a779","line":83,"updated":"2015-12-01 15:12:17.000000000","message":"again. maybe 51? But I\u0027m not sure.","commit_id":"d0e82cd7767acfffe14ce620e54e2ff7f7b605ad"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"3011d58f56fbd2bc33bda253f9415a7eaa342e23","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    @test.idempotent_id(\u00278b672000-95b6-11e5-8994-feff819cdc9f\u0027)"},{"line_number":81,"context_line":"    def test_set_instance_tags_exceed_number(self):"},{"line_number":82,"context_line":"        # set new tags exceed maximum number (50) per instance"},{"line_number":83,"context_line":"        tags \u003d [str(i) for i in range(100)]"},{"line_number":84,"context_line":"        self.assertRaises(lib_exc.BadRequest, self.client.set_instance_tags,"},{"line_number":85,"context_line":"                          self.server2_id, tags)"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_5fd64e28","line":83,"in_reply_to":"9a8ffd7b_13b9a779","updated":"2015-12-01 15:51:12.000000000","message":"the same as above","commit_id":"d0e82cd7767acfffe14ce620e54e2ff7f7b605ad"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"9ba2325006d7052de84c94d9e5943c1ccadb1260","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        resp \u003d self.client.list_instance_by_tag_filters(filters)"},{"line_number":212,"context_line":"        resp_ids \u003d [i[\u0027id\u0027] for i in resp[\u0027servers\u0027]]"},{"line_number":213,"context_line":"        expected \u003d []"},{"line_number":214,"context_line":"        self.assertEqual(expected, resp_ids)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    @test.idempotent_id(\u0027431010d0-9590-11e5-8994-feff819cdc9f\u0027)"},{"line_number":217,"context_line":"    def test_list_instance_by_tags_empty_req(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_46b9afca","line":214,"updated":"2015-12-01 15:12:17.000000000","message":"Here you get UUIDs from response and if test will fail we got\n\n [] !\u003d [\"eb2efa12-93db-11e5-8994-feff819cdc9f\"].\n\nIt\u0027s good! \n\nMay be you should do the same in test test_delete_all_instance_tags\u0027?","commit_id":"d0e82cd7767acfffe14ce620e54e2ff7f7b605ad"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"3011d58f56fbd2bc33bda253f9415a7eaa342e23","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        resp \u003d self.client.list_instance_by_tag_filters(filters)"},{"line_number":212,"context_line":"        resp_ids \u003d [i[\u0027id\u0027] for i in resp[\u0027servers\u0027]]"},{"line_number":213,"context_line":"        expected \u003d []"},{"line_number":214,"context_line":"        self.assertEqual(expected, resp_ids)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    @test.idempotent_id(\u0027431010d0-9590-11e5-8994-feff819cdc9f\u0027)"},{"line_number":217,"context_line":"    def test_list_instance_by_tags_empty_req(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_3fdd8a14","line":214,"in_reply_to":"9a8ffd7b_46b9afca","updated":"2015-12-01 15:51:12.000000000","message":"it doesn\u0027t to make sense for  test_delete_all_instance_tags,\nwe get list of tags and assertEqual will show difference in case of fail.","commit_id":"d0e82cd7767acfffe14ce620e54e2ff7f7b605ad"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"ddab12c143c7f63be71d7dada030a59a5da5446b","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def test_add_instance_tags(self):"},{"line_number":65,"context_line":"        # add new tag for instance"},{"line_number":66,"context_line":"        tags \u003d \u0027brown\u0027"},{"line_number":67,"context_line":"        self.client.add_instance_tags(self.server2_id, tags)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @test.idempotent_id(\u0027ecc92fc8-9a89-11e5-8994-feff819cdc9f\u0027)"},{"line_number":70,"context_line":"    def test_add_existent_instance_tags(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_be15c9e5","line":67,"updated":"2015-12-07 11:58:23.000000000","message":"may be we should check that tag was added?","commit_id":"a45519803029183ce39167e978fbfb5fff8f6667"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"53049e7f3438588675f913fe50829fffeffd1432","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def test_add_instance_tags(self):"},{"line_number":65,"context_line":"        # add new tag for instance"},{"line_number":66,"context_line":"        tags \u003d \u0027brown\u0027"},{"line_number":67,"context_line":"        self.client.add_instance_tags(self.server2_id, tags)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @test.idempotent_id(\u0027ecc92fc8-9a89-11e5-8994-feff819cdc9f\u0027)"},{"line_number":70,"context_line":"    def test_add_existent_instance_tags(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_f30e223a","line":67,"in_reply_to":"7a740942_be15c9e5","updated":"2015-12-07 14:14:52.000000000","message":"sure, I\u0027ll add","commit_id":"a45519803029183ce39167e978fbfb5fff8f6667"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"ddab12c143c7f63be71d7dada030a59a5da5446b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def test_add_existent_instance_tags(self):"},{"line_number":71,"context_line":"        # add new already existent tag for instance"},{"line_number":72,"context_line":"        tags \u003d \u0027red\u0027"},{"line_number":73,"context_line":"        self.client.add_instance_tags(self.server2_id, tags)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @test.idempotent_id(\u0027b1e4515c-719f-11e5-9d70-feff819cdc9f\u0027)"},{"line_number":76,"context_line":"    def test_set_instance_tags(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_9ec6cd66","line":73,"updated":"2015-12-07 11:58:23.000000000","message":"Just comment: I understand that status code was checked in client, but it looks strange. We just add tag and that\u0027s all.","commit_id":"a45519803029183ce39167e978fbfb5fff8f6667"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"53049e7f3438588675f913fe50829fffeffd1432","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def test_add_existent_instance_tags(self):"},{"line_number":71,"context_line":"        # add new already existent tag for instance"},{"line_number":72,"context_line":"        tags \u003d \u0027red\u0027"},{"line_number":73,"context_line":"        self.client.add_instance_tags(self.server2_id, tags)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @test.idempotent_id(\u0027b1e4515c-719f-11e5-9d70-feff819cdc9f\u0027)"},{"line_number":76,"context_line":"    def test_set_instance_tags(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_25969d93","line":73,"in_reply_to":"7a740942_9ec6cd66","updated":"2015-12-07 14:14:52.000000000","message":"ok, I\u0027ll add additional check","commit_id":"a45519803029183ce39167e978fbfb5fff8f6667"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"9507f05a23c35fcf55f92001fcada07bbfe2b95c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    @classmethod"},{"line_number":34,"context_line":"    def resource_setup(cls):"},{"line_number":35,"context_line":"        super(ServerTagsTestJSON, cls).resource_setup()"},{"line_number":36,"context_line":"        server \u003d cls.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":37,"context_line":"        cls.server_id \u003d server[\u0027id\u0027]"},{"line_number":38,"context_line":"        server2 \u003d cls.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":39,"context_line":"        cls.server2_id \u003d server2[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a18252c_59925a9f","line":36,"updated":"2016-04-13 16:50:59.000000000","message":"You should create the 3 servers and then wait for the 3 to be active. This way the resource_setup will be much faster.","commit_id":"b60d068cb93971f543a2525ff1aa9807262f2a99"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"9507f05a23c35fcf55f92001fcada07bbfe2b95c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.client.add_instance_tag(self.server2_id, tag)"},{"line_number":79,"context_line":"        resp \u003d self.client.list_instance_tags(self.server2_id)[\u0027tags\u0027]"},{"line_number":80,"context_line":"        expected \u003d [\u0027red\u0027, \u0027white\u0027, \u0027orange\u0027]"},{"line_number":81,"context_line":"        self.assertEqual(set(expected), set(resp))"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @test.idempotent_id(\u0027b1e4515c-719f-11e5-9d70-feff819cdc9f\u0027)"},{"line_number":84,"context_line":"    def test_set_instance_tags(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a18252c_9906b2cc","line":81,"updated":"2016-04-13 16:50:59.000000000","message":"Use `sorted` here. Otherwise is resp \u003d [\u0027red\u0027, \u0027red\u0027, \u0027white\u0027, \u0027orange\u0027] then the test will pass, but we want it to fail.","commit_id":"b60d068cb93971f543a2525ff1aa9807262f2a99"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"ffbf420f0daa07841442efc847cd010282cc77fe","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.client.add_instance_tag(self.server2_id, tag)"},{"line_number":79,"context_line":"        resp \u003d self.client.list_instance_tags(self.server2_id)[\u0027tags\u0027]"},{"line_number":80,"context_line":"        expected \u003d [\u0027red\u0027, \u0027white\u0027, \u0027orange\u0027]"},{"line_number":81,"context_line":"        self.assertEqual(set(expected), set(resp))"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @test.idempotent_id(\u0027b1e4515c-719f-11e5-9d70-feff819cdc9f\u0027)"},{"line_number":84,"context_line":"    def test_set_instance_tags(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a18252c_93a94f93","line":81,"in_reply_to":"5a18252c_9906b2cc","updated":"2016-04-14 09:26:59.000000000","message":"good idea!","commit_id":"b60d068cb93971f543a2525ff1aa9807262f2a99"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"42d00d1f9fda42f47f1e9b02460fe3039e575506","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"5a18252c_19d24628","updated":"2016-04-15 04:36:01.000000000","message":"please rename instance-\u003eserver in variable and tests name","commit_id":"87e862296bb291cf7ce66d72cbe119d888a4731c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"42d00d1f9fda42f47f1e9b02460fe3039e575506","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from tempest import test"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class ServerTagsTestJSON(base.BaseV2ComputeTest):"},{"line_number":23,"context_line":"    min_microversion \u003d \u00272.26\u0027"},{"line_number":24,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a18252c_d9e60ee7","line":22,"range":{"start_line":22,"start_character":5,"end_line":22,"end_character":24},"updated":"2016-04-15 04:36:01.000000000","message":"Can we add more tests-\n- show server should shows added tags\n- list server should show added tags","commit_id":"87e862296bb291cf7ce66d72cbe119d888a4731c"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"f7e40912bf30f0b6a232a683c168100f917da0d6","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    @classmethod"},{"line_number":32,"context_line":"    def resource_setup(cls):"},{"line_number":33,"context_line":"        super(ServerTagsTestJSON, cls).resource_setup()"},{"line_number":34,"context_line":"        cls.uuid1 \u003d cls.create_test_server()[\u0027id\u0027]"},{"line_number":35,"context_line":"        cls.uuid2 \u003d cls.create_test_server()[\u0027id\u0027]"},{"line_number":36,"context_line":"        cls.uuid3 \u003d cls.create_test_server()[\u0027id\u0027]"},{"line_number":37,"context_line":"        waiters.wait_for_server_status(cls.servers_client, cls.uuid1, \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_f60ff22b","line":34,"updated":"2016-07-05 13:50:55.000000000","message":"What about using the min_count and max_count kwarg of create_test_server() ?","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"8a165a67f79cfae39edb4557c15c5df8d3296497","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    @classmethod"},{"line_number":32,"context_line":"    def resource_setup(cls):"},{"line_number":33,"context_line":"        super(ServerTagsTestJSON, cls).resource_setup()"},{"line_number":34,"context_line":"        cls.uuid1 \u003d cls.create_test_server()[\u0027id\u0027]"},{"line_number":35,"context_line":"        cls.uuid2 \u003d cls.create_test_server()[\u0027id\u0027]"},{"line_number":36,"context_line":"        cls.uuid3 \u003d cls.create_test_server()[\u0027id\u0027]"},{"line_number":37,"context_line":"        waiters.wait_for_server_status(cls.servers_client, cls.uuid1, \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_2558e689","line":34,"in_reply_to":"1aa78d24_f60ff22b","updated":"2016-07-06 15:40:23.000000000","message":"Done","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # add new tag for server"},{"line_number":69,"context_line":"        tag \u003d \u0027brown\u0027"},{"line_number":70,"context_line":"        self.client.update_server_tag(self.uuid2, tag)"},{"line_number":71,"context_line":"        resp \u003d self.client.list_server_tags(self.uuid2)[\u0027tags\u0027]"},{"line_number":72,"context_line":"        expected \u003d [\u0027red\u0027, \u0027white\u0027, \u0027orange\u0027, \u0027brown\u0027]"},{"line_number":73,"context_line":"        self.assertEqual(sorted(expected), sorted(resp))"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_2a656fb4","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":12},"updated":"2016-07-06 01:35:35.000000000","message":"you can check 201 as specific resp code here as schema will check for both 201 OR 204.","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        # add new already existent tag for server"},{"line_number":78,"context_line":"        tag \u003d \u0027red\u0027"},{"line_number":79,"context_line":"        self.client.update_server_tag(self.uuid2, tag)"},{"line_number":80,"context_line":"        resp \u003d self.client.list_server_tags(self.uuid2)[\u0027tags\u0027]"},{"line_number":81,"context_line":"        expected \u003d self.tags_map[self.uuid2]"},{"line_number":82,"context_line":"        self.assertEqual(sorted(expected), sorted(resp))"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_4a60bba5","line":80,"range":{"start_line":80,"start_character":8,"end_line":80,"end_character":12},"updated":"2016-07-06 01:35:35.000000000","message":"you can check 204 as specific resp code here as schema will check for both 201 OR 204.","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        # checks detailed list response has field \u0027tags\u0027"},{"line_number":102,"context_line":"        resp \u003d self.client.list_servers(detail\u003dTrue)"},{"line_number":103,"context_line":"        for server in resp[\u0027servers\u0027]:"},{"line_number":104,"context_line":"            self.assertEqual(sorted(self.tags_map[server[\u0027id\u0027]]),"},{"line_number":105,"context_line":"                             sorted(server[\u0027tags\u0027]))"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @test.idempotent_id(\u002741288f28-2f18-11e6-ac61-9e71128cae77\u0027)"},{"line_number":108,"context_line":"    def test_delete_single_server_tag(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_4ad55b1a","line":105,"range":{"start_line":104,"start_character":0,"end_line":105,"end_character":52},"updated":"2016-07-06 01:35:35.000000000","message":"if server[\u0027id\u0027] in self.tags_map.keys():\n    self.assertEqual(sorted(self.tags_map[server[\u0027id\u0027]]),\n                            sorted(server[\u0027tags\u0027]))","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"8a165a67f79cfae39edb4557c15c5df8d3296497","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        # checks detailed list response has field \u0027tags\u0027"},{"line_number":102,"context_line":"        resp \u003d self.client.list_servers(detail\u003dTrue)"},{"line_number":103,"context_line":"        for server in resp[\u0027servers\u0027]:"},{"line_number":104,"context_line":"            self.assertEqual(sorted(self.tags_map[server[\u0027id\u0027]]),"},{"line_number":105,"context_line":"                             sorted(server[\u0027tags\u0027]))"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @test.idempotent_id(\u002741288f28-2f18-11e6-ac61-9e71128cae77\u0027)"},{"line_number":108,"context_line":"    def test_delete_single_server_tag(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_a8e5cb38","line":105,"range":{"start_line":104,"start_character":0,"end_line":105,"end_character":52},"in_reply_to":"1aa78d24_4ad55b1a","updated":"2016-07-06 15:40:23.000000000","message":"Done","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        expected \u003d [self.uuid2, self.uuid3]"},{"line_number":149,"context_line":"        self.assertEqual(sorted(expected), sorted(resp_ids))"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        # not-tags\u003dred,white : [server2, server3]"},{"line_number":152,"context_line":"        params \u003d {\u0027not-tags\u0027: \u0027red,green\u0027}"},{"line_number":153,"context_line":"        resp \u003d self.client.list_servers(**params)"},{"line_number":154,"context_line":"        resp_ids \u003d [i[\u0027id\u0027] for i in resp[\u0027servers\u0027]]"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_eaa88779","line":151,"range":{"start_line":151,"start_character":23,"end_line":151,"end_character":28},"updated":"2016-07-06 01:35:35.000000000","message":"green","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"8a165a67f79cfae39edb4557c15c5df8d3296497","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        expected \u003d [self.uuid2, self.uuid3]"},{"line_number":149,"context_line":"        self.assertEqual(sorted(expected), sorted(resp_ids))"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        # not-tags\u003dred,white : [server2, server3]"},{"line_number":152,"context_line":"        params \u003d {\u0027not-tags\u0027: \u0027red,green\u0027}"},{"line_number":153,"context_line":"        resp \u003d self.client.list_servers(**params)"},{"line_number":154,"context_line":"        resp_ids \u003d [i[\u0027id\u0027] for i in resp[\u0027servers\u0027]]"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_88e28f2d","line":151,"range":{"start_line":151,"start_character":23,"end_line":151,"end_character":28},"in_reply_to":"1aa78d24_eaa88779","updated":"2016-07-06 15:40:23.000000000","message":"Done","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"}],"tempest/api/compute/servers/test_server_tags_negative.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"42d00d1f9fda42f47f1e9b02460fe3039e575506","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"5a18252c_79bc1abb","updated":"2016-04-15 04:36:01.000000000","message":"All these negative tests seems to be present in nova only. We should not add duplicate negative tests.","commit_id":"87e862296bb291cf7ce66d72cbe119d888a4731c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"42d00d1f9fda42f47f1e9b02460fe3039e575506","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from tempest.lib import exceptions"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from tempest.api.compute import base"},{"line_number":20,"context_line":"from tempest.common.utils import data_utils"},{"line_number":21,"context_line":"from tempest import test"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class ServerTagsTestJSON(base.BaseV2ComputeTest):"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a18252c_99a496ba","line":21,"range":{"start_line":17,"start_character":0,"end_line":21,"end_character":24},"updated":"2016-04-15 04:36:01.000000000","message":"all should be together","commit_id":"87e862296bb291cf7ce66d72cbe119d888a4731c"}],"tempest/lib/api_schema/response/compute/v2_26/servers.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"list_servers \u003d servers21.list_servers"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"list_server_tags \u003d {"},{"line_number":23,"context_line":"    \u0027status_code\u0027: [200],"},{"line_number":24,"context_line":"    \u0027response_body\u0027: {"},{"line_number":25,"context_line":"        \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_6a7f7766","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":16},"updated":"2016-07-06 01:35:35.000000000","message":"rename this to list_update_server_tags as this will be used for list as well as for update","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        \u0027type\u0027: \u0027object\u0027,"},{"line_number":26,"context_line":"        \u0027properties\u0027: {"},{"line_number":27,"context_line":"            \u0027tags\u0027: {"},{"line_number":28,"context_line":"                \u0027type\u0027: \u0027array\u0027,"},{"line_number":29,"context_line":"                \u0027items\u0027: {"},{"line_number":30,"context_line":"                    \u0027type\u0027: \u0027string\u0027"},{"line_number":31,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_afe69112","line":28,"range":{"start_line":28,"start_character":31,"end_line":28,"end_character":32},"updated":"2016-07-06 01:35:35.000000000","message":"\u0027maxItems\u0027: 50","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"            \u0027tags\u0027: {"},{"line_number":28,"context_line":"                \u0027type\u0027: \u0027array\u0027,"},{"line_number":29,"context_line":"                \u0027items\u0027: {"},{"line_number":30,"context_line":"                    \u0027type\u0027: \u0027string\u0027"},{"line_number":31,"context_line":"                }"},{"line_number":32,"context_line":"            },"},{"line_number":33,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_2f5461fd","line":30,"range":{"start_line":30,"start_character":35,"end_line":30,"end_character":36},"updated":"2016-07-06 01:35:35.000000000","message":"Schema should be more strict as allowed by Nova-\n\n\u0027type\u0027: \u0027string\u0027,\n\u0027pattern\u0027: \u0027^[^,/]*$\u0027,\n\u0027maxLength\u0027: 60","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027required\u0027: [\u0027tags\u0027]"},{"line_number":36,"context_line":"    }"},{"line_number":37,"context_line":"}"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"get_server \u003d copy.deepcopy(servers219.get_server)"},{"line_number":40,"context_line":"get_server[\u0027response_body\u0027][\u0027properties\u0027][\u0027server\u0027]["},{"line_number":41,"context_line":"    \u0027properties\u0027].update({\u0027tags\u0027: {\u0027type\u0027: \u0027array\u0027}})"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_8a6c63d1","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":0},"updated":"2016-07-06 01:35:35.000000000","message":"need schema for other method also","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"get_server \u003d copy.deepcopy(servers219.get_server)"},{"line_number":40,"context_line":"get_server[\u0027response_body\u0027][\u0027properties\u0027][\u0027server\u0027]["},{"line_number":41,"context_line":"    \u0027properties\u0027].update({\u0027tags\u0027: {\u0027type\u0027: \u0027array\u0027}})"},{"line_number":42,"context_line":"get_server[\u0027response_body\u0027][\u0027properties\u0027][\u0027server\u0027][\u0027required\u0027].append("},{"line_number":43,"context_line":"    \u0027tags\u0027)"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_0ab87329","line":41,"range":{"start_line":41,"start_character":26,"end_line":41,"end_character":51},"updated":"2016-07-06 01:35:35.000000000","message":"this schema for tags should be more strict like commented for list_server_tags schema","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"list_servers_detail \u003d copy.deepcopy(servers219.list_servers_detail)"},{"line_number":47,"context_line":"list_servers_detail[\u0027response_body\u0027][\u0027properties\u0027][\u0027servers\u0027][\u0027items\u0027]["},{"line_number":48,"context_line":"    \u0027properties\u0027].update({\u0027tags\u0027: {\u0027type\u0027: \u0027array\u0027}})"},{"line_number":49,"context_line":"list_servers_detail[\u0027response_body\u0027][\u0027properties\u0027][\u0027servers\u0027][\u0027items\u0027]["},{"line_number":50,"context_line":"    \u0027required\u0027].append(\u0027tags\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_cab14b49","line":48,"range":{"start_line":48,"start_character":26,"end_line":48,"end_character":52},"updated":"2016-07-06 01:35:35.000000000","message":"ditto","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"}],"tempest/lib/services/compute/servers_client.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"42d00d1f9fda42f47f1e9b02460fe3039e575506","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        \"\"\""},{"line_number":572,"context_line":"        return self.action(server_id, \u0027removeFixedIp\u0027, **kwargs)"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    def show_instance_tag(self, server_id, tag):"},{"line_number":575,"context_line":"        \"\"\"Get tag for server\"\"\""},{"line_number":576,"context_line":"        req \u003d \u0027servers/%s/tags/%s\u0027 % (server_id, tag)"},{"line_number":577,"context_line":"        resp, body \u003d self.get(req)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a18252c_59f15ecc","line":574,"range":{"start_line":574,"start_character":0,"end_line":574,"end_character":25},"updated":"2016-04-15 04:36:01.000000000","message":"for consistency, please rename these methods to show_server_tag   (instance-\u003eserver)\n\nsame for all methods","commit_id":"87e862296bb291cf7ce66d72cbe119d888a4731c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"42d00d1f9fda42f47f1e9b02460fe3039e575506","unresolved":false,"context_lines":[{"line_number":583,"context_line":"        req \u003d \u0027servers/%s/tags\u0027 % server_id"},{"line_number":584,"context_line":"        resp, body \u003d self.get(req)"},{"line_number":585,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":586,"context_line":"        body \u003d json.loads(body)"},{"line_number":587,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    def add_instance_tag(self, server_id, tag):"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a18252c_36a59146","line":586,"range":{"start_line":586,"start_character":30,"end_line":586,"end_character":31},"updated":"2016-04-15 04:36:01.000000000","message":"I think schema validation is needed here.","commit_id":"87e862296bb291cf7ce66d72cbe119d888a4731c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"42d00d1f9fda42f47f1e9b02460fe3039e575506","unresolved":false,"context_lines":[{"line_number":586,"context_line":"        body \u003d json.loads(body)"},{"line_number":587,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    def add_instance_tag(self, server_id, tag):"},{"line_number":590,"context_line":"        \"\"\"Add tag for server\"\"\""},{"line_number":591,"context_line":"        req \u003d \u0027servers/%s/tags/%s\u0027 % (server_id, tag)"},{"line_number":592,"context_line":"        resp, body \u003d self.put(req, None)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a18252c_f675d9ca","line":589,"range":{"start_line":589,"start_character":8,"end_line":589,"end_character":24},"updated":"2016-04-15 04:36:01.000000000","message":"how about update_server_tag","commit_id":"87e862296bb291cf7ce66d72cbe119d888a4731c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"42d00d1f9fda42f47f1e9b02460fe3039e575506","unresolved":false,"context_lines":[{"line_number":593,"context_line":"        self.expected_success([201, 204], resp.status)"},{"line_number":594,"context_line":"        return rest_client.ResponseBody(resp)"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    def set_instance_tags(self, server_id, tags):"},{"line_number":597,"context_line":"        \"\"\"Set new tags items for server\"\"\""},{"line_number":598,"context_line":"        post_body \u003d json.dumps({\u0027tags\u0027: tags})"},{"line_number":599,"context_line":"        req \u003d \u0027servers/%s/tags\u0027 % server_id"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a18252c_b9dfd238","line":596,"range":{"start_line":596,"start_character":8,"end_line":596,"end_character":25},"updated":"2016-04-15 04:36:01.000000000","message":"-\u003eupdate_all_server_tags  or update_server_all_tags","commit_id":"87e862296bb291cf7ce66d72cbe119d888a4731c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"42d00d1f9fda42f47f1e9b02460fe3039e575506","unresolved":false,"context_lines":[{"line_number":612,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":613,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    def list_instance_by_tag_filters(self, filters):"},{"line_number":616,"context_line":"        \"\"\"List instance(s) by filters\"\"\""},{"line_number":617,"context_line":"        filters_as_strings \u003d [\"%s\u003d%s\" % (tags, \u0027,\u0027.join(values))"},{"line_number":618,"context_line":"                              for tags, values in six.iteritems(filters)]"},{"line_number":619,"context_line":"        req \u003d \"servers?%s\" % \u0027\u0026\u0027.join(filters_as_strings)"},{"line_number":620,"context_line":"        resp, body \u003d self.get(req)"},{"line_number":621,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":622,"context_line":"        body \u003d json.loads(body)"},{"line_number":623,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a18252c_3653d13a","line":623,"range":{"start_line":615,"start_character":8,"end_line":623,"end_character":51},"updated":"2016-04-15 04:36:01.000000000","message":"this is not needed as it can be done via list_servers","commit_id":"87e862296bb291cf7ce66d72cbe119d888a4731c"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"f7e40912bf30f0b6a232a683c168100f917da0d6","unresolved":false,"context_lines":[{"line_number":586,"context_line":"        \"\"\""},{"line_number":587,"context_line":"        return self.action(server_id, \u0027removeFixedIp\u0027, **kwargs)"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    def show_server_tag(self, server_id, tag):"},{"line_number":590,"context_line":"        \"\"\"Get tag for server\"\"\""},{"line_number":591,"context_line":"        req \u003d \u0027servers/%s/tags/%s\u0027 % (server_id, tag)"},{"line_number":592,"context_line":"        resp, body \u003d self.get(req)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_96382ea2","line":589,"updated":"2016-07-05 13:50:55.000000000","message":"Some unit tests for these new methods would be great :)","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"8a165a67f79cfae39edb4557c15c5df8d3296497","unresolved":false,"context_lines":[{"line_number":586,"context_line":"        \"\"\""},{"line_number":587,"context_line":"        return self.action(server_id, \u0027removeFixedIp\u0027, **kwargs)"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    def show_server_tag(self, server_id, tag):"},{"line_number":590,"context_line":"        \"\"\"Get tag for server\"\"\""},{"line_number":591,"context_line":"        req \u003d \u0027servers/%s/tags/%s\u0027 % (server_id, tag)"},{"line_number":592,"context_line":"        resp, body \u003d self.get(req)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_e146c979","line":589,"in_reply_to":"1aa78d24_96382ea2","updated":"2016-07-06 15:40:23.000000000","message":"Yes, I agree with you but TestServersClient knows nothing about microversion. In this case we can\u0027t correctly check methods available from some microversion because we can\u0027t get a needed schema for this methods. we always get a schema for microversion 2.1","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"eb365ddd8fb9fa26623792fa42f707980f65548d","unresolved":false,"context_lines":[{"line_number":586,"context_line":"        \"\"\""},{"line_number":587,"context_line":"        return self.action(server_id, \u0027removeFixedIp\u0027, **kwargs)"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    def show_server_tag(self, server_id, tag):"},{"line_number":590,"context_line":"        \"\"\"Get tag for server\"\"\""},{"line_number":591,"context_line":"        req \u003d \u0027servers/%s/tags/%s\u0027 % (server_id, tag)"},{"line_number":592,"context_line":"        resp, body \u003d self.get(req)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_7cf71c59","line":589,"in_reply_to":"1aa78d24_e146c979","updated":"2016-07-06 15:51:26.000000000","message":"I think we need to do it in separate patch","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        \"\"\"Get tag for server\"\"\""},{"line_number":591,"context_line":"        req \u003d \u0027servers/%s/tags/%s\u0027 % (server_id, tag)"},{"line_number":592,"context_line":"        resp, body \u003d self.get(req)"},{"line_number":593,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":594,"context_line":"        return rest_client.ResponseBody(resp)"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    def list_server_tags(self, server_id):"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_2f80e1bf","line":593,"range":{"start_line":593,"start_character":8,"end_line":593,"end_character":47},"updated":"2016-07-06 01:35:35.000000000","message":"we should have schema validation for this which can verify there is no response body returned. schema should be-\n\nserver_tag \u003d {\n    \u0027status_code\u0027: [204]\n}","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"8a165a67f79cfae39edb4557c15c5df8d3296497","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        \"\"\"Get tag for server\"\"\""},{"line_number":591,"context_line":"        req \u003d \u0027servers/%s/tags/%s\u0027 % (server_id, tag)"},{"line_number":592,"context_line":"        resp, body \u003d self.get(req)"},{"line_number":593,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":594,"context_line":"        return rest_client.ResponseBody(resp)"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    def list_server_tags(self, server_id):"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_8b4724bb","line":593,"range":{"start_line":593,"start_character":8,"end_line":593,"end_character":47},"in_reply_to":"1aa78d24_2f80e1bf","updated":"2016-07-06 15:40:23.000000000","message":"Done","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":606,"context_line":"        \"\"\"Add tag for server\"\"\""},{"line_number":607,"context_line":"        req \u003d \u0027servers/%s/tags/%s\u0027 % (server_id, tag)"},{"line_number":608,"context_line":"        resp, body \u003d self.put(req, None)"},{"line_number":609,"context_line":"        self.expected_success([201, 204], resp.status)"},{"line_number":610,"context_line":"        return rest_client.ResponseBody(resp)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    def update_all_server_tags(self, server_id, tags):"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_0f76c505","line":609,"range":{"start_line":609,"start_character":8,"end_line":609,"end_character":54},"updated":"2016-07-06 01:35:35.000000000","message":"ditto. schema -\n\nupdate_server_tag \u003d {\n    \u0027status_code\u0027: [201, 204]\n}","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"8a165a67f79cfae39edb4557c15c5df8d3296497","unresolved":false,"context_lines":[{"line_number":606,"context_line":"        \"\"\"Add tag for server\"\"\""},{"line_number":607,"context_line":"        req \u003d \u0027servers/%s/tags/%s\u0027 % (server_id, tag)"},{"line_number":608,"context_line":"        resp, body \u003d self.put(req, None)"},{"line_number":609,"context_line":"        self.expected_success([201, 204], resp.status)"},{"line_number":610,"context_line":"        return rest_client.ResponseBody(resp)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    def update_all_server_tags(self, server_id, tags):"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_7e6a7482","line":609,"range":{"start_line":609,"start_character":8,"end_line":609,"end_character":54},"in_reply_to":"1aa78d24_0f76c505","updated":"2016-07-06 15:40:23.000000000","message":"unfortunately we can\u0027t do it because by default http responce \u0027201\u0027 from webob\nhas body \u0027{\"message\": \"\u003cbr /\u003e\u003cbr /\u003e\\n\\n\\n\", \"code\": \"201 Created\", \"title\": \"Created\"}\u0027\n\nhttps://github.com/Pylons/webob/blob/master/webob/exc.py#L401-L411\n\nresponce \u0027204\u0027 has NO body so with 204 everything is ok.","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0200c096eb313e963888451fe17128464c74f02b","unresolved":false,"context_lines":[{"line_number":606,"context_line":"        \"\"\"Add tag for server\"\"\""},{"line_number":607,"context_line":"        req \u003d \u0027servers/%s/tags/%s\u0027 % (server_id, tag)"},{"line_number":608,"context_line":"        resp, body \u003d self.put(req, None)"},{"line_number":609,"context_line":"        self.expected_success([201, 204], resp.status)"},{"line_number":610,"context_line":"        return rest_client.ResponseBody(resp)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    def update_all_server_tags(self, server_id, tags):"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_e15a8e82","line":609,"range":{"start_line":609,"start_character":8,"end_line":609,"end_character":54},"in_reply_to":"1aa78d24_7e6a7482","updated":"2016-07-12 00:31:07.000000000","message":"humm then i think this is issue. We could have return the empty body for 201 case too instead of return plain text.\n\nPlain text may create issue while parsing with diff content type etc\n\nThis seems bug in Nova, ll open one.","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":610,"context_line":"        return rest_client.ResponseBody(resp)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    def update_all_server_tags(self, server_id, tags):"},{"line_number":613,"context_line":"        \"\"\"Set new tags items for server\"\"\""},{"line_number":614,"context_line":"        post_body \u003d json.dumps({\u0027tags\u0027: tags})"},{"line_number":615,"context_line":"        req \u003d \u0027servers/%s/tags\u0027 % server_id"},{"line_number":616,"context_line":"        resp, body \u003d self.put("}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_afafb128","line":613,"range":{"start_line":613,"start_character":11,"end_line":613,"end_character":40},"updated":"2016-07-06 01:35:35.000000000","message":"-\u003e\nReplace all tags items for server","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"8a165a67f79cfae39edb4557c15c5df8d3296497","unresolved":false,"context_lines":[{"line_number":610,"context_line":"        return rest_client.ResponseBody(resp)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    def update_all_server_tags(self, server_id, tags):"},{"line_number":613,"context_line":"        \"\"\"Set new tags items for server\"\"\""},{"line_number":614,"context_line":"        post_body \u003d json.dumps({\u0027tags\u0027: tags})"},{"line_number":615,"context_line":"        req \u003d \u0027servers/%s/tags\u0027 % server_id"},{"line_number":616,"context_line":"        resp, body \u003d self.put("}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_6be0f896","line":613,"range":{"start_line":613,"start_character":11,"end_line":613,"end_character":40},"in_reply_to":"1aa78d24_afafb128","updated":"2016-07-06 15:40:23.000000000","message":"Done","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":615,"context_line":"        req \u003d \u0027servers/%s/tags\u0027 % server_id"},{"line_number":616,"context_line":"        resp, body \u003d self.put("},{"line_number":617,"context_line":"            req, post_body)"},{"line_number":618,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":619,"context_line":"        body \u003d json.loads(body)"},{"line_number":620,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    def delete_delete_tags(self, server_id, tags\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_af01713a","line":619,"range":{"start_line":618,"start_character":7,"end_line":619,"end_character":31},"updated":"2016-07-06 01:35:35.000000000","message":"This definitely need schema but same as list one. so just add\n        schema \u003d self.get_schema(self.schema_versions_info)\n        self.validate_response(schema.list_server_tags, resp, body)","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"8a165a67f79cfae39edb4557c15c5df8d3296497","unresolved":false,"context_lines":[{"line_number":615,"context_line":"        req \u003d \u0027servers/%s/tags\u0027 % server_id"},{"line_number":616,"context_line":"        resp, body \u003d self.put("},{"line_number":617,"context_line":"            req, post_body)"},{"line_number":618,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":619,"context_line":"        body \u003d json.loads(body)"},{"line_number":620,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    def delete_delete_tags(self, server_id, tags\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_cbef6c85","line":619,"range":{"start_line":618,"start_character":7,"end_line":619,"end_character":31},"in_reply_to":"1aa78d24_af01713a","updated":"2016-07-06 15:40:23.000000000","message":"Done","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        body \u003d json.loads(body)"},{"line_number":620,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    def delete_delete_tags(self, server_id, tags\u003d\u0027\u0027):"},{"line_number":623,"context_line":"        \"\"\"Delete tag items for server\"\"\""},{"line_number":624,"context_line":"        req \u003d \"servers/%s/tags\" % server_id"},{"line_number":625,"context_line":"        if tags:"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_44bef465","line":622,"range":{"start_line":622,"start_character":8,"end_line":622,"end_character":26},"updated":"2016-07-06 01:35:35.000000000","message":"delete_server_tags","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        body \u003d json.loads(body)"},{"line_number":620,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    def delete_delete_tags(self, server_id, tags\u003d\u0027\u0027):"},{"line_number":623,"context_line":"        \"\"\"Delete tag items for server\"\"\""},{"line_number":624,"context_line":"        req \u003d \"servers/%s/tags\" % server_id"},{"line_number":625,"context_line":"        if tags:"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_8a074317","line":622,"range":{"start_line":622,"start_character":44,"end_line":622,"end_character":51},"updated":"2016-07-06 01:35:35.000000000","message":"tag\u003dNone\n\nas it just can be single tag to delete","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"8a165a67f79cfae39edb4557c15c5df8d3296497","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        body \u003d json.loads(body)"},{"line_number":620,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    def delete_delete_tags(self, server_id, tags\u003d\u0027\u0027):"},{"line_number":623,"context_line":"        \"\"\"Delete tag items for server\"\"\""},{"line_number":624,"context_line":"        req \u003d \"servers/%s/tags\" % server_id"},{"line_number":625,"context_line":"        if tags:"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_0be694af","line":622,"range":{"start_line":622,"start_character":44,"end_line":622,"end_character":51},"in_reply_to":"1aa78d24_8a074317","updated":"2016-07-06 15:40:23.000000000","message":"Done","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    def delete_delete_tags(self, server_id, tags\u003d\u0027\u0027):"},{"line_number":623,"context_line":"        \"\"\"Delete tag items for server\"\"\""},{"line_number":624,"context_line":"        req \u003d \"servers/%s/tags\" % server_id"},{"line_number":625,"context_line":"        if tags:"},{"line_number":626,"context_line":"            req +\u003d \u0027/%s\u0027 % tags"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_ca3cabca","line":623,"range":{"start_line":623,"start_character":8,"end_line":623,"end_character":41},"updated":"2016-07-06 01:35:35.000000000","message":"more doc string needed here as this going to be lib interface. how about something like-\n\n\"\"\"Delete tag items for server.\n\nIf tag is passed then it will delete only requested tag, otherwise this will delete all the tags item of requested server.\n\n:param server_id: uuid of server for which tags needs to be deleted.\n:param tag: tag to be deleted for requested server\n\"\"\"","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"8a165a67f79cfae39edb4557c15c5df8d3296497","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    def delete_delete_tags(self, server_id, tags\u003d\u0027\u0027):"},{"line_number":623,"context_line":"        \"\"\"Delete tag items for server\"\"\""},{"line_number":624,"context_line":"        req \u003d \"servers/%s/tags\" % server_id"},{"line_number":625,"context_line":"        if tags:"},{"line_number":626,"context_line":"            req +\u003d \u0027/%s\u0027 % tags"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_4b041c49","line":623,"range":{"start_line":623,"start_character":8,"end_line":623,"end_character":41},"in_reply_to":"1aa78d24_ca3cabca","updated":"2016-07-06 15:40:23.000000000","message":"Done","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c493e9c457293a804862ebff58a581fcaf8776a","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        if tags:"},{"line_number":626,"context_line":"            req +\u003d \u0027/%s\u0027 % tags"},{"line_number":627,"context_line":"        resp, body \u003d self.delete(req)"},{"line_number":628,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":629,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_6a5ad72b","line":628,"range":{"start_line":628,"start_character":8,"end_line":628,"end_character":47},"updated":"2016-07-06 01:35:35.000000000","message":"ditto, validate this with schema","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"8a165a67f79cfae39edb4557c15c5df8d3296497","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        if tags:"},{"line_number":626,"context_line":"            req +\u003d \u0027/%s\u0027 % tags"},{"line_number":627,"context_line":"        resp, body \u003d self.delete(req)"},{"line_number":628,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":629,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_2b01d038","line":628,"range":{"start_line":628,"start_character":8,"end_line":628,"end_character":47},"in_reply_to":"1aa78d24_6a5ad72b","updated":"2016-07-06 15:40:23.000000000","message":"Done","commit_id":"5ea1422781be9535a8d058f4dfec34482451e3ef"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"b378046c45652fe9c1f73b46894b6d50eebb5071","unresolved":false,"context_lines":[{"line_number":607,"context_line":"        \"\"\"Add tag for server\"\"\""},{"line_number":608,"context_line":"        req \u003d \u0027servers/%s/tags/%s\u0027 % (server_id, tag)"},{"line_number":609,"context_line":"        resp, body \u003d self.put(req, None)"},{"line_number":610,"context_line":"        self.expected_success([201, 204], resp.status)"},{"line_number":611,"context_line":"        return rest_client.ResponseBody(resp)"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def update_all_server_tags(self, server_id, tags):"}],"source_content_type":"text/x-python","patch_set":26,"id":"dada55a8_2e374b00","line":610,"range":{"start_line":610,"start_character":8,"end_line":610,"end_character":54},"updated":"2016-07-26 06:33:11.000000000","message":"you can add schema now for this. Nova fix is merged now - https://review.openstack.org/#/c/340629/","commit_id":"4f72eec1e6c155f484aecc5be01a7f6a408ffc6f"}],"tempest/services/compute/json/servers_client.py":[{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"ede6137c299e850b0bd43afb3f0ede69fdd1ed84","unresolved":false,"context_lines":[{"line_number":437,"context_line":"    def remove_fixed_ip(self, server_id, **kwargs):"},{"line_number":438,"context_line":"        \"\"\"Remove input fixed IP from input server instance.\"\"\""},{"line_number":439,"context_line":"        return self.action(server_id, \u0027removeFixedIp\u0027, **kwargs)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def list_instance_tags(self, server_id):"},{"line_number":442,"context_line":"        \"\"\"List tag items for server\"\"\""},{"line_number":443,"context_line":"        headers \u003d {\u0027X-OpenStack-Nova-API-Version\u0027: \u00272.13\u0027}"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_215e9544","line":440,"updated":"2015-11-26 13:00:18.000000000","message":"I think you missed ADD action:\n\n PUT servers/\u003cserver_id\u003e/tags/\u003ctag_name\u003e\n\nthis action put single tag to the instance. body is empty in this case","commit_id":"8eb25cadd38e77ad2786a549cedd17f1d6214ad6"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"ede6137c299e850b0bd43afb3f0ede69fdd1ed84","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        body \u003d json.loads(body)"},{"line_number":456,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def delete_instance_tags(self, server_id, tags\u003dNone):"},{"line_number":459,"context_line":"        \"\"\"Delete tag items for server\"\"\""},{"line_number":460,"context_line":"        headers \u003d {\u0027X-OpenStack-Nova-API-Version\u0027: \u00272.13\u0027}"},{"line_number":461,"context_line":"        req \u003d \"servers/%s/tags\" % server_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_2bc4348f","line":458,"updated":"2015-11-26 13:00:18.000000000","message":"Why you use here *list * tags? you get only first tag from this list. Maybe just string variable named \u0027tag\u0027 will be enough?","commit_id":"8eb25cadd38e77ad2786a549cedd17f1d6214ad6"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"ede6137c299e850b0bd43afb3f0ede69fdd1ed84","unresolved":false,"context_lines":[{"line_number":533,"context_line":"        body \u003d json.loads(body)"},{"line_number":534,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def list_instance_by_not_tags_and_not_tags_any("},{"line_number":537,"context_line":"            self, not_tags, not_tags_any):"},{"line_number":538,"context_line":"        headers \u003d {\u0027X-OpenStack-Nova-API-Version\u0027: \u00272.13\u0027}"},{"line_number":539,"context_line":"        req \u003d \"servers?not-tags\u003d%s\u0026not-tags-any\u003d%s\" % (\u0027,\u0027.join(not_tags),"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_41ae3982","line":536,"updated":"2015-11-26 13:00:18.000000000","message":"NIT: maybe you should use some more universal thing instead of  list_instance_by***** ? like:\n\n def list_instance_by_tag_filters(self, filters):\n        headers \u003d {\u0027X-OpenStack-Nova-API-Version\u0027: \u00272.13\u0027}\n\n        req \u003d \"servers?%s\" % \u0027\u0026\u0027.join(\n            [\"%s\u003d%s\" % (filter, tags)\n             for filter, tags in six.iteritems(filters)])\n\n        resp, body \u003d self.get(req, extra_headers\u003dTrue, headers\u003dheaders)\n        body \u003d json.loads(body)\n        return service_client.ResponseBody(resp, body)\n\nor more readable:\n\n def list_instance_by_tag_filters(self, filters):\n        headers \u003d {\u0027X-OpenStack-Nova-API-Version\u0027: \u00272.13\u0027}\n        \n        filters_as_strings \u003d [\"%s\u003d%s\" % (filter, tags)\n                              for filter, tags in six.iteritems(filters)]\n        \n        req \u003d \"servers?%s\" % \u0027\u0026\u0027.join(filters_as_strings)\n\n        resp, body \u003d self.get(req, extra_headers\u003dTrue, headers\u003dheaders)\n        body \u003d json.loads(body)\n        return service_client.ResponseBody(resp, body)\n\nHow you can use this method:\n\n list_instance_by_tag_filters({\u0027tags\u0027: [t1, t2],\n                              \u0027tags-any\u0027: [t2, t3],\n                              \u0027not-tags\u0027: [t4, t5],\n                              \u0027not-tags-any\u0027: [t6, t7]})","commit_id":"8eb25cadd38e77ad2786a549cedd17f1d6214ad6"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"ddab12c143c7f63be71d7dada030a59a5da5446b","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        \"\"\"Remove input fixed IP from input server instance.\"\"\""},{"line_number":440,"context_line":"        return self.action(server_id, \u0027removeFixedIp\u0027, **kwargs)"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    def list_instance_tags(self, server_id, tags\u003d\u0027\u0027):"},{"line_number":443,"context_line":"        \"\"\"List tag items for server\"\"\""},{"line_number":444,"context_line":"        headers \u003d {\u0027X-OpenStack-Nova-API-Version\u0027: \u00272.13\u0027}"},{"line_number":445,"context_line":"        req \u003d \u0027servers/%s/tags\u0027 % server_id"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_02acc5eb","line":442,"updated":"2015-12-07 11:58:23.000000000","message":"I think name \u0027tags\u0027 is a little bit confused here. because here we use one tag","commit_id":"a45519803029183ce39167e978fbfb5fff8f6667"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"53049e7f3438588675f913fe50829fffeffd1432","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        \"\"\"Remove input fixed IP from input server instance.\"\"\""},{"line_number":440,"context_line":"        return self.action(server_id, \u0027removeFixedIp\u0027, **kwargs)"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    def list_instance_tags(self, server_id, tags\u003d\u0027\u0027):"},{"line_number":443,"context_line":"        \"\"\"List tag items for server\"\"\""},{"line_number":444,"context_line":"        headers \u003d {\u0027X-OpenStack-Nova-API-Version\u0027: \u00272.13\u0027}"},{"line_number":445,"context_line":"        req \u003d \u0027servers/%s/tags\u0027 % server_id"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_655b45f7","line":442,"in_reply_to":"7a740942_02acc5eb","updated":"2015-12-07 14:14:52.000000000","message":"I\u0027m going to split this method, will move some part to new get_instance_tag","commit_id":"a45519803029183ce39167e978fbfb5fff8f6667"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"ddab12c143c7f63be71d7dada030a59a5da5446b","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            body \u003d json.loads(body)"},{"line_number":452,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    def add_instance_tags(self, server_id, tags):"},{"line_number":455,"context_line":"        \"\"\"Add tag for server\"\"\""},{"line_number":456,"context_line":"        headers \u003d {\u0027X-OpenStack-Nova-API-Version\u0027: \u00272.13\u0027}"},{"line_number":457,"context_line":"        post_body \u003d \u0027{}\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_a2ba9121","line":454,"updated":"2015-12-07 11:58:23.000000000","message":"same","commit_id":"a45519803029183ce39167e978fbfb5fff8f6667"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"53049e7f3438588675f913fe50829fffeffd1432","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            body \u003d json.loads(body)"},{"line_number":452,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    def add_instance_tags(self, server_id, tags):"},{"line_number":455,"context_line":"        \"\"\"Add tag for server\"\"\""},{"line_number":456,"context_line":"        headers \u003d {\u0027X-OpenStack-Nova-API-Version\u0027: \u00272.13\u0027}"},{"line_number":457,"context_line":"        post_body \u003d \u0027{}\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_c56a3981","line":454,"in_reply_to":"7a740942_a2ba9121","updated":"2015-12-07 14:14:52.000000000","message":"ok, I got it","commit_id":"a45519803029183ce39167e978fbfb5fff8f6667"}]}
