)]}'
{"novaclient/__init__.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"5310581729387a278e2e7453aa6b64952bafcd75","unresolved":false,"context_lines":[{"line_number":25,"context_line":"# when client supported the max version, and bumped sequentially, otherwise"},{"line_number":26,"context_line":"# the client may break due to server side new version may include some"},{"line_number":27,"context_line":"# backward incompatible change."},{"line_number":28,"context_line":"API_MAX_VERSION \u003d api_versions.APIVersion(\"2.40\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_c1f87e4c","line":28,"updated":"2016-12-13 18:14:08.000000000","message":"Direct jump from 2.38 to 2.40?","commit_id":"d481f61f271aa3821a348d97c8f6e10237a7812d"}],"novaclient/tests/functional/v2/test_usage.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b02c7049f36c0bd4410efbef11b6f74ccadb48b0","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        return start, end"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TestUsageCLI(base.ClientTestBase):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    COMPUTE_API_VERSION \u003d \u00272.1\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_usage(self):"},{"line_number":33,"context_line":"        self._create_server(\u0027some-server\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_f3475075","line":30,"range":{"start_line":28,"start_character":0,"end_line":30,"end_character":31},"updated":"2016-12-17 23:20:56.000000000","message":"you should add cleanup for server creation","commit_id":"b59d809b22a8f6e0225fa2fa6d99ec57274be111"},{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"6116bcabdb33955aeab288f84b0953b9a01a9c3a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        return start, end"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TestUsageCLI(base.ClientTestBase):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    COMPUTE_API_VERSION \u003d \u00272.1\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_usage(self):"},{"line_number":33,"context_line":"        self._create_server(\u0027some-server\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_1e22dbb9","line":30,"range":{"start_line":28,"start_character":0,"end_line":30,"end_character":31},"in_reply_to":"1a6eadb0_23623117","updated":"2016-12-19 19:08:10.000000000","message":"Oh! Silly me. Fixed in the most recent revision. Thanks!","commit_id":"b59d809b22a8f6e0225fa2fa6d99ec57274be111"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"894ae2c45bee9c0b988b37725c645b26180f5396","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        return start, end"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TestUsageCLI(base.ClientTestBase):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    COMPUTE_API_VERSION \u003d \u00272.1\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_usage(self):"},{"line_number":33,"context_line":"        self._create_server(\u0027some-server\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_23623117","line":30,"range":{"start_line":28,"start_character":0,"end_line":30,"end_character":31},"in_reply_to":"1a6eadb0_f3475075","updated":"2016-12-19 18:45:46.000000000","message":"I do not know why I left this comment here. sorry. I wanted to leave another comment here) We have special directory for 2.1(legacy) tests - https://github.com/openstack/python-novaclient/tree/master/novaclient/tests/functional/v2/legacy","commit_id":"b59d809b22a8f6e0225fa2fa6d99ec57274be111"},{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"78f8ea085f86c84eb295f04469c9bdc1e6f09f9c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        return start, end"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TestUsageCLI(base.ClientTestBase):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    COMPUTE_API_VERSION \u003d \u00272.1\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_usage(self):"},{"line_number":33,"context_line":"        self._create_server(\u0027some-server\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_031d35bd","line":30,"range":{"start_line":28,"start_character":0,"end_line":30,"end_character":31},"in_reply_to":"1a6eadb0_f3475075","updated":"2016-12-19 14:37:53.000000000","message":"Server creation cleanup is done here in base.py [1]:\n\n - [1] https://github.com/openstack/python-novaclient/blob/master/novaclient/tests/functional/base.py#L481\n\nI wrote these functional tests pointed to a local devstack, and I checked after that a `nova list` only showed the instances that I manually created before running these tests.","commit_id":"b59d809b22a8f6e0225fa2fa6d99ec57274be111"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b02c7049f36c0bd4410efbef11b6f74ccadb48b0","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    COMPUTE_API_VERSION \u003d \u00272.1\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_usage(self):"},{"line_number":33,"context_line":"        self._create_server(\u0027some-server\u0027)"},{"line_number":34,"context_line":"        usage_output \u003d self.nova(\u0027usage\u0027)"},{"line_number":35,"context_line":"        num_servers \u003d self._get_column_value_from_single_row_table("},{"line_number":36,"context_line":"            usage_output, \u0027Servers\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_d3425468","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":42},"updated":"2016-12-17 23:20:56.000000000","message":"you should add cleanup for server creation.\n\nthis comment is same for all tests","commit_id":"b59d809b22a8f6e0225fa2fa6d99ec57274be111"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"894ae2c45bee9c0b988b37725c645b26180f5396","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    COMPUTE_API_VERSION \u003d \u00272.1\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_usage(self):"},{"line_number":33,"context_line":"        self._create_server(\u0027some-server\u0027)"},{"line_number":34,"context_line":"        usage_output \u003d self.nova(\u0027usage\u0027)"},{"line_number":35,"context_line":"        num_servers \u003d self._get_column_value_from_single_row_table("},{"line_number":36,"context_line":"            usage_output, \u0027Servers\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_63a7bc4f","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":42},"in_reply_to":"1a6eadb0_235f9176","updated":"2016-12-19 18:45:46.000000000","message":"ok :)","commit_id":"b59d809b22a8f6e0225fa2fa6d99ec57274be111"},{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"78f8ea085f86c84eb295f04469c9bdc1e6f09f9c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    COMPUTE_API_VERSION \u003d \u00272.1\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_usage(self):"},{"line_number":33,"context_line":"        self._create_server(\u0027some-server\u0027)"},{"line_number":34,"context_line":"        usage_output \u003d self.nova(\u0027usage\u0027)"},{"line_number":35,"context_line":"        num_servers \u003d self._get_column_value_from_single_row_table("},{"line_number":36,"context_line":"            usage_output, \u0027Servers\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_235f9176","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":42},"in_reply_to":"1a6eadb0_d3425468","updated":"2016-12-19 14:37:53.000000000","message":"Ditto: the `_create_server` helper add a clean up.","commit_id":"b59d809b22a8f6e0225fa2fa6d99ec57274be111"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b02c7049f36c0bd4410efbef11b6f74ccadb48b0","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_usage(self):"},{"line_number":33,"context_line":"        self._create_server(\u0027some-server\u0027)"},{"line_number":34,"context_line":"        usage_output \u003d self.nova(\u0027usage\u0027)"},{"line_number":35,"context_line":"        num_servers \u003d self._get_column_value_from_single_row_table("},{"line_number":36,"context_line":"            usage_output, \u0027Servers\u0027)"},{"line_number":37,"context_line":"        self.assertGreater(int(num_servers), 0)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_usage_tenant(self):"},{"line_number":40,"context_line":"        tenant_id \u003d self._get_project_id(self.cli_clients.tenant_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_53572426","line":37,"range":{"start_line":34,"start_character":8,"end_line":37,"end_character":47},"updated":"2016-12-17 23:20:56.000000000","message":"it would be better to check usage at first step, then create server and finally, check that usage is changed.\n\nthis comment is same for all tests","commit_id":"b59d809b22a8f6e0225fa2fa6d99ec57274be111"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"894ae2c45bee9c0b988b37725c645b26180f5396","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_usage(self):"},{"line_number":33,"context_line":"        self._create_server(\u0027some-server\u0027)"},{"line_number":34,"context_line":"        usage_output \u003d self.nova(\u0027usage\u0027)"},{"line_number":35,"context_line":"        num_servers \u003d self._get_column_value_from_single_row_table("},{"line_number":36,"context_line":"            usage_output, \u0027Servers\u0027)"},{"line_number":37,"context_line":"        self.assertGreater(int(num_servers), 0)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_usage_tenant(self):"},{"line_number":40,"context_line":"        tenant_id \u003d self._get_project_id(self.cli_clients.tenant_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_83305809","line":37,"range":{"start_line":34,"start_character":8,"end_line":37,"end_character":47},"in_reply_to":"1a6eadb0_0368c8b9","updated":"2016-12-19 18:45:46.000000000","message":"functional tests uses existing users, so we can\u0027t expect that usage was \"clean\" before launching tests, so let\u0027s wait and modify them.\n\nHave nice holidays!","commit_id":"b59d809b22a8f6e0225fa2fa6d99ec57274be111"},{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"881da3cb31133ddba7ee5c640d6c7344c6aff0fe","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_usage(self):"},{"line_number":33,"context_line":"        self._create_server(\u0027some-server\u0027)"},{"line_number":34,"context_line":"        usage_output \u003d self.nova(\u0027usage\u0027)"},{"line_number":35,"context_line":"        num_servers \u003d self._get_column_value_from_single_row_table("},{"line_number":36,"context_line":"            usage_output, \u0027Servers\u0027)"},{"line_number":37,"context_line":"        self.assertGreater(int(num_servers), 0)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_usage_tenant(self):"},{"line_number":40,"context_line":"        tenant_id \u003d self._get_project_id(self.cli_clients.tenant_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_0368c8b9","line":37,"range":{"start_line":34,"start_character":8,"end_line":37,"end_character":47},"in_reply_to":"1a6eadb0_53572426","updated":"2016-12-19 18:29:09.000000000","message":"I can try reworking these tests, but it may not happen until after the holidays.","commit_id":"b59d809b22a8f6e0225fa2fa6d99ec57274be111"},{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"6116bcabdb33955aeab288f84b0953b9a01a9c3a","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_usage(self):"},{"line_number":33,"context_line":"        self._create_server(\u0027some-server\u0027)"},{"line_number":34,"context_line":"        usage_output \u003d self.nova(\u0027usage\u0027)"},{"line_number":35,"context_line":"        num_servers \u003d self._get_column_value_from_single_row_table("},{"line_number":36,"context_line":"            usage_output, \u0027Servers\u0027)"},{"line_number":37,"context_line":"        self.assertGreater(int(num_servers), 0)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_usage_tenant(self):"},{"line_number":40,"context_line":"        tenant_id \u003d self._get_project_id(self.cli_clients.tenant_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_fe5d1f49","line":37,"range":{"start_line":34,"start_character":8,"end_line":37,"end_character":47},"in_reply_to":"1a6eadb0_83305809","updated":"2016-12-19 19:08:10.000000000","message":"Yup, I\u0027m using greater thans because I know I can\u0027t assume usage is \"clean\".\n\nI change this to before/after comparisons like you suggested, but I didn\u0027t run the code against a local devstack. Fingers crossed it passes CI ;)","commit_id":"b59d809b22a8f6e0225fa2fa6d99ec57274be111"},{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"260b525c81c81dfce414a94456df360d7b29e78e","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_usage(self):"},{"line_number":33,"context_line":"        self._create_server(\u0027some-server\u0027)"},{"line_number":34,"context_line":"        usage_output \u003d self.nova(\u0027usage\u0027)"},{"line_number":35,"context_line":"        num_servers \u003d self._get_column_value_from_single_row_table("},{"line_number":36,"context_line":"            usage_output, \u0027Servers\u0027)"},{"line_number":37,"context_line":"        self.assertGreater(int(num_servers), 0)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_usage_tenant(self):"},{"line_number":40,"context_line":"        tenant_id \u003d self._get_project_id(self.cli_clients.tenant_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_88c070e2","line":37,"range":{"start_line":34,"start_character":8,"end_line":37,"end_character":47},"in_reply_to":"1a6eadb0_fe5d1f49","updated":"2016-12-19 20:26:53.000000000","message":"Phew, it passed CI :)","commit_id":"b59d809b22a8f6e0225fa2fa6d99ec57274be111"}],"novaclient/tests/unit/v2/test_shell.py":[{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"8a9383d5c0ff3ceb1f34fbd50de901207c467247","unresolved":false,"context_lines":[{"line_number":1751,"context_line":""},{"line_number":1752,"context_line":"    def test_usage_list(self):"},{"line_number":1753,"context_line":"        cmd \u003d \u0027usage-list --start 2000-01-20 --end 2005-02-01\u0027"},{"line_number":1754,"context_line":"        stdout, _ \u003d self.run_command(cmd)"},{"line_number":1755,"context_line":"        self.assert_called(\u0027GET\u0027,"},{"line_number":1756,"context_line":"                           \u0027/os-simple-tenant-usage?\u0027 +"},{"line_number":1757,"context_line":"                           \u0027start\u003d2000-01-20T00:00:00\u0026\u0027 +"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_24757797","line":1754,"range":{"start_line":1754,"start_character":8,"end_line":1754,"end_character":17},"updated":"2016-12-16 21:12:53.000000000","message":"note to self: there\u0027s a new convention, follow it in the next respin","commit_id":"619e205e4c63044e23ce2274be43e839ad31cee8"}],"novaclient/v2/shell.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"e253981e38c492d2177e38c7683ef91d9543d9c0","unresolved":false,"context_lines":[{"line_number":3555,"context_line":"            next_usage \u003d cs.usage.get(tenant_id, start, end, marker\u003dmarker)"},{"line_number":3556,"context_line":"            marker \u003d get_marker(next_usage)"},{"line_number":3557,"context_line":"            if marker:"},{"line_number":3558,"context_line":"                merge_usage(usage, next_usage)"},{"line_number":3559,"context_line":""},{"line_number":3560,"context_line":"    print(_(\"Usage from %(start)s to %(end)s:\") %"},{"line_number":3561,"context_line":"          {\u0027start\u0027: start.strftime(dateformat),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_d0330ff5","line":3558,"updated":"2016-12-07 19:57:37.000000000","message":"Maybe a future PR could reduce the code duplication in these functions?","commit_id":"619e205e4c63044e23ce2274be43e839ad31cee8"},{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"8a9383d5c0ff3ceb1f34fbd50de901207c467247","unresolved":false,"context_lines":[{"line_number":3555,"context_line":"            next_usage \u003d cs.usage.get(tenant_id, start, end, marker\u003dmarker)"},{"line_number":3556,"context_line":"            marker \u003d get_marker(next_usage)"},{"line_number":3557,"context_line":"            if marker:"},{"line_number":3558,"context_line":"                merge_usage(usage, next_usage)"},{"line_number":3559,"context_line":""},{"line_number":3560,"context_line":"    print(_(\"Usage from %(start)s to %(end)s:\") %"},{"line_number":3561,"context_line":"          {\u0027start\u0027: start.strftime(dateformat),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_a7e1242c","line":3558,"in_reply_to":"3a71b18c_c76c2c39","updated":"2016-12-16 21:12:53.000000000","message":"Done","commit_id":"619e205e4c63044e23ce2274be43e839ad31cee8"},{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"4261d7ec045d2a63a7a963f362deddb34dc7921a","unresolved":false,"context_lines":[{"line_number":3555,"context_line":"            next_usage \u003d cs.usage.get(tenant_id, start, end, marker\u003dmarker)"},{"line_number":3556,"context_line":"            marker \u003d get_marker(next_usage)"},{"line_number":3557,"context_line":"            if marker:"},{"line_number":3558,"context_line":"                merge_usage(usage, next_usage)"},{"line_number":3559,"context_line":""},{"line_number":3560,"context_line":"    print(_(\"Usage from %(start)s to %(end)s:\") %"},{"line_number":3561,"context_line":"          {\u0027start\u0027: start.strftime(dateformat),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_c76c2c39","line":3558,"in_reply_to":"3a71b18c_d0330ff5","updated":"2016-12-08 03:11:20.000000000","message":"Sure, I\u0027ll give it a shot, see if I can de-dup without adding too much complexity.\n\nMicroversion 2.39 got scooped by the proxy API work [1], so I need to bump this to 2.40 anyway.\n\nI\u0027m blocked on the python-novaclient part of microversion 2.39 [2] since it\u0027s still a work in progress, but I\u0027ll circle back when that\u0027s in shape.\n\nThanks again for the reviews!\n\n[1] https://review.openstack.org/#/c/405461/\n\n[2] https://review.openstack.org/#/c/408166/","commit_id":"619e205e4c63044e23ce2274be43e839ad31cee8"}]}
