)]}'
{"rally/plugins/common/validators.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b0d67bce44b985a2e916efb7031cf76ac471f561","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                return self.fail(msg)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"@validation.configure(name\u003d\"image_exists\")"},{"line_number":78,"context_line":"class ImageExistsValidator(validation.Validator):"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def validator(self, config, clients, deployment, param_name, nullable\u003dFalse):"},{"line_number":81,"context_line":"        \"\"\"Returns validator for image_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfeb2761_3e662953","line":78,"range":{"start_line":77,"start_character":0,"end_line":78,"end_character":49},"updated":"2017-04-03 17:10:37.000000000","message":"please, put it under rally/plugins/openstack module","commit_id":"2d2806bf92de515eca29c9b2c7b7fe30f0a2f977"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e8a76cd5b9adfdd8a35c9808e95e85f4fdff7293","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import inspect"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import jsonschema"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from rally.common import validation"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_c03858ef","side":"PARENT","line":18,"range":{"start_line":16,"start_character":0,"end_line":18,"end_character":17},"updated":"2017-04-04 14:11:13.000000000","message":"this change should not pass pep8 check, since inspect is builting library and jsonschema is not","commit_id":"ae414bf1d03256eaf43fdff5820660fb9c94fc7f"}],"rally/plugins/openstack/validators.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e8a76cd5b9adfdd8a35c9808e95e85f4fdff7293","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"ValidationResult \u003d validation.ValidationResult"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"@validation.configure(name\u003d\"image_exists\")"},{"line_number":32,"context_line":"class ImageExistsValidator(validation.Validator):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def validate(self, config, clients, deployment, param_name,"},{"line_number":35,"context_line":"                 nullable\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_a02af428","line":32,"range":{"start_line":31,"start_character":0,"end_line":32,"end_character":49},"updated":"2017-04-04 14:11:13.000000000","message":"validators now support validators :) lol . OpenStack validators should be marked in the following way:\n\n    @validation.add(\"platfrom_validator\", users\u003dTrue)\n    @validation.configure(name\u003d\"image_exists\", namespace\u003d\"openstack\")\n    class ImageExistsValidator(validation.Validator):\n         pass","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"},{"author":{"_account_id":23094,"name":"Staroverov Anton","email":"avstaroverov@gmail.com","username":"astaroverov"},"change_message_id":"bb2b3c857f7197f94f0547bfeb8ddcd66a8c2774","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"ValidationResult \u003d validation.ValidationResult"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"@validation.configure(name\u003d\"image_exists\")"},{"line_number":32,"context_line":"class ImageExistsValidator(validation.Validator):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def validate(self, config, clients, deployment, param_name,"},{"line_number":35,"context_line":"                 nullable\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_023f44b4","line":32,"range":{"start_line":31,"start_character":0,"end_line":32,"end_character":49},"in_reply_to":"dfeb2761_a02af428","updated":"2017-04-05 11:07:51.000000000","message":"Done","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e8a76cd5b9adfdd8a35c9808e95e85f4fdff7293","unresolved":false,"context_lines":[{"line_number":31,"context_line":"@validation.configure(name\u003d\"image_exists\")"},{"line_number":32,"context_line":"class ImageExistsValidator(validation.Validator):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def validate(self, config, clients, deployment, param_name,"},{"line_number":35,"context_line":"                 nullable\u003dFalse):"},{"line_number":36,"context_line":"        \"\"\"Returns validator for image_id"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        :param param_name: defines which variable should be used"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_e0e35cd8","line":35,"range":{"start_line":34,"start_character":3,"end_line":35,"end_character":33},"updated":"2017-04-04 14:11:13.000000000","message":"The spec of arguments is changed, see https://github.com/openstack/rally/blob/master/rally/common/validation.py#L32\n\nUser client should be obtained like:\n\n     credentials[\"openstack\"][\"users\"].get_clients()","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"},{"author":{"_account_id":23094,"name":"Staroverov Anton","email":"avstaroverov@gmail.com","username":"astaroverov"},"change_message_id":"bb2b3c857f7197f94f0547bfeb8ddcd66a8c2774","unresolved":false,"context_lines":[{"line_number":31,"context_line":"@validation.configure(name\u003d\"image_exists\")"},{"line_number":32,"context_line":"class ImageExistsValidator(validation.Validator):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def validate(self, config, clients, deployment, param_name,"},{"line_number":35,"context_line":"                 nullable\u003dFalse):"},{"line_number":36,"context_line":"        \"\"\"Returns validator for image_id"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        :param param_name: defines which variable should be used"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_a27ad8ed","line":35,"range":{"start_line":34,"start_character":3,"end_line":35,"end_character":33},"in_reply_to":"dfeb2761_e0e35cd8","updated":"2017-04-05 11:07:51.000000000","message":"Done","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e8a76cd5b9adfdd8a35c9808e95e85f4fdff7293","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        image_value \u003d config.get(\"args\", {}).get(param_name)"},{"line_number":44,"context_line":"        if not image_value and nullable:"},{"line_number":45,"context_line":"            return ValidationResult(True)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        image_context \u003d config.get(\"context\", {}).get(\"images\", {})"},{"line_number":48,"context_line":"        image_args \u003d config.get(\"args\", {}).get(param_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_001640a9","line":45,"range":{"start_line":45,"start_character":13,"end_line":45,"end_character":41},"updated":"2017-04-04 14:11:13.000000000","message":"there is no need to `return ValidationResults(True)`. Validators are successful by default. To stop checking, you can execute just `return`","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"},{"author":{"_account_id":23094,"name":"Staroverov Anton","email":"avstaroverov@gmail.com","username":"astaroverov"},"change_message_id":"bb2b3c857f7197f94f0547bfeb8ddcd66a8c2774","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        image_value \u003d config.get(\"args\", {}).get(param_name)"},{"line_number":44,"context_line":"        if not image_value and nullable:"},{"line_number":45,"context_line":"            return ValidationResult(True)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        image_context \u003d config.get(\"context\", {}).get(\"images\", {})"},{"line_number":48,"context_line":"        image_args \u003d config.get(\"args\", {}).get(param_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_0c6f76fc","line":45,"range":{"start_line":45,"start_character":13,"end_line":45,"end_character":41},"in_reply_to":"dfeb2761_001640a9","updated":"2017-04-05 11:07:51.000000000","message":"Done","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e8a76cd5b9adfdd8a35c9808e95e85f4fdff7293","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                match \u003d re.match(image_args.get(\"regex\"), image_ctx_name)"},{"line_number":60,"context_line":"            if image_ctx_name \u003d\u003d image_args.get(\"name\") or ("},{"line_number":61,"context_line":"                    \"regex\" in image_args and match):"},{"line_number":62,"context_line":"                image \u003d {"},{"line_number":63,"context_line":"                    \"size\": image_context.get(\"min_disk\", 0),"},{"line_number":64,"context_line":"                    \"min_ram\": image_context.get(\"min_ram\", 0),"},{"line_number":65,"context_line":"                    \"min_disk\": image_context.get(\"min_disk\", 0)"},{"line_number":66,"context_line":"                }"},{"line_number":67,"context_line":"                return (ValidationResult(True), image)"},{"line_number":68,"context_line":"        try:"},{"line_number":69,"context_line":"            image_id \u003d openstack_types.GlanceImage.transform("}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_e09b5c15","line":66,"range":{"start_line":62,"start_character":16,"end_line":66,"end_character":17},"updated":"2017-04-04 14:11:13.000000000","message":"it is redundant for that validator. It is used nowhere.","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"},{"author":{"_account_id":23094,"name":"Staroverov Anton","email":"avstaroverov@gmail.com","username":"astaroverov"},"change_message_id":"bb2b3c857f7197f94f0547bfeb8ddcd66a8c2774","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                match \u003d re.match(image_args.get(\"regex\"), image_ctx_name)"},{"line_number":60,"context_line":"            if image_ctx_name \u003d\u003d image_args.get(\"name\") or ("},{"line_number":61,"context_line":"                    \"regex\" in image_args and match):"},{"line_number":62,"context_line":"                image \u003d {"},{"line_number":63,"context_line":"                    \"size\": image_context.get(\"min_disk\", 0),"},{"line_number":64,"context_line":"                    \"min_ram\": image_context.get(\"min_ram\", 0),"},{"line_number":65,"context_line":"                    \"min_disk\": image_context.get(\"min_disk\", 0)"},{"line_number":66,"context_line":"                }"},{"line_number":67,"context_line":"                return (ValidationResult(True), image)"},{"line_number":68,"context_line":"        try:"},{"line_number":69,"context_line":"            image_id \u003d openstack_types.GlanceImage.transform("}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_ef41e43a","line":66,"range":{"start_line":62,"start_character":16,"end_line":66,"end_character":17},"in_reply_to":"dfeb2761_e09b5c15","updated":"2017-04-05 11:07:51.000000000","message":"Done","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e8a76cd5b9adfdd8a35c9808e95e85f4fdff7293","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                    \"min_ram\": image_context.get(\"min_ram\", 0),"},{"line_number":65,"context_line":"                    \"min_disk\": image_context.get(\"min_disk\", 0)"},{"line_number":66,"context_line":"                }"},{"line_number":67,"context_line":"                return (ValidationResult(True), image)"},{"line_number":68,"context_line":"        try:"},{"line_number":69,"context_line":"            image_id \u003d openstack_types.GlanceImage.transform("},{"line_number":70,"context_line":"                clients\u003dclients, resource_config\u003dimage_args)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_a0a1d448","line":67,"range":{"start_line":67,"start_character":16,"end_line":67,"end_character":54},"updated":"2017-04-04 14:11:13.000000000","message":"again, just return","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"},{"author":{"_account_id":23094,"name":"Staroverov Anton","email":"avstaroverov@gmail.com","username":"astaroverov"},"change_message_id":"bb2b3c857f7197f94f0547bfeb8ddcd66a8c2774","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                    \"min_ram\": image_context.get(\"min_ram\", 0),"},{"line_number":65,"context_line":"                    \"min_disk\": image_context.get(\"min_disk\", 0)"},{"line_number":66,"context_line":"                }"},{"line_number":67,"context_line":"                return (ValidationResult(True), image)"},{"line_number":68,"context_line":"        try:"},{"line_number":69,"context_line":"            image_id \u003d openstack_types.GlanceImage.transform("},{"line_number":70,"context_line":"                clients\u003dclients, resource_config\u003dimage_args)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_cf3e20b7","line":67,"range":{"start_line":67,"start_character":16,"end_line":67,"end_character":54},"in_reply_to":"dfeb2761_a0a1d448","updated":"2017-04-05 11:07:51.000000000","message":"Done","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e8a76cd5b9adfdd8a35c9808e95e85f4fdff7293","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            image_id \u003d openstack_types.GlanceImage.transform("},{"line_number":70,"context_line":"                clients\u003dclients, resource_config\u003dimage_args)"},{"line_number":71,"context_line":"            image \u003d clients.glance().images.get(image_id)"},{"line_number":72,"context_line":"            if hasattr(image, \"to_dict\"):"},{"line_number":73,"context_line":"                # NOTE(stpierre): Glance v1 images are objects that can be"},{"line_number":74,"context_line":"                # converted to dicts; Glance v2 images are already"},{"line_number":75,"context_line":"                # dict-like"},{"line_number":76,"context_line":"                image \u003d image.to_dict()"},{"line_number":77,"context_line":"            if not image.get(\"size\"):"},{"line_number":78,"context_line":"                image[\"size\"] \u003d 0"},{"line_number":79,"context_line":"            if not image.get(\"min_ram\"):"},{"line_number":80,"context_line":"                image[\"min_ram\"] \u003d 0"},{"line_number":81,"context_line":"            if not image.get(\"min_disk\"):"},{"line_number":82,"context_line":"                image[\"min_disk\"] \u003d 0"},{"line_number":83,"context_line":"            return (ValidationResult(True), image)"},{"line_number":84,"context_line":"        except (glance_exc.HTTPNotFound, exceptions.InvalidScenarioArgument):"},{"line_number":85,"context_line":"            message \u003d _(\"Image \u0027%s\u0027 not found\") % image_args"},{"line_number":86,"context_line":"            return (ValidationResult(False, message), None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_807810c4","line":83,"range":{"start_line":72,"start_character":12,"end_line":83,"end_character":50},"updated":"2017-04-04 14:11:13.000000000","message":"it is redundant","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"},{"author":{"_account_id":23094,"name":"Staroverov Anton","email":"avstaroverov@gmail.com","username":"astaroverov"},"change_message_id":"bb2b3c857f7197f94f0547bfeb8ddcd66a8c2774","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            image_id \u003d openstack_types.GlanceImage.transform("},{"line_number":70,"context_line":"                clients\u003dclients, resource_config\u003dimage_args)"},{"line_number":71,"context_line":"            image \u003d clients.glance().images.get(image_id)"},{"line_number":72,"context_line":"            if hasattr(image, \"to_dict\"):"},{"line_number":73,"context_line":"                # NOTE(stpierre): Glance v1 images are objects that can be"},{"line_number":74,"context_line":"                # converted to dicts; Glance v2 images are already"},{"line_number":75,"context_line":"                # dict-like"},{"line_number":76,"context_line":"                image \u003d image.to_dict()"},{"line_number":77,"context_line":"            if not image.get(\"size\"):"},{"line_number":78,"context_line":"                image[\"size\"] \u003d 0"},{"line_number":79,"context_line":"            if not image.get(\"min_ram\"):"},{"line_number":80,"context_line":"                image[\"min_ram\"] \u003d 0"},{"line_number":81,"context_line":"            if not image.get(\"min_disk\"):"},{"line_number":82,"context_line":"                image[\"min_disk\"] \u003d 0"},{"line_number":83,"context_line":"            return (ValidationResult(True), image)"},{"line_number":84,"context_line":"        except (glance_exc.HTTPNotFound, exceptions.InvalidScenarioArgument):"},{"line_number":85,"context_line":"            message \u003d _(\"Image \u0027%s\u0027 not found\") % image_args"},{"line_number":86,"context_line":"            return (ValidationResult(False, message), None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_8f449848","line":83,"range":{"start_line":72,"start_character":12,"end_line":83,"end_character":50},"in_reply_to":"dfeb2761_807810c4","updated":"2017-04-05 11:07:51.000000000","message":"Done","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e8a76cd5b9adfdd8a35c9808e95e85f4fdff7293","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            return (ValidationResult(True), image)"},{"line_number":84,"context_line":"        except (glance_exc.HTTPNotFound, exceptions.InvalidScenarioArgument):"},{"line_number":85,"context_line":"            message \u003d _(\"Image \u0027%s\u0027 not found\") % image_args"},{"line_number":86,"context_line":"            return (ValidationResult(False, message), None)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"@validation.configure(name\u003d\"image_valid_on_flavor\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_407e88af","line":86,"range":{"start_line":86,"start_character":11,"end_line":86,"end_character":59},"updated":"2017-04-04 14:11:13.000000000","message":"call self.fail(message) instead","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"},{"author":{"_account_id":23094,"name":"Staroverov Anton","email":"avstaroverov@gmail.com","username":"astaroverov"},"change_message_id":"bb2b3c857f7197f94f0547bfeb8ddcd66a8c2774","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            return (ValidationResult(True), image)"},{"line_number":84,"context_line":"        except (glance_exc.HTTPNotFound, exceptions.InvalidScenarioArgument):"},{"line_number":85,"context_line":"            message \u003d _(\"Image \u0027%s\u0027 not found\") % image_args"},{"line_number":86,"context_line":"            return (ValidationResult(False, message), None)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"@validation.configure(name\u003d\"image_valid_on_flavor\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_efcc446b","line":86,"range":{"start_line":86,"start_character":11,"end_line":86,"end_character":59},"in_reply_to":"dfeb2761_407e88af","updated":"2017-04-05 11:07:51.000000000","message":"Done","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"}],"rally/task/validation.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e8a76cd5b9adfdd8a35c9808e95e85f4fdff7293","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from rally.common.i18n import _"},{"line_number":26,"context_line":"from rally.common import logging"},{"line_number":27,"context_line":"from rally.common import validation"},{"line_number":28,"context_line":"from rally.common import yamlutils as yaml"},{"line_number":29,"context_line":"from rally import consts"},{"line_number":30,"context_line":"from rally import exceptions"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfeb2761_cb06391d","line":27,"updated":"2017-04-04 14:11:13.000000000","message":"there are no reasons to make these changes","commit_id":"fc8aff74e3064b5efa862576a6df32c09743b03e"}]}
