)]}'
{"rally/api.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"7bce9198ab71db18c90a824f119d31e8dcb6cff8","unresolved":false,"context_lines":[{"line_number":1096,"context_line":"        :param skip_db_check: Allows to skip db revision check"},{"line_number":1097,"context_line":"        :type skip_db_check: bool"},{"line_number":1098,"context_line":"        \"\"\""},{"line_number":1099,"context_line":"        if rally_endpoint:"},{"line_number":1100,"context_line":"            raise NotImplementedError(_(\"Sorry, but Rally-as-a-Service is \""},{"line_number":1101,"context_line":"                                        \"not ready yet.\"))"},{"line_number":1102,"context_line":"        try:"},{"line_number":1103,"context_line":"            config_files \u003d ([config_file] if config_file else"},{"line_number":1104,"context_line":"                            self._default_config_file())"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_7b6c0908","side":"PARENT","line":1101,"range":{"start_line":1099,"start_character":8,"end_line":1101,"end_character":58},"updated":"2017-05-29 10:41:55.000000000","message":"I prefer to do such change only after full implementation of RaaS","commit_id":"24551de4bc160a98be6034a63c63e9d3469a2231"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"2e04602002566abbe264b01d7e0607c4cd757cde","unresolved":false,"context_lines":[{"line_number":1096,"context_line":"        :param skip_db_check: Allows to skip db revision check"},{"line_number":1097,"context_line":"        :type skip_db_check: bool"},{"line_number":1098,"context_line":"        \"\"\""},{"line_number":1099,"context_line":"        if rally_endpoint:"},{"line_number":1100,"context_line":"            raise NotImplementedError(_(\"Sorry, but Rally-as-a-Service is \""},{"line_number":1101,"context_line":"                                        \"not ready yet.\"))"},{"line_number":1102,"context_line":"        try:"},{"line_number":1103,"context_line":"            config_files \u003d ([config_file] if config_file else"},{"line_number":1104,"context_line":"                            self._default_config_file())"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_1bcb8872","side":"PARENT","line":1101,"range":{"start_line":1099,"start_character":8,"end_line":1101,"end_character":58},"in_reply_to":"df140735_7b6c0908","updated":"2017-05-31 16:25:27.000000000","message":"np.","commit_id":"24551de4bc160a98be6034a63c63e9d3469a2231"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"7bce9198ab71db18c90a824f119d31e8dcb6cff8","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"CONF \u003d cfg.CONF"},{"line_number":47,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":48,"context_line":"API_REQUEST_PREFIX \u003d \"/api/v1\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class APIGroup(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_1bae2d2e","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":30},"updated":"2017-05-29 10:41:55.000000000","message":"While spending time fixing issues about latest changes in keystone entry-point, I realized that hardcoding version in the URL leads to different issues in future. It is much easier  to use HTTP headers instead for requesting specific version, so let\u0027s remove \"v1\" from prefix","commit_id":"e547313b6937a5e04fa0066db2bac7e86a8cb1d2"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"2e04602002566abbe264b01d7e0607c4cd757cde","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"CONF \u003d cfg.CONF"},{"line_number":47,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":48,"context_line":"API_REQUEST_PREFIX \u003d \"/api/v1\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class APIGroup(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_fb5454cc","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":30},"in_reply_to":"df140735_1bae2d2e","updated":"2017-05-31 16:25:27.000000000","message":"You mean server use headers to get version.","commit_id":"e547313b6937a5e04fa0066db2bac7e86a8cb1d2"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"3e05f8624f47a28b9c75eb1fb2a16f8c8aa879ce","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"CONF \u003d cfg.CONF"},{"line_number":47,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":48,"context_line":"API_REQUEST_PREFIX \u003d \"/api/v1\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class APIGroup(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_8a41603c","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":30},"in_reply_to":"df140735_5cec48f2","updated":"2017-06-01 15:15:10.000000000","message":"Ok, it\u0027s fine to me.","commit_id":"e547313b6937a5e04fa0066db2bac7e86a8cb1d2"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"4722a81985570eaff25dad09b2a91415516c966a","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"CONF \u003d cfg.CONF"},{"line_number":47,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":48,"context_line":"API_REQUEST_PREFIX \u003d \"/api/v1\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class APIGroup(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_5cec48f2","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":30},"in_reply_to":"df140735_fb5454cc","updated":"2017-06-01 05:06:17.000000000","message":"yes, http headers is a good thing which helps to avoid any hardcode in urls :)","commit_id":"e547313b6937a5e04fa0066db2bac7e86a8cb1d2"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"7bce9198ab71db18c90a824f119d31e8dcb6cff8","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        \"\"\""},{"line_number":57,"context_line":"        self.api \u003d api"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _request(self, path, method, **kwargs):"},{"line_number":60,"context_line":"        response \u003d requests.request(method, path, json\u003dkwargs)"},{"line_number":61,"context_line":"        if response.status_code !\u003d 200:"},{"line_number":62,"context_line":"            raise exceptions.find_exception(response)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_1b5ced49","line":59,"range":{"start_line":59,"start_character":0,"end_line":59,"end_character":47},"updated":"2017-05-29 10:41:55.000000000","message":"Theoretically, this method relates more to generic API, so let\u0027s move it there and call it in api_wrapper like \"self.api._do_request\"","commit_id":"e547313b6937a5e04fa0066db2bac7e86a8cb1d2"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"2e04602002566abbe264b01d7e0607c4cd757cde","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        \"\"\""},{"line_number":57,"context_line":"        self.api \u003d api"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _request(self, path, method, **kwargs):"},{"line_number":60,"context_line":"        response \u003d requests.request(method, path, json\u003dkwargs)"},{"line_number":61,"context_line":"        if response.status_code !\u003d 200:"},{"line_number":62,"context_line":"            raise exceptions.find_exception(response)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_5b44601b","line":59,"range":{"start_line":59,"start_character":0,"end_line":59,"end_character":47},"in_reply_to":"df140735_1b5ced49","updated":"2017-05-31 16:25:27.000000000","message":"np.","commit_id":"e547313b6937a5e04fa0066db2bac7e86a8cb1d2"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"7bce9198ab71db18c90a824f119d31e8dcb6cff8","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.api \u003d api"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _request(self, path, method, **kwargs):"},{"line_number":60,"context_line":"        response \u003d requests.request(method, path, json\u003dkwargs)"},{"line_number":61,"context_line":"        if response.status_code !\u003d 200:"},{"line_number":62,"context_line":"            raise exceptions.find_exception(response)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_db55551f","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":62},"updated":"2017-05-29 10:41:55.000000000","message":"Let\u0027s add more info to the request via headers.\n\n    headers \u003d {\n        \"RALLY-CLIENT-VERSION\": rally_version.version_string(),\n        \"RALLY-API\": \"1.0\" # hardcode v1 here.\n    }\n    response \u003d requests.request(method, path, json\u003dkwargs, headers\u003dheaders)","commit_id":"e547313b6937a5e04fa0066db2bac7e86a8cb1d2"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"4722a81985570eaff25dad09b2a91415516c966a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.api \u003d api"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _request(self, path, method, **kwargs):"},{"line_number":60,"context_line":"        response \u003d requests.request(method, path, json\u003dkwargs)"},{"line_number":61,"context_line":"        if response.status_code !\u003d 200:"},{"line_number":62,"context_line":"            raise exceptions.find_exception(response)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_5cc5685a","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":62},"in_reply_to":"df140735_5bb900e7","updated":"2017-06-01 05:06:17.000000000","message":"So basically, it is more \"debug\" info for future, which will help to check that compatible version of client and server is used. Version of python package is quite a good identifier for client version:)","commit_id":"e547313b6937a5e04fa0066db2bac7e86a8cb1d2"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"3e05f8624f47a28b9c75eb1fb2a16f8c8aa879ce","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.api \u003d api"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _request(self, path, method, **kwargs):"},{"line_number":60,"context_line":"        response \u003d requests.request(method, path, json\u003dkwargs)"},{"line_number":61,"context_line":"        if response.status_code !\u003d 200:"},{"line_number":62,"context_line":"            raise exceptions.find_exception(response)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_8accc06a","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":62},"in_reply_to":"df140735_5cc5685a","updated":"2017-06-01 15:15:10.000000000","message":"It is fine to me. Why not use the version like: v1, v2...?","commit_id":"e547313b6937a5e04fa0066db2bac7e86a8cb1d2"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"2e04602002566abbe264b01d7e0607c4cd757cde","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.api \u003d api"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _request(self, path, method, **kwargs):"},{"line_number":60,"context_line":"        response \u003d requests.request(method, path, json\u003dkwargs)"},{"line_number":61,"context_line":"        if response.status_code !\u003d 200:"},{"line_number":62,"context_line":"            raise exceptions.find_exception(response)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_5bb900e7","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":62},"in_reply_to":"df140735_db55551f","updated":"2017-05-31 16:25:27.000000000","message":"So we need use version.version_string as client version?","commit_id":"e547313b6937a5e04fa0066db2bac7e86a8cb1d2"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"55e1c3d55d1743f85e76b3bba8c31010c8145a4a","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                raise TypeError(\"It is restricted to use positional\""},{"line_number":73,"context_line":"                                \" argument for API calls\")"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"            if self.api.endpoint_url:"},{"line_number":76,"context_line":"                # it\u0027s a call to the remote Rally instance"},{"line_number":77,"context_line":"                return self._request(self.api.endpoint_url + path,"},{"line_number":78,"context_line":"                                     method, **kwargs)"},{"line_number":79,"context_line":"            else:"},{"line_number":80,"context_line":"                try:"},{"line_number":81,"context_line":"                    return func(self, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_ad1a4714","line":78,"range":{"start_line":75,"start_character":1,"end_line":78,"end_character":54},"updated":"2017-05-27 01:07:57.000000000","message":"look like it is not related with api methods. If remote calling, here skip func .","commit_id":"e547313b6937a5e04fa0066db2bac7e86a8cb1d2"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"4ee2829433b39f39d75fb2a710c908f830eb0c5c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                raise TypeError(\"It is restricted to use positional\""},{"line_number":73,"context_line":"                                \" argument for API calls\")"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"            if self.api.endpoint_url:"},{"line_number":76,"context_line":"                # it\u0027s a call to the remote Rally instance"},{"line_number":77,"context_line":"                return self._request(self.api.endpoint_url + path,"},{"line_number":78,"context_line":"                                     method, **kwargs)"},{"line_number":79,"context_line":"            else:"},{"line_number":80,"context_line":"                try:"},{"line_number":81,"context_line":"                    return func(self, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_ebcf04ae","line":78,"range":{"start_line":75,"start_character":1,"end_line":78,"end_character":54},"in_reply_to":"ff0f0b1f_ad1a4714","updated":"2017-05-27 10:01:48.000000000","message":"Those codes would use requests.request to send rest request to server.","commit_id":"e547313b6937a5e04fa0066db2bac7e86a8cb1d2"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"da2c5774d49a1e8229468793d65a1a9f5065a8de","unresolved":false,"context_lines":[{"line_number":544,"context_line":"            objects.Task.delete_by_uuid("},{"line_number":545,"context_line":"                task_uuid, status\u003dconsts.TaskStatus.FINISHED)"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    def import_results(self, deployment, task_results, tag\u003dNone):"},{"line_number":548,"context_line":"        \"\"\"Import json results of a test into rally database\"\"\""},{"line_number":549,"context_line":"        deployment \u003d objects.Deployment.get(deployment)"},{"line_number":550,"context_line":"        if deployment[\"status\"] !\u003d consts.DeployStatus.DEPLOY_FINISHED:"}],"source_content_type":"text/x-python","patch_set":13,"id":"df140735_3368431b","line":547,"range":{"start_line":547,"start_character":3,"end_line":547,"end_character":65},"updated":"2017-06-05 09:22:26.000000000","message":"please, wrap this method too.","commit_id":"263eee4b2f32b3ac98faa73203c3be8045bc0ce9"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"115c5d25b93eef6bb7d3d93e85a870ef214fcdb4","unresolved":false,"context_lines":[{"line_number":544,"context_line":"            objects.Task.delete_by_uuid("},{"line_number":545,"context_line":"                task_uuid, status\u003dconsts.TaskStatus.FINISHED)"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    def import_results(self, deployment, task_results, tag\u003dNone):"},{"line_number":548,"context_line":"        \"\"\"Import json results of a test into rally database\"\"\""},{"line_number":549,"context_line":"        deployment \u003d objects.Deployment.get(deployment)"},{"line_number":550,"context_line":"        if deployment[\"status\"] !\u003d consts.DeployStatus.DEPLOY_FINISHED:"}],"source_content_type":"text/x-python","patch_set":13,"id":"df140735_94b36ce9","line":547,"range":{"start_line":547,"start_character":3,"end_line":547,"end_character":65},"in_reply_to":"df140735_3368431b","updated":"2017-06-05 15:53:57.000000000","message":"Done","commit_id":"263eee4b2f32b3ac98faa73203c3be8045bc0ce9"}]}
