)]}'
{"rally/api.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"801e53bdb5c210e552017a23764d5b3a9d6da965","unresolved":false,"context_lines":[{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        LOG.info(\"Verifier %s has been successfully created!\", verifier)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        return [{\"uuid\": verifier.uuid}, {\"status\": verifier.status}]"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    @staticmethod"},{"line_number":482,"context_line":"    def get(verifier_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_2d58c955","line":479,"range":{"start_line":479,"start_character":15,"end_line":479,"end_character":69},"updated":"2017-02-08 13:15:14.000000000","message":"it is better to add \"to_dict\" method to Verifier class and call it here.","commit_id":"ac1a7cb385fcac6c27e0d34da79878728eca225e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"801e53bdb5c210e552017a23764d5b3a9d6da965","unresolved":false,"context_lines":[{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        return [{\"uuid\": verifier.uuid}, {\"status\": verifier.status}]"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    @staticmethod"},{"line_number":482,"context_line":"    def get(verifier_id):"},{"line_number":483,"context_line":"        \"\"\"Get a verifier."},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"        :param verifier_id: Verifier name or UUID"},{"line_number":486,"context_line":"        \"\"\""},{"line_number":487,"context_line":"        return [objects.Verifier.get(verifier_id)]"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    @staticmethod"},{"line_number":490,"context_line":"    def list(status\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_e8994fc5","line":487,"range":{"start_line":481,"start_character":4,"end_line":487,"end_character":50},"updated":"2017-02-08 13:15:14.000000000","message":"Inner data of lists and dictionaries should be serializable too.\nLet\u0027s have two separate methods.\n\n   def _get(verifier_id):\n       return objects.Verifier.get(verifier_id)\n\nThis method will be used in all other API methods, which requires verifier object\n    \n   @classmethod\n   def get(cls, verifier_id):\n       return cls._get(verifier_id).to_dict()\n\nThis method will call private method and transform object to a dictionary object (json like)","commit_id":"ac1a7cb385fcac6c27e0d34da79878728eca225e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"801e53bdb5c210e552017a23764d5b3a9d6da965","unresolved":false,"context_lines":[{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        :param status: Status to filter verifiers by"},{"line_number":494,"context_line":"        \"\"\""},{"line_number":495,"context_line":"        return objects.Verifier.list(status)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"    @classmethod"},{"line_number":498,"context_line":"    def delete(cls, verifier_id, deployment_id\u003dNone, force\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_e8e06f2b","line":495,"range":{"start_line":495,"start_character":15,"end_line":495,"end_character":44},"updated":"2017-02-08 13:15:14.000000000","message":"it should be a list of dicts, so you need to transform each item of obtained list.","commit_id":"ac1a7cb385fcac6c27e0d34da79878728eca225e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"801e53bdb5c210e552017a23764d5b3a9d6da965","unresolved":false,"context_lines":[{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        LOG.info(\"Verifier %s has been successfully updated!\", verifier)"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        return [{\"uuid\": verifier.uuid}, {\"status\": verifier.status}]"},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"    @classmethod"},{"line_number":629,"context_line":"    def configure(cls, verifier, deployment_id, extra_options\u003dNone,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_68d63f29","line":626,"range":{"start_line":626,"start_character":15,"end_line":626,"end_character":69},"updated":"2017-02-08 13:15:14.000000000","message":"1) why there are 2 separate dictionaries? why not just `{\"uuid\": verifier.uuid, \"status\": verifier.status}` ?\n\n2) you can re-use here proposed to_dict method","commit_id":"ac1a7cb385fcac6c27e0d34da79878728eca225e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"801e53bdb5c210e552017a23764d5b3a9d6da965","unresolved":false,"context_lines":[{"line_number":706,"context_line":"        LOG.info(\"Configuration of verifier %s has been successfully \""},{"line_number":707,"context_line":"                 \"overridden for deployment \u0027%s\u0027 (UUID\u003d%s)!\", verifier,"},{"line_number":708,"context_line":"                 verifier.deployment[\"name\"], verifier.deployment[\"uuid\"])"},{"line_number":709,"context_line":"        return [{\"uuid\": verifier.uuid}, {\"status\": verifier.status}]"},{"line_number":710,"context_line":""},{"line_number":711,"context_line":"    @classmethod"},{"line_number":712,"context_line":"    def list_tests(cls, verifier_id, pattern\u003d\"\"):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_c8df3338","line":709,"range":{"start_line":709,"start_character":8,"end_line":709,"end_character":69},"updated":"2017-02-08 13:15:14.000000000","message":"same here","commit_id":"ac1a7cb385fcac6c27e0d34da79878728eca225e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"801e53bdb5c210e552017a23764d5b3a9d6da965","unresolved":false,"context_lines":[{"line_number":761,"context_line":""},{"line_number":762,"context_line":"        LOG.info(\"Extension for verifier %s has been successfully added!\","},{"line_number":763,"context_line":"                 verifier)"},{"line_number":764,"context_line":"        return [{\"uuid\": verifier_id},"},{"line_number":765,"context_line":"                {\"status\": verifier.status},"},{"line_number":766,"context_line":"                {\"extensions\": verifier.manager.list_extensions()}]"},{"line_number":767,"context_line":""},{"line_number":768,"context_line":"    @classmethod"},{"line_number":769,"context_line":"    def list_extensions(cls, verifier_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_c8b653f8","line":766,"range":{"start_line":764,"start_character":8,"end_line":766,"end_character":67},"updated":"2017-02-08 13:15:14.000000000","message":"previously, this method doesn\u0027t return anything. Not sure that we need to return that data now.","commit_id":"ac1a7cb385fcac6c27e0d34da79878728eca225e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"801e53bdb5c210e552017a23764d5b3a9d6da965","unresolved":false,"context_lines":[{"line_number":800,"context_line":"        verifier.manager.uninstall_extension(name)"},{"line_number":801,"context_line":"        LOG.info(\"Extension for verifier %s has been successfully deleted!\","},{"line_number":802,"context_line":"                 verifier)"},{"line_number":803,"context_line":"        return [{\"uuid\": verifier_id},"},{"line_number":804,"context_line":"                {\"status\": verifier.status},"},{"line_number":805,"context_line":"                {\"extensions\": verifier.manager.list_extensions()}]"},{"line_number":806,"context_line":""},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"class _Verification(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_e8d14f24","line":805,"range":{"start_line":803,"start_character":8,"end_line":805,"end_character":67},"updated":"2017-02-08 13:15:14.000000000","message":"same here","commit_id":"ac1a7cb385fcac6c27e0d34da79878728eca225e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"801e53bdb5c210e552017a23764d5b3a9d6da965","unresolved":false,"context_lines":[{"line_number":865,"context_line":"                 \"deployment \u0027%s\u0027 (UUID\u003d%s)!\", verification.uuid,"},{"line_number":866,"context_line":"                 verifier.deployment[\"name\"], verifier.deployment[\"uuid\"])"},{"line_number":867,"context_line":""},{"line_number":868,"context_line":"        return [{\"uuid\": verification.uuid},"},{"line_number":869,"context_line":"                {\"verification_obj\": verification},"},{"line_number":870,"context_line":"                {\"verification_results\": results}]"},{"line_number":871,"context_line":""},{"line_number":872,"context_line":"    @classmethod"},{"line_number":873,"context_line":"    def rerun(cls, verification_uuid, deployment_id\u003dNone, failed\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_a898276b","line":870,"range":{"start_line":868,"start_character":15,"end_line":870,"end_character":50},"updated":"2017-02-08 13:15:14.000000000","message":"1) Let\u0027s add to_dict method to verification class too.\n\n2) the same question about separate dicts in list. It is much readable and useful to return just one dict like {\"verification\": verification.to_dict, \"results\": results}","commit_id":"ac1a7cb385fcac6c27e0d34da79878728eca225e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"801e53bdb5c210e552017a23764d5b3a9d6da965","unresolved":false,"context_lines":[{"line_number":906,"context_line":""},{"line_number":907,"context_line":"        :param verification_uuid: Verification UUID"},{"line_number":908,"context_line":"        \"\"\""},{"line_number":909,"context_line":"        return {"},{"line_number":910,"context_line":"            \"verification_obj\": objects.Verification.get(verification_uuid)}"},{"line_number":911,"context_line":""},{"line_number":912,"context_line":"    @staticmethod"},{"line_number":913,"context_line":"    def list(verifier_id\u003dNone, deployment_id\u003dNone, tags\u003dNone, status\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_48a8a377","line":910,"range":{"start_line":909,"start_character":15,"end_line":910,"end_character":76},"updated":"2017-02-08 13:15:14.000000000","message":"the same comments like for verifiers.\n\n1) two methods _get and get\n2) use to_dict for get","commit_id":"ac1a7cb385fcac6c27e0d34da79878728eca225e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"801e53bdb5c210e552017a23764d5b3a9d6da965","unresolved":false,"context_lines":[{"line_number":918,"context_line":"        :param tags: Tags to filter verifications by"},{"line_number":919,"context_line":"        :param status: Status to filter verifications by"},{"line_number":920,"context_line":"        \"\"\""},{"line_number":921,"context_line":"        return objects.Verification.list(verifier_id,"},{"line_number":922,"context_line":"                                         deployment_id\u003ddeployment_id,"},{"line_number":923,"context_line":"                                         tags\u003dtags, status\u003dstatus)"},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"    @classmethod"},{"line_number":926,"context_line":"    def delete(cls, verification_uuid):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_a8af477b","line":923,"range":{"start_line":921,"start_character":8,"end_line":923,"end_character":66},"updated":"2017-02-08 13:15:14.000000000","message":"the same comment like for verifiers list","commit_id":"ac1a7cb385fcac6c27e0d34da79878728eca225e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"801e53bdb5c210e552017a23764d5b3a9d6da965","unresolved":false,"context_lines":[{"line_number":990,"context_line":""},{"line_number":991,"context_line":"        LOG.info(\"Test results have been successfully imported.\")"},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"        return [{\"uuid\": verification.verifer_uuid},"},{"line_number":994,"context_line":"                {\"verification_obj\": verification},"},{"line_number":995,"context_line":"                {\"results\": results}]"},{"line_number":996,"context_line":""},{"line_number":997,"context_line":""},{"line_number":998,"context_line":"class _DeprecatedAPIClass(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_887febde","line":995,"range":{"start_line":993,"start_character":8,"end_line":995,"end_character":37},"updated":"2017-02-08 13:15:14.000000000","message":"same as for method start","commit_id":"ac1a7cb385fcac6c27e0d34da79878728eca225e"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"ea055d11b862868261e9843d3204a39eee7ef18c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import jinja2"},{"line_number":22,"context_line":"import jinja2.meta"},{"line_number":23,"context_line":"import jsonschema"},{"line_number":24,"context_line":"import json"},{"line_number":25,"context_line":"from oslo_config import cfg"},{"line_number":26,"context_line":"from requests.packages import urllib3"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_0e10cf4d","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":11},"updated":"2017-02-13 09:31:43.000000000","message":"I don\u0027t think we use json model in here.","commit_id":"7a8731dde69073c589e38b92b0f172ab989c7b0d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e0563262d6c46abf4781480ed37387a83b637029","unresolved":false,"context_lines":[{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    @classmethod"},{"line_number":519,"context_line":"    def list(cls, status\u003dNone):"},{"line_number":520,"context_line":"        return cls._list(status).to_dict()"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_143e20b8","line":520,"range":{"start_line":520,"start_character":15,"end_line":520,"end_character":42},"updated":"2017-02-13 17:05:54.000000000","message":"it will raise an error. It should be:\n\n    return [v.to_dict() for v in cls._list(status)]","commit_id":"7a8731dde69073c589e38b92b0f172ab989c7b0d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e0563262d6c46abf4781480ed37387a83b637029","unresolved":false,"context_lines":[{"line_number":649,"context_line":""},{"line_number":650,"context_line":"        LOG.info(\"Verifier %s has been successfully updated!\", verifier)"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        return verifier.uuid"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"    @classmethod"},{"line_number":655,"context_line":"    def update(cls, verifier_id, system_wide\u003dNone, version\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_038def7a","line":652,"range":{"start_line":652,"start_character":8,"end_line":652,"end_character":28},"updated":"2017-02-13 17:05:54.000000000","message":"update method returns string by default. we can transmit raw text without serialization, so let\u0027s do not change anything here (do not need separate method).","commit_id":"7a8731dde69073c589e38b92b0f172ab989c7b0d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e0563262d6c46abf4781480ed37387a83b637029","unresolved":false,"context_lines":[{"line_number":658,"context_line":""},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"    @classmethod"},{"line_number":661,"context_line":"    def _configure(cls, verifier, deployment_id, extra_options\u003dNone,"},{"line_number":662,"context_line":"                  reconfigure\u003dFalse):"},{"line_number":663,"context_line":"        \"\"\"Configure a verifier."},{"line_number":664,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_a373437f","line":661,"range":{"start_line":661,"start_character":7,"end_line":661,"end_character":18},"updated":"2017-02-13 17:05:54.000000000","message":"same here","commit_id":"7a8731dde69073c589e38b92b0f172ab989c7b0d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e0563262d6c46abf4781480ed37387a83b637029","unresolved":false,"context_lines":[{"line_number":905,"context_line":"                 \"deployment \u0027%s\u0027 (UUID\u003d%s)!\", verification.uuid,"},{"line_number":906,"context_line":"                 verifier.deployment[\"name\"], verifier.deployment[\"uuid\"])"},{"line_number":907,"context_line":""},{"line_number":908,"context_line":"        return [{\"uuid\": verification.uuid},"},{"line_number":909,"context_line":"                {\"verification_obj\": verification},"},{"line_number":910,"context_line":"                {\"verification_results\": results}]"},{"line_number":911,"context_line":""},{"line_number":912,"context_line":"    @classmethod"},{"line_number":913,"context_line":"    def rerun(cls, verification_uuid, deployment_id\u003dNone, failed\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_a3d263fe","line":910,"range":{"start_line":908,"start_character":15,"end_line":910,"end_character":50},"updated":"2017-02-13 17:05:54.000000000","message":"1) having separate dictionaries is redundant\n\n2) uuid and results should be included in verification_obj, so there is no reason to transmit 3 objects separately. One verification.to_json should be enough","commit_id":"7a8731dde69073c589e38b92b0f172ab989c7b0d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"68e347ebb09afd05550edbe2cdbca3b0c5a05053","unresolved":false,"context_lines":[{"line_number":744,"context_line":""},{"line_number":745,"context_line":"        return verifier.manager.list_tests(pattern)"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    @classmethod"},{"line_number":748,"context_line":"    def list_tests(cls, verifier_id, pattern\u003d\"\"):"},{"line_number":749,"context_line":"        # list of strings"},{"line_number":750,"context_line":"        return json.dumps(cls._list_tests(verifier_id, pattern))"},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"    @classmethod"},{"line_number":753,"context_line":"    def add_extension(cls, verifier_id, source, version\u003dNone,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa31d9ce_a840c508","line":750,"range":{"start_line":747,"start_character":0,"end_line":750,"end_character":64},"updated":"2017-02-17 10:30:47.000000000","message":"there is no need to dump anything here. It will be done in specific RaaS decorator which will also handle exceptions.","commit_id":"b41432f7adf1d9b3d7c3191c20c05922d7859539"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"68e347ebb09afd05550edbe2cdbca3b0c5a05053","unresolved":false,"context_lines":[{"line_number":894,"context_line":""},{"line_number":895,"context_line":"        return verification, results"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"    @classmethod"},{"line_number":898,"context_line":"    def start(cls, verifier_id, deployment_id, tags\u003dNone, **run_args):"},{"line_number":899,"context_line":"        verification, results \u003d cls._start(verifier_id, deployment_id,"},{"line_number":900,"context_line":"                                           tags, **run_args)"},{"line_number":901,"context_line":"        return (verification.to_dict(), json.dumps({\"totals\": results.totals,"},{"line_number":902,"context_line":"                                                    \"tests\": results.tests}))"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"    @classmethod"},{"line_number":905,"context_line":"    def _rerun(cls, verification_uuid, deployment_id\u003dNone, failed\u003dFalse):"},{"line_number":906,"context_line":"        \"\"\"Rerun tests from a verification."},{"line_number":907,"context_line":""},{"line_number":908,"context_line":"        :param verification_uuid: Verification UUID"},{"line_number":909,"context_line":"        :param deployment_id: Deployment name or UUID"},{"line_number":910,"context_line":"        :param failed: Rerun only failed tests"},{"line_number":911,"context_line":"        \"\"\""},{"line_number":912,"context_line":"        # TODO(ylobankov): Improve this method in the future: put some"},{"line_number":913,"context_line":"        #                  information about re-run in run_args."},{"line_number":914,"context_line":""},{"line_number":915,"context_line":"        verification \u003d cls._get(verification_uuid)"},{"line_number":916,"context_line":"        tests \u003d verification.tests"},{"line_number":917,"context_line":""},{"line_number":918,"context_line":"        if failed:"},{"line_number":919,"context_line":"            tests \u003d [t for t, r in tests.items() if r[\"status\"] \u003d\u003d \"fail\"]"},{"line_number":920,"context_line":"            if not tests:"},{"line_number":921,"context_line":"                raise exceptions.RallyException("},{"line_number":922,"context_line":"                    \"There are no failed tests from verification (UUID\u003d%s).\""},{"line_number":923,"context_line":"                    % verification_uuid)"},{"line_number":924,"context_line":"        else:"},{"line_number":925,"context_line":"            tests \u003d tests.keys()"},{"line_number":926,"context_line":""},{"line_number":927,"context_line":"        deployment \u003d _Deployment.get(deployment_id or"},{"line_number":928,"context_line":"                                     verification.deployment_uuid)"},{"line_number":929,"context_line":"        LOG.info(\"Re-running %stests from verification (UUID\u003d%s) for \""},{"line_number":930,"context_line":"                 \"deployment \u0027%s\u0027 (UUID\u003d%s).\", \"failed \" if failed else \"\","},{"line_number":931,"context_line":"                 verification.uuid, deployment[\"name\"], deployment[\"uuid\"])"},{"line_number":932,"context_line":"        return cls._start(verification.verifier_uuid, deployment[\"uuid\"],"},{"line_number":933,"context_line":"                          load_list\u003dtests)"},{"line_number":934,"context_line":""},{"line_number":935,"context_line":"    @classmethod"},{"line_number":936,"context_line":"    def rerun(cls, verification_uuid, deployment_id\u003dNone, failed\u003dFalse):"},{"line_number":937,"context_line":"        verification, results \u003d cls._rerun(verification_uuid,"},{"line_number":938,"context_line":"                                           deployment_id, failed)"},{"line_number":939,"context_line":"        return (verification.to_dict(), json.dumps({\"totals\": results.totals,"},{"line_number":940,"context_line":"                                                    \"tests\": results.tests}))"},{"line_number":941,"context_line":""},{"line_number":942,"context_line":"    @staticmethod"},{"line_number":943,"context_line":"    def _get(verification_uuid):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa31d9ce_4e5f510e","line":940,"range":{"start_line":897,"start_character":0,"end_line":940,"end_character":77},"updated":"2017-02-17 10:30:47.000000000","message":"`rerun` method should not manipulate with return data from `start` method. It means that it should return the same. Based on that, there is no need to have separate _start and start methods. rerun can call directly start and return the same data.\n\nAlso, rerun is not called by anybody except CLI, so there is no need for separate _rerun","commit_id":"b41432f7adf1d9b3d7c3191c20c05922d7859539"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"68e347ebb09afd05550edbe2cdbca3b0c5a05053","unresolved":false,"context_lines":[{"line_number":1039,"context_line":""},{"line_number":1040,"context_line":"        LOG.info(\"Test results have been successfully imported.\")"},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"        return verification, results"},{"line_number":1043,"context_line":""},{"line_number":1044,"context_line":"    @classmethod"},{"line_number":1045,"context_line":"    def import_results(cls, verifier_id, deployment_id, data, **run_args):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa31d9ce_6ed25536","line":1042,"range":{"start_line":1042,"start_character":8,"end_line":1042,"end_character":36},"updated":"2017-02-17 10:30:47.000000000","message":"it is better to modify return data here.","commit_id":"b41432f7adf1d9b3d7c3191c20c05922d7859539"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"68e347ebb09afd05550edbe2cdbca3b0c5a05053","unresolved":false,"context_lines":[{"line_number":1045,"context_line":"    def import_results(cls, verifier_id, deployment_id, data, **run_args):"},{"line_number":1046,"context_line":"        verification, results \u003d cls._import_results(verifier_id, deployment_id,"},{"line_number":1047,"context_line":"                                                    data, **run_args)"},{"line_number":1048,"context_line":"        return (verification.to_dict(), json.dumps({\"totals\": results.totals,"},{"line_number":1049,"context_line":"                                                    \"tests\": results.tests}))"},{"line_number":1050,"context_line":""},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"class _DeprecatedAPIClass(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa31d9ce_cee18100","line":1049,"range":{"start_line":1048,"start_character":40,"end_line":1049,"end_character":76},"updated":"2017-02-17 10:30:47.000000000","message":"same here about dump","commit_id":"b41432f7adf1d9b3d7c3191c20c05922d7859539"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"eba70d7a0dc92bf10314024c2459e6fd93b381cc","unresolved":false,"context_lines":[{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        return verifier.manager.list_tests(pattern)"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    @classmethod"},{"line_number":747,"context_line":"    def list_tests(cls, verifier_id, pattern\u003d\"\"):"},{"line_number":748,"context_line":"        # list of strings"},{"line_number":749,"context_line":"        return cls._list_tests(verifier_id, pattern)"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"    @classmethod"},{"line_number":752,"context_line":"    def add_extension(cls, verifier_id, source, version\u003dNone,"}],"source_content_type":"text/x-python","patch_set":14,"id":"da36d5c6_6cfadc76","line":749,"range":{"start_line":746,"start_character":4,"end_line":749,"end_character":52},"updated":"2017-02-23 22:56:54.000000000","message":"why we need that separate method? it doing the same as _list_tests","commit_id":"435d5baced9225707a4095c8c1ab32be52f59c63"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"eba70d7a0dc92bf10314024c2459e6fd93b381cc","unresolved":false,"context_lines":[{"line_number":798,"context_line":""},{"line_number":799,"context_line":"        return verifier.manager.list_extensions()"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    @classmethod"},{"line_number":802,"context_line":"    def list_extensions(cls, verifier_id):"},{"line_number":803,"context_line":"        return cls._list_extensions(verifier_id)"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"    @classmethod"},{"line_number":806,"context_line":"    def delete_extension(cls, verifier_id, name):"}],"source_content_type":"text/x-python","patch_set":14,"id":"da36d5c6_4c38b83d","line":803,"range":{"start_line":801,"start_character":4,"end_line":803,"end_character":48},"updated":"2017-02-23 22:56:54.000000000","message":"there is no need to have separate method.","commit_id":"435d5baced9225707a4095c8c1ab32be52f59c63"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"eba70d7a0dc92bf10314024c2459e6fd93b381cc","unresolved":false,"context_lines":[{"line_number":897,"context_line":"    def start(cls, verifier_id, deployment_id, tags\u003dNone, **run_args):"},{"line_number":898,"context_line":"        verification, results \u003d cls._start(verifier_id, deployment_id,"},{"line_number":899,"context_line":"                                           tags, **run_args)"},{"line_number":900,"context_line":"        return (verification.to_dict(),"},{"line_number":901,"context_line":"                {\"totals\": results.totals,"},{"line_number":902,"context_line":"                 \"tests\": results.tests})"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"    @classmethod"},{"line_number":905,"context_line":"    def rerun(cls, verification_uuid, deployment_id\u003dNone, failed\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":14,"id":"da36d5c6_ac75b4fa","line":902,"range":{"start_line":900,"start_character":15,"end_line":902,"end_character":41},"updated":"2017-02-23 22:56:54.000000000","message":"1) I prefer to have a common dict instead of two items in a tuple. {\"verification\": verification.to_dict(), \"totals\": results.totals, \"tests\": results.tests} would be better\n\n2) no need to split _start and start. there is no other method who needs a raw object from _start.","commit_id":"435d5baced9225707a4095c8c1ab32be52f59c63"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"eba70d7a0dc92bf10314024c2459e6fd93b381cc","unresolved":false,"context_lines":[{"line_number":929,"context_line":"        LOG.info(\"Re-running %stests from verification (UUID\u003d%s) for \""},{"line_number":930,"context_line":"                 \"deployment \u0027%s\u0027 (UUID\u003d%s).\", \"failed \" if failed else \"\","},{"line_number":931,"context_line":"                 verification.uuid, deployment[\"name\"], deployment[\"uuid\"])"},{"line_number":932,"context_line":"        verification, results \u003d cls._start(verification.verifier_uuid,"},{"line_number":933,"context_line":"                                           deployment[\"uuid\"], load_list\u003dtests)"},{"line_number":934,"context_line":"        return (verification.to_dict(), {\"totals\": results.totals,"},{"line_number":935,"context_line":"                                         \"tests\": results.tests})"},{"line_number":936,"context_line":""},{"line_number":937,"context_line":"    @staticmethod"},{"line_number":938,"context_line":"    def _get(verification_uuid):"}],"source_content_type":"text/x-python","patch_set":14,"id":"da36d5c6_4c5d1878","line":935,"range":{"start_line":932,"start_character":8,"end_line":935,"end_character":65},"updated":"2017-02-23 22:56:54.000000000","message":"just leave it like it was, it will return data in the right format.","commit_id":"435d5baced9225707a4095c8c1ab32be52f59c63"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"eba70d7a0dc92bf10314024c2459e6fd93b381cc","unresolved":false,"context_lines":[{"line_number":959,"context_line":"                                         deployment_id\u003ddeployment_id,"},{"line_number":960,"context_line":"                                         tags\u003dtags, status\u003dstatus)"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"    @classmethod"},{"line_number":963,"context_line":"    def list(cls, verifier_id\u003dNone, deployment_id\u003dNone, tags\u003dNone,"},{"line_number":964,"context_line":"             status\u003dNone):"},{"line_number":965,"context_line":"        return [item.to_dict() for item in cls._list(verifier_id,"},{"line_number":966,"context_line":"                                                     deployment_id,"},{"line_number":967,"context_line":"                                                     tags, status)]"},{"line_number":968,"context_line":""},{"line_number":969,"context_line":"    @classmethod"},{"line_number":970,"context_line":"    def delete(cls, verification_uuid):"}],"source_content_type":"text/x-python","patch_set":14,"id":"da36d5c6_0ccec02d","line":967,"range":{"start_line":962,"start_character":4,"end_line":967,"end_character":67},"updated":"2017-02-23 22:56:54.000000000","message":"nobody needs a separate method with raw objects of verification results, so one list method should be enough","commit_id":"435d5baced9225707a4095c8c1ab32be52f59c63"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"eba70d7a0dc92bf10314024c2459e6fd93b381cc","unresolved":false,"context_lines":[{"line_number":1036,"context_line":""},{"line_number":1037,"context_line":"        return verification, results"},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"    @classmethod"},{"line_number":1040,"context_line":"    def import_results(cls, verifier_id, deployment_id, data, **run_args):"},{"line_number":1041,"context_line":"        verification, results \u003d cls._import_results(verifier_id, deployment_id,"},{"line_number":1042,"context_line":"                                                    data, **run_args)"},{"line_number":1043,"context_line":"        return (verification.to_dict(), {\"totals\": results.totals,"},{"line_number":1044,"context_line":"                                         \"tests\": results.tests})"},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"class _DeprecatedAPIClass(object):"}],"source_content_type":"text/x-python","patch_set":14,"id":"da36d5c6_acfa1441","line":1044,"range":{"start_line":1039,"start_character":4,"end_line":1044,"end_character":65},"updated":"2017-02-23 22:56:54.000000000","message":"1) let\u0027s return a dict instead of tuple\n\n2) there is no need to have separate _import_results method","commit_id":"435d5baced9225707a4095c8c1ab32be52f59c63"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"63e732a0bfdea03bc955cc3f87da2c0b15502bda","unresolved":false,"context_lines":[{"line_number":523,"context_line":"                      deployment will be deleted"},{"line_number":524,"context_line":"        \"\"\""},{"line_number":525,"context_line":"        verifier \u003d cls._get(verifier_id)"},{"line_number":526,"context_line":"        verifications \u003d _Verification.list(verifier_id, deployment_id)"},{"line_number":527,"context_line":"        if verifications:"},{"line_number":528,"context_line":"            d_msg \u003d ((\" for deployment \u0027%s\u0027\" % deployment_id)"},{"line_number":529,"context_line":"                     if deployment_id else \"\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba2be162_b602b16d","line":526,"range":{"start_line":526,"start_character":38,"end_line":526,"end_character":42},"updated":"2017-03-02 11:51:27.000000000","message":"Let\u0027s create the _list method for verification as well.","commit_id":"3a7c765880472be79888a34278ce32191118c3ce"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b2a8272fef18b022d7b7f9e1ca857e49beaf0193","unresolved":false,"context_lines":[{"line_number":523,"context_line":"                      deployment will be deleted"},{"line_number":524,"context_line":"        \"\"\""},{"line_number":525,"context_line":"        verifier \u003d cls._get(verifier_id)"},{"line_number":526,"context_line":"        verifications \u003d _Verification.list(verifier_id, deployment_id)"},{"line_number":527,"context_line":"        if verifications:"},{"line_number":528,"context_line":"            d_msg \u003d ((\" for deployment \u0027%s\u0027\" % deployment_id)"},{"line_number":529,"context_line":"                     if deployment_id else \"\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba2be162_9836b650","line":526,"range":{"start_line":526,"start_character":38,"end_line":526,"end_character":42},"in_reply_to":"ba2be162_b602b16d","updated":"2017-03-02 12:30:10.000000000","message":"why we need a separate _list method? verification objects from Verification.list is not used, only uuid of it.","commit_id":"3a7c765880472be79888a34278ce32191118c3ce"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"63e732a0bfdea03bc955cc3f87da2c0b15502bda","unresolved":false,"context_lines":[{"line_number":531,"context_line":"                LOG.info(\"Deleting all verifications created by verifier \""},{"line_number":532,"context_line":"                         \"%s%s.\", verifier, d_msg)"},{"line_number":533,"context_line":"                for verification in verifications:"},{"line_number":534,"context_line":"                    _Verification.delete(verification[\"uuid\"])"},{"line_number":535,"context_line":"            else:"},{"line_number":536,"context_line":"                raise exceptions.RallyException("},{"line_number":537,"context_line":"                    \"Failed to delete verifier {0} because there are stored \""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba2be162_762f59f6","line":534,"range":{"start_line":534,"start_character":53,"end_line":534,"end_character":61},"updated":"2017-03-02 11:51:27.000000000","message":"And leave verification.uuid here.","commit_id":"3a7c765880472be79888a34278ce32191118c3ce"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"63e732a0bfdea03bc955cc3f87da2c0b15502bda","unresolved":false,"context_lines":[{"line_number":938,"context_line":"        :param tags: Tags to filter verifications by"},{"line_number":939,"context_line":"        :param status: Status to filter verifications by"},{"line_number":940,"context_line":"        \"\"\""},{"line_number":941,"context_line":"        return [item.to_dict() for item in objects.Verification.list("},{"line_number":942,"context_line":"            verifier_id, deployment_id\u003ddeployment_id,"},{"line_number":943,"context_line":"            tags\u003dtags, status\u003dstatus)]"},{"line_number":944,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba2be162_564b3587","line":941,"range":{"start_line":941,"start_character":43,"end_line":941,"end_character":68},"updated":"2017-03-02 11:51:27.000000000","message":"See the comment above.","commit_id":"3a7c765880472be79888a34278ce32191118c3ce"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"6330a5ad7c1b55d85c52e147d84b5d3980d0c528","unresolved":false,"context_lines":[{"line_number":938,"context_line":"        :param tags: Tags to filter verifications by"},{"line_number":939,"context_line":"        :param status: Status to filter verifications by"},{"line_number":940,"context_line":"        \"\"\""},{"line_number":941,"context_line":"        return [item.to_dict() for item in objects.Verification.list("},{"line_number":942,"context_line":"            verifier_id, deployment_id\u003ddeployment_id,"},{"line_number":943,"context_line":"            tags\u003dtags, status\u003dstatus)]"},{"line_number":944,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba2be162_44843b5d","line":941,"range":{"start_line":941,"start_character":43,"end_line":941,"end_character":68},"in_reply_to":"ba2be162_184ba6ca","updated":"2017-03-02 21:30:41.000000000","message":"It would be good to have this method for consistency and I think it looks better:\n\n\nreturn [item.to_dict() for item in cls._list(...)]","commit_id":"3a7c765880472be79888a34278ce32191118c3ce"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b2a8272fef18b022d7b7f9e1ca857e49beaf0193","unresolved":false,"context_lines":[{"line_number":938,"context_line":"        :param tags: Tags to filter verifications by"},{"line_number":939,"context_line":"        :param status: Status to filter verifications by"},{"line_number":940,"context_line":"        \"\"\""},{"line_number":941,"context_line":"        return [item.to_dict() for item in objects.Verification.list("},{"line_number":942,"context_line":"            verifier_id, deployment_id\u003ddeployment_id,"},{"line_number":943,"context_line":"            tags\u003dtags, status\u003dstatus)]"},{"line_number":944,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba2be162_184ba6ca","line":941,"range":{"start_line":941,"start_character":43,"end_line":941,"end_character":68},"in_reply_to":"ba2be162_564b3587","updated":"2017-03-02 12:30:10.000000000","message":"same here. Let\u0027s create separate _list methods only when we will need it","commit_id":"3a7c765880472be79888a34278ce32191118c3ce"}],"rally/cli/commands/task.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"f2674a2ac23d7e0cd481501f2abbd7e355d5af14","unresolved":false,"context_lines":[{"line_number":478,"context_line":"                    \"hooks\": x[\"data\"].get(\"hooks\", []),"},{"line_number":479,"context_line":"                    \"load_duration\": x[\"data\"][\"load_duration\"],"},{"line_number":480,"context_line":"                    \"full_duration\": x[\"data\"][\"full_duration\"],"},{"line_number":481,"context_line":"                    \"created_at\": x.get(\"created_at\")}"},{"line_number":482,"context_line":"                   # \"created_at\": x.get(\"created_at\").strftime("},{"line_number":483,"context_line":"                   #      \"%Y-%d-%mT%H:%M:%S\")}"},{"line_number":484,"context_line":"        for x in task.get_results()]"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        print(json.dumps(results, sort_keys\u003dFalse, indent\u003d4))"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba2be162_01041c48","line":483,"range":{"start_line":481,"start_character":54,"end_line":483,"end_character":47},"updated":"2017-03-02 10:46:45.000000000","message":"redundant","commit_id":"3a7c765880472be79888a34278ce32191118c3ce"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"63e732a0bfdea03bc955cc3f87da2c0b15502bda","unresolved":false,"context_lines":[{"line_number":481,"context_line":"                    \"created_at\": x.get(\"created_at\")}"},{"line_number":482,"context_line":"                   # \"created_at\": x.get(\"created_at\").strftime("},{"line_number":483,"context_line":"                   #      \"%Y-%d-%mT%H:%M:%S\")}"},{"line_number":484,"context_line":"        for x in task.get_results()]"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        print(json.dumps(results, sort_keys\u003dFalse, indent\u003d4))"},{"line_number":487,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba2be162_890af21f","line":484,"range":{"start_line":484,"start_character":8,"end_line":484,"end_character":35},"updated":"2017-03-02 11:51:27.000000000","message":"Move the loop to there where it was before.","commit_id":"3a7c765880472be79888a34278ce32191118c3ce"}],"rally/cli/commands/verify.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e0563262d6c46abf4781480ed37387a83b637029","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                   help\u003d\"Verifier name or UUID. \" + LIST_VERIFIERS_HINT)"},{"line_number":130,"context_line":"    def use_verifier(self, api, verifier_id):"},{"line_number":131,"context_line":"        \"\"\"Choose a verifier to use for the future operations.\"\"\""},{"line_number":132,"context_line":"        verifier \u003d api.verifier._get(verifier_id)"},{"line_number":133,"context_line":"        fileutils.update_globals_file(envutils.ENV_VERIFIER, verifier.uuid)"},{"line_number":134,"context_line":"        print(_(\"Using verifier \u0027%s\u0027 (UUID\u003d%s) as the default verifier \""},{"line_number":135,"context_line":"                \"for the future operations.\") % (verifier.name, verifier.uuid))"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_23ef5388","line":132,"range":{"start_line":132,"start_character":32,"end_line":132,"end_character":36},"updated":"2017-02-13 17:05:54.000000000","message":"we should not access to _private methods of API. It relates to all changes in that module","commit_id":"7a8731dde69073c589e38b92b0f172ab989c7b0d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e0563262d6c46abf4781480ed37387a83b637029","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    def use_verifier(self, api, verifier_id):"},{"line_number":131,"context_line":"        \"\"\"Choose a verifier to use for the future operations.\"\"\""},{"line_number":132,"context_line":"        verifier \u003d api.verifier._get(verifier_id)"},{"line_number":133,"context_line":"        fileutils.update_globals_file(envutils.ENV_VERIFIER, verifier.uuid)"},{"line_number":134,"context_line":"        print(_(\"Using verifier \u0027%s\u0027 (UUID\u003d%s) as the default verifier \""},{"line_number":135,"context_line":"                \"for the future operations.\") % (verifier.name, verifier.uuid))"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_4399a71e","line":133,"range":{"start_line":133,"start_character":61,"end_line":133,"end_character":74},"updated":"2017-02-13 17:05:54.000000000","message":"after calling public method get, it will changed to verifier[\"uuid\"]","commit_id":"7a8731dde69073c589e38b92b0f172ab989c7b0d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"eba70d7a0dc92bf10314024c2459e6fd93b381cc","unresolved":false,"context_lines":[{"line_number":381,"context_line":"    @plugins.ensure_plugins_are_loaded"},{"line_number":382,"context_line":"    def list_verifier_exts(self, api, verifier_id\u003dNone):"},{"line_number":383,"context_line":"        \"\"\"List all verifier extensions.\"\"\""},{"line_number":384,"context_line":"        verifier_exts \u003d [i for i in"},{"line_number":385,"context_line":"                         api.verifier.list_extensions(verifier_id)]"},{"line_number":386,"context_line":"        if verifier_exts:"},{"line_number":387,"context_line":"            fields \u003d [\"Name\", \"Entry point\"]"},{"line_number":388,"context_line":"            if logging.is_debug():"}],"source_content_type":"text/x-python","patch_set":14,"id":"da36d5c6_2cb46480","line":385,"range":{"start_line":384,"start_character":24,"end_line":385,"end_character":67},"updated":"2017-02-23 22:56:54.000000000","message":"this additional loop does nothing","commit_id":"435d5baced9225707a4095c8c1ab32be52f59c63"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"eba70d7a0dc92bf10314024c2459e6fd93b381cc","unresolved":false,"context_lines":[{"line_number":761,"context_line":""},{"line_number":762,"context_line":"        verification_uuid \u003d verification[\"uuid\"]"},{"line_number":763,"context_line":"        if do_use:"},{"line_number":764,"context_line":"            self.use(api, verification_uuid)"},{"line_number":765,"context_line":"        else:"},{"line_number":766,"context_line":"            print(_(\"Verification UUID: %s.\") % verification_uuid)"}],"source_content_type":"text/x-python","patch_set":14,"id":"da36d5c6_0c516036","line":764,"range":{"start_line":764,"start_character":12,"end_line":764,"end_character":44},"updated":"2017-02-23 22:56:54.000000000","message":"btw, good catch that api object is not transmitted:)","commit_id":"435d5baced9225707a4095c8c1ab32be52f59c63"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"19d4720b457abb201f34ba7611dc23f611c26d16","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                  \"Success\", \"Skipped\", \"Expected failures\","},{"line_number":578,"context_line":"                  \"Unexpected success\", \"Failures\"]"},{"line_number":579,"context_line":"        formatters \u003d {"},{"line_number":580,"context_line":"            \"Started at\": lambda v: v[\"created_at\"].replace(\"T\", \" \"),"},{"line_number":581,"context_line":"            \"Finished at\": lambda v: v[\"updated_at\"].replace(\"T\", \" \"),"},{"line_number":582,"context_line":"            \"Duration\": lambda v: (dt.datetime.strptime(v[\"updated_at\"],"},{"line_number":583,"context_line":"                                                        TIME_FORMAT) -"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba2be162_78ab0d8a","line":580,"range":{"start_line":580,"start_character":52,"end_line":580,"end_character":70},"updated":"2017-03-01 07:20:37.000000000","message":"Why we need this operation?","commit_id":"31255249fce9497c6cf08d885df2aba47a366211"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"63e732a0bfdea03bc955cc3f87da2c0b15502bda","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"ba2be162_c90dca3f","updated":"2017-03-02 11:51:27.000000000","message":"I think we can use the corresponding _get/_list methods instead of get/list and the most changes will not be needed, just replacing get/list with _get/_list.","commit_id":"3a7c765880472be79888a34278ce32191118c3ce"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b2a8272fef18b022d7b7f9e1ca857e49beaf0193","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"ba2be162_78cbc21e","in_reply_to":"ba2be162_c90dca3f","updated":"2017-03-02 12:30:10.000000000","message":"no no no. it is a part of RaaS spec :) CLI code should work for both cases - direct API call and remote. In this case, return data of API should always return serializable objects","commit_id":"3a7c765880472be79888a34278ce32191118c3ce"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"c6ccc06da6618fb232f77265bfad227bb66aa5c1","unresolved":false,"context_lines":[{"line_number":483,"context_line":"            (\"concurrency\", concur)) if value}"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"        try:"},{"line_number":486,"context_line":"            verification, results \u003d api.verification.start("},{"line_number":487,"context_line":"                verifier_id, deployment, tags\u003dtags, **run_args)"},{"line_number":488,"context_line":"            verification_uuid \u003d verification[\"uuid\"]"},{"line_number":489,"context_line":"        except exceptions.DeploymentNotFinishedStatus as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba2be162_d83bc736","line":486,"range":{"start_line":486,"start_character":12,"end_line":486,"end_character":33},"updated":"2017-03-02 14:04:52.000000000","message":"Now it is one object. Let name it results","commit_id":"8914252cb96f16d1ff46e67c4a18f468d86ce422"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"c6ccc06da6618fb232f77265bfad227bb66aa5c1","unresolved":false,"context_lines":[{"line_number":485,"context_line":"        try:"},{"line_number":486,"context_line":"            verification, results \u003d api.verification.start("},{"line_number":487,"context_line":"                verifier_id, deployment, tags\u003dtags, **run_args)"},{"line_number":488,"context_line":"            verification_uuid \u003d verification[\"uuid\"]"},{"line_number":489,"context_line":"        except exceptions.DeploymentNotFinishedStatus as e:"},{"line_number":490,"context_line":"            print(_(\"Cannot start a verefication on \""},{"line_number":491,"context_line":"                    \"unfinished deployment: %s\") % e)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba2be162_d822e700","line":488,"range":{"start_line":488,"start_character":32,"end_line":488,"end_character":52},"updated":"2017-03-02 14:04:52.000000000","message":"results[\"verification\"][\"uuid\"]","commit_id":"8914252cb96f16d1ff46e67c4a18f468d86ce422"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"c6ccc06da6618fb232f77265bfad227bb66aa5c1","unresolved":false,"context_lines":[{"line_number":533,"context_line":"    def rerun(self, api, verification_uuid\u003dNone, deployment\u003dNone,"},{"line_number":534,"context_line":"              failed\u003dFalse):"},{"line_number":535,"context_line":"        \"\"\"Rerun tests from a verification for a specific deployment.\"\"\""},{"line_number":536,"context_line":"        verification, results \u003d api.verification.rerun(verification_uuid,"},{"line_number":537,"context_line":"                                                       deployment, failed)"},{"line_number":538,"context_line":"        self._print_totals(results[\"totals\"])"},{"line_number":539,"context_line":"        print(_(\"Verification UUID: %s.\") % verification[\"uuid\"])"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba2be162_387a23f2","line":536,"range":{"start_line":536,"start_character":8,"end_line":536,"end_character":29},"updated":"2017-03-02 14:04:52.000000000","message":"same here","commit_id":"8914252cb96f16d1ff46e67c4a18f468d86ce422"}],"rally/common/db/sqlalchemy/models.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"f2674a2ac23d7e0cd481501f2abbd7e355d5af14","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    created_at \u003d sa.Column(sa.DateTime, default\u003dlambda: timeutils.utcnow())"},{"line_number":44,"context_line":"    updated_at \u003d sa.Column(sa.DateTime, default\u003dlambda: timeutils.utcnow(),"},{"line_number":45,"context_line":"                           onupdate\u003dlambda: timeutils.utcnow())"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @property"},{"line_number":48,"context_line":"    def created_at_str(self):"},{"line_number":49,"context_line":"        return self.created_at.strftime(TIME_FORMAT)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @property"},{"line_number":52,"context_line":"    def updated_at_str(self):"},{"line_number":53,"context_line":"        return self.updated_at.strftime(TIME_FORMAT)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def save(self, session\u003dNone):"},{"line_number":56,"context_line":"        # NOTE(LimingWu): We can\u0027t direct import the api module. That will"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba2be162_a13510f8","line":53,"range":{"start_line":46,"start_character":0,"end_line":53,"end_character":52},"updated":"2017-03-02 10:46:45.000000000","message":"as we discussed privately, it doesn\u0027t work, so looks redundant","commit_id":"3a7c765880472be79888a34278ce32191118c3ce"}],"rally/common/objects/verification.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"68e347ebb09afd05550edbe2cdbca3b0c5a05053","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        for field in formatters:"},{"line_number":53,"context_line":"            json_data[field] \u003d self._db_entry.get(field, \"\").strftime("},{"line_number":54,"context_line":"                self.TIME_FORMAT)"},{"line_number":55,"context_line":"        return json.dumps(json_data)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @classmethod"},{"line_number":58,"context_line":"    def create(cls, verifier_id, deployment_id, tags\u003dNone, run_args\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa31d9ce_6efed506","line":55,"range":{"start_line":55,"start_character":15,"end_line":55,"end_character":36},"updated":"2017-02-17 10:30:47.000000000","message":"see my comment at API about dumping","commit_id":"b41432f7adf1d9b3d7c3191c20c05922d7859539"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"19d4720b457abb201f34ba7611dc23f611c26d16","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from rally import consts"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"TIME_FORMAT_ISO8601 \u003d \"%Y-%m-%dT%H:%M:%S%z\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class Verification(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba2be162_181e91ba","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":43},"updated":"2017-03-01 07:20:37.000000000","message":"I see it in almost files in your patch. Can we put it in consts.py. @Andrey, How do you think about it? ps: I think we need a tool function to deal datetime in utils.py.","commit_id":"31255249fce9497c6cf08d885df2aba47a366211"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"63e732a0bfdea03bc955cc3f87da2c0b15502bda","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from rally import consts"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"TIME_FORMAT_ISO8601 \u003d \"%Y-%m-%dT%H:%M:%S%z\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class Verification(object):"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba2be162_671325b9","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":43},"updated":"2017-03-02 11:51:27.000000000","message":"I am not sure that we need it here.","commit_id":"3a7c765880472be79888a34278ce32191118c3ce"}],"rally/common/objects/verifier.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e0563262d6c46abf4781480ed37387a83b637029","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        json_data \u003d []"},{"line_number":51,"context_line":"        formatters \u003d [\"created_at\", \"updated_at\"]"},{"line_number":52,"context_line":"        # not sure what all fields are described"},{"line_number":53,"context_line":"        fields \u003d [\"status\", \"system_wide\", \"uuid\", \"type\","},{"line_number":54,"context_line":"                  \"created_at\", \"namespace\", \"updated_at\","},{"line_number":55,"context_line":"                  \"name\", \"source\", \"version\", \"extra_settings\","},{"line_number":56,"context_line":"                  \"id\", \"description\"]"},{"line_number":57,"context_line":"        objs \u003d self._db_entry"},{"line_number":58,"context_line":"        for obj in objs:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_66423912","line":55,"range":{"start_line":53,"start_character":8,"end_line":55,"end_character":64},"updated":"2017-02-13 17:05:54.000000000","message":"it looks like you guess all fields ;)\n\nPS: list of fields can be found here - https://github.com/openstack/rally/blob/master/rally/common/db/sqlalchemy/models.py#L366-L390 + \"created_at\" and \"updated_at\" from parent class","commit_id":"7a8731dde69073c589e38b92b0f172ab989c7b0d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e0563262d6c46abf4781480ed37387a83b637029","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        return \"\u0027%s\u0027 (UUID\u003d%s)\" % (self.name, self.uuid)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def to_dict(self, item\u003dNone):"},{"line_number":50,"context_line":"        json_data \u003d []"},{"line_number":51,"context_line":"        formatters \u003d [\"created_at\", \"updated_at\"]"},{"line_number":52,"context_line":"        # not sure what all fields are described"},{"line_number":53,"context_line":"        fields \u003d [\"status\", \"system_wide\", \"uuid\", \"type\","},{"line_number":54,"context_line":"                  \"created_at\", \"namespace\", \"updated_at\","},{"line_number":55,"context_line":"                  \"name\", \"source\", \"version\", \"extra_settings\","},{"line_number":56,"context_line":"                  \"id\", \"description\"]"},{"line_number":57,"context_line":"        objs \u003d self._db_entry"},{"line_number":58,"context_line":"        for obj in objs:"},{"line_number":59,"context_line":"            if isinstance(obj, Verifier):"},{"line_number":60,"context_line":"                data \u003d {}"},{"line_number":61,"context_line":"                for field in fields:"},{"line_number":62,"context_line":"                    if field in formatters:"},{"line_number":63,"context_line":"                        data[field] \u003d getattr(obj, field, \"\").strftime(self.TIME_FORMAT)"},{"line_number":64,"context_line":"                    else:"},{"line_number":65,"context_line":"                        data[field] \u003d getattr(obj, field, \"\")"},{"line_number":66,"context_line":"                # json.dumps(obj)  generates exception"},{"line_number":67,"context_line":"                json_data.append({\"%s\" % (obj): data})"},{"line_number":68,"context_line":"            else:"},{"line_number":69,"context_line":"                if obj in formatters:"},{"line_number":70,"context_line":"                    json_data.append({obj: objs[obj].strftime(self.TIME_FORMAT)})"},{"line_number":71,"context_line":"                else:"},{"line_number":72,"context_line":"                    json_data.append({obj: objs[obj]})"},{"line_number":73,"context_line":"        print json.dumps(json_data)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @classmethod"},{"line_number":76,"context_line":"    def create(cls, name, vtype, namespace, source, version, system_wide,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_a6b0b144","line":73,"range":{"start_line":50,"start_character":8,"end_line":73,"end_character":35},"updated":"2017-02-13 17:05:54.000000000","message":"it can be simplified:\n\n   def to_dict(self):\n       return {\"id\": self._db_entry[\"id\"],\n               \"uuid\": self._db_entry[\"uuid\"],\n               \"created_at\": self._db_entry[\"created_at\"].strftime(self.TIME_FORMAT), ...}","commit_id":"7a8731dde69073c589e38b92b0f172ab989c7b0d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e0563262d6c46abf4781480ed37387a83b637029","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    def get(cls, verifier_id):"},{"line_number":86,"context_line":"        return cls(db.verifier_get(verifier_id))"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @classmethod"},{"line_number":89,"context_line":"    def list(cls, status\u003dNone):"},{"line_number":90,"context_line":"        return cls([cls(db_entry) for db_entry in db.verifier_list(status)])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @staticmethod"},{"line_number":93,"context_line":"    def delete(verifier_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_434e0797","line":90,"range":{"start_line":88,"start_character":4,"end_line":90,"end_character":76},"updated":"2017-02-13 17:05:54.000000000","message":"please, avoid that. Verifier obj should represent only one verifier.","commit_id":"7a8731dde69073c589e38b92b0f172ab989c7b0d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"68e347ebb09afd05550edbe2cdbca3b0c5a05053","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        for field in formatters:"},{"line_number":58,"context_line":"            json_data[field] \u003d self._db_entry.get(field, \"\").strftime("},{"line_number":59,"context_line":"                self.TIME_FORMAT)"},{"line_number":60,"context_line":"        return json.dumps(json_data)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @classmethod"},{"line_number":63,"context_line":"    def create(cls, name, vtype, namespace, source, version, system_wide,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa31d9ce_ae08cd29","line":60,"range":{"start_line":60,"start_character":15,"end_line":60,"end_character":36},"updated":"2017-02-17 10:30:47.000000000","message":"same here","commit_id":"b41432f7adf1d9b3d7c3191c20c05922d7859539"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"eba70d7a0dc92bf10314024c2459e6fd93b381cc","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def to_dict(self, item\u003dNone):"},{"line_number":48,"context_line":"        data \u003d {}"},{"line_number":49,"context_line":"        formatters \u003d [\"created_at\", \"updated_at\"]"},{"line_number":50,"context_line":"        fields \u003d [\"status\", \"system_wide\", \"uuid\", \"type\", \"namespace\","},{"line_number":51,"context_line":"                  \"name\", \"source\", \"version\", \"extra_settings\","},{"line_number":52,"context_line":"                  \"id\", \"description\"]"}],"source_content_type":"text/x-python","patch_set":14,"id":"da36d5c6_ef75de97","line":49,"range":{"start_line":49,"start_character":8,"end_line":49,"end_character":49},"updated":"2017-02-23 22:56:54.000000000","message":"it looks like a duplication, let\u0027s make it in more generic way.\n\nlet\u0027s add to https://github.com/openstack/rally/blob/master/rally/common/db/sqlalchemy/models.py#L40 :\n\n    @property\n    def created_at_str(self):\n        return self.created_at.strftime(TIME_FORMAT)\n\n    @property\n    def updated_at_str(self):\n        return self.updated_at.strftime(TIME_FORMAT)","commit_id":"435d5baced9225707a4095c8c1ab32be52f59c63"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"63e732a0bfdea03bc955cc3f87da2c0b15502bda","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from rally.verification import manager"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"TIME_FORMAT_ISO8601 \u003d \"%Y-%m-%dT%H:%M:%S%z\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Verifier(object):"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba2be162_07f50982","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":43},"updated":"2017-03-02 11:51:27.000000000","message":"I am not sure that we need it here.","commit_id":"3a7c765880472be79888a34278ce32191118c3ce"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b2a8272fef18b022d7b7f9e1ca857e49beaf0193","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from rally.verification import manager"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"TIME_FORMAT_ISO8601 \u003d \"%Y-%m-%dT%H:%M:%S%z\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Verifier(object):"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba2be162_38e22aa0","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":43},"in_reply_to":"ba2be162_07f50982","updated":"2017-03-02 12:30:10.000000000","message":"Actually, let\u0027s move that variable to rally.consts and reuse it everywhere","commit_id":"3a7c765880472be79888a34278ce32191118c3ce"}],"rally/consts.py":[{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"42ebe87119e4d5503f82df415080280c0d13ae0b","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    CRASHED \u003d \"crashed\""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"class _TimeFormats(utils.ImmutableMixin, utils.EnumMixin):"},{"line_number":218,"context_line":"    \"\"\"International time formats\"\"\""},{"line_number":219,"context_line":"    TIME_FORMAT_ISO8601 \u003d \"%Y-%m-%dT%H:%M:%S%z\""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"TaskStatus \u003d _TaskStatus()"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a1ced50_8a1a3916","line":219,"range":{"start_line":217,"start_character":0,"end_line":219,"end_character":47},"updated":"2017-03-17 06:54:26.000000000","message":"Can you extract those codes in another independent patch? I need them too.","commit_id":"24d6eebe64ea3df8fd557159fc52cdbf54705124"}]}
