)]}'
{"zun/common/exception.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"4da99b82e2aeb7a1e55e337ff3fff98daf1cf5b4","unresolved":false,"context_lines":[{"line_number":269,"context_line":""},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"class SchemaValidationError(ValidationError):"},{"line_number":272,"context_line":"    message \u003d _(\"%(detail)s\")"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"class InvalidUUID(Invalid):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_cb757d64","line":272,"range":{"start_line":272,"start_character":14,"end_line":272,"end_character":29},"updated":"2016-12-15 22:10:09.000000000","message":"nit: just %(detail) is enough since there is nothing to translate here.","commit_id":"34f62ab3f2f5c60be88aad7313721dfa9596a713"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"c32554fa77b44c8dee4e16f1c30e32397aed961e","unresolved":false,"context_lines":[{"line_number":269,"context_line":""},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"class SchemaValidationError(ValidationError):"},{"line_number":272,"context_line":"    message \u003d _(\"%(detail)s\")"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"class InvalidUUID(Invalid):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_0a7be628","line":272,"range":{"start_line":272,"start_character":14,"end_line":272,"end_character":29},"in_reply_to":"1a6eadb0_cb757d64","updated":"2016-12-16 04:16:27.000000000","message":"Done","commit_id":"34f62ab3f2f5c60be88aad7313721dfa9596a713"}],"zun/common/validation/parameter_types.py":[{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"48586a2ad0692961202950f5554b9700fcdc4393","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"memory \u003d {"},{"line_number":48,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027integer\u0027],"},{"line_number":49,"context_line":"    \u0027pattern\u0027: \u0027^[0-9]+[k|K|m|M|g|G]?$\u0027, \u0027minimum\u0027: 4194304"},{"line_number":50,"context_line":"}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"workdir \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6eadb0_adb5ac7e","line":49,"range":{"start_line":49,"start_character":41,"end_line":49,"end_character":59},"updated":"2016-12-16 05:23:01.000000000","message":"Can you put this to new line for better readability?","commit_id":"5f1fd297caac641831d2e823e90db8f631152380"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"55bbb4239f223ccb58dcd240dc08c96fdf89ab03","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"memory \u003d {"},{"line_number":48,"context_line":"    \u0027type\u0027: [\u0027string\u0027, \u0027integer\u0027],"},{"line_number":49,"context_line":"    \u0027pattern\u0027: \u0027^[0-9]+[k|K|m|M|g|G]?$\u0027, \u0027minimum\u0027: 4194304"},{"line_number":50,"context_line":"}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"workdir \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6eadb0_48c4063f","line":49,"range":{"start_line":49,"start_character":41,"end_line":49,"end_character":59},"in_reply_to":"1a6eadb0_adb5ac7e","updated":"2016-12-16 05:52:49.000000000","message":"Done","commit_id":"5f1fd297caac641831d2e823e90db8f631152380"}],"zun/common/validation/validators.py":[{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"4e58493827144430ff120d5a588844af11a6b556","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class SchemaValidator(object):"},{"line_number":20,"context_line":"    \"\"\"Resource reference validator class.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    validator \u003d None"},{"line_number":23,"context_line":"    validator_org \u003d jsonschema.Draft4Validator"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self, schema):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_237b6d29","line":22,"updated":"2016-12-16 06:44:12.000000000","message":"Why do you want to use these variables outside the __init__ method? Then you see to access them via self.","commit_id":"ca4ed878ef8a7736f1cd6b081fee70904a205d59"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"70ec7e35dbcedc0f66ad011a364b8f37dd5a0340","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class SchemaValidator(object):"},{"line_number":20,"context_line":"    \"\"\"Resource reference validator class.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    validator \u003d None"},{"line_number":23,"context_line":"    validator_org \u003d jsonschema.Draft4Validator"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self, schema):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_58b2f84c","line":22,"in_reply_to":"1a6eadb0_1d3a4999","updated":"2016-12-16 16:32:36.000000000","message":"I think Nova did it wrong. The \u0027validator\u0027 in the class body is a class variable. However, the statement \u0027self.validator \u003d ...\u0027 assign an instance variable. Therefore, there are two variables here:\n\n1. The class variable called \u0027validator\u0027\n2. The instance variable called \u0027validator\u0027\n\nHere set variable #1 to None but this variable is never used. The __init__() method set variable #2, and the validate() method reads it.\n\nTherefore, I think variable #1 should be removed.\n\nAs a demo, I wrote a test program as below:\n\n  class SchemaValidator(object):\n      validator \u003d None\n      def __init__(self, schema):\n          self.validator \u003d str(schema)\n      def validate(self, *args, **kwargs):\n          print(self.validator)\n      @classmethod\n      def validate2(cls):\n          print(cls.validator)\n\n  v1 \u003d SchemaValidator(schema\u003d1)\n  v1.validate()\n  v1.validate2()\n\nIt prints:\n\n  1\n  None\n\nThis demonstrates that the class variable is set None but not used anywhere.","commit_id":"ca4ed878ef8a7736f1cd6b081fee70904a205d59"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"e0d73b329a800c6126c1ba1f56e488343d0932df","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class SchemaValidator(object):"},{"line_number":20,"context_line":"    \"\"\"Resource reference validator class.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    validator \u003d None"},{"line_number":23,"context_line":"    validator_org \u003d jsonschema.Draft4Validator"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self, schema):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_1d3a4999","line":22,"in_reply_to":"1a6eadb0_237b6d29","updated":"2016-12-16 08:08:52.000000000","message":"I Got the idea from https://github.com/openstack/nova/blob/master/nova/api/validation/validators.py#L241, may be we don\u0027t want to initialise these variables for each instance.","commit_id":"ca4ed878ef8a7736f1cd6b081fee70904a205d59"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"582da7a8bca98107ba90e772f1ea8623ddb88c2c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class SchemaValidator(object):"},{"line_number":20,"context_line":"    \"\"\"Resource reference validator class.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    validator \u003d None"},{"line_number":23,"context_line":"    validator_org \u003d jsonschema.Draft4Validator"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self, schema):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_a5c3c037","line":22,"in_reply_to":"1a6eadb0_58b2f84c","updated":"2016-12-19 04:28:10.000000000","message":"I should have been clearer about it. Basically the class variables here were being used as constants. Ideally I would want to access class variables like they are class variables for example cls_name.variable. However, python allows us to access them via self as well - but the moment we start modifying the variable accessed via self - it becomes instance specific in nature. Hence, the global state of the variable remains as is, while we have changed the state of it locally in that instance. \n\nI would have been happier if we had used  something like this:\nclass Random(object):\n    i_am_classy \u003d \"hongbin\"\n    def __init__(self, xyz):\n        let_me_validate(Random.i_am_classy)\n\nInstead of using the \"self\" variable there, thus signifying that I am accessing a class variable and not an instance copy.\n\nHowever, since python allows us to access it via self as well - I am alright with the validator_org being the way it is right now.","commit_id":"ca4ed878ef8a7736f1cd6b081fee70904a205d59"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"db52a024648b884814a96ccf267a37b1329d4c81","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class SchemaValidator(object):"},{"line_number":20,"context_line":"    \"\"\"Resource reference validator class.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    validator \u003d None"},{"line_number":23,"context_line":"    validator_org \u003d jsonschema.Draft4Validator"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self, schema):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_6553686d","line":22,"in_reply_to":"1a6eadb0_a5c3c037","updated":"2016-12-19 04:34:22.000000000","message":"Nice to know !!!","commit_id":"ca4ed878ef8a7736f1cd6b081fee70904a205d59"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"2ed97113ee96ce7e9d466c18b678b4b2ca0be61c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class SchemaValidator(object):"},{"line_number":20,"context_line":"    \"\"\"Resource reference validator class.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    validator \u003d None"},{"line_number":23,"context_line":"    validator_org \u003d jsonschema.Draft4Validator"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self, schema):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_f225530a","line":22,"in_reply_to":"1a6eadb0_a5c3c037","updated":"2016-12-19 19:28:08.000000000","message":"lol","commit_id":"ca4ed878ef8a7736f1cd6b081fee70904a205d59"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"4e58493827144430ff120d5a588844af11a6b556","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    validator_org \u003d jsonschema.Draft4Validator"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self, schema):"},{"line_number":26,"context_line":"        validators \u003d {}"},{"line_number":27,"context_line":"        validator_cls \u003d jsonschema.validators.extend(self.validator_org,"},{"line_number":28,"context_line":"                                                     validators)"},{"line_number":29,"context_line":"        fc \u003d jsonschema.FormatChecker()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_43f149cc","line":26,"updated":"2016-12-16 06:44:12.000000000","message":"Any reason for initializing an emtpy dict here?","commit_id":"ca4ed878ef8a7736f1cd6b081fee70904a205d59"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"e0d73b329a800c6126c1ba1f56e488343d0932df","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    validator_org \u003d jsonschema.Draft4Validator"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __init__(self, schema):"},{"line_number":26,"context_line":"        validators \u003d {}"},{"line_number":27,"context_line":"        validator_cls \u003d jsonschema.validators.extend(self.validator_org,"},{"line_number":28,"context_line":"                                                     validators)"},{"line_number":29,"context_line":"        fc \u003d jsonschema.FormatChecker()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_5d5761c9","line":26,"in_reply_to":"1a6eadb0_43f149cc","updated":"2016-12-16 08:08:52.000000000","message":"This is for extending the validators, like we can override or extend some validators.  See https://github.com/openstack/nova/blob/master/nova/api/validation/validators.py#L245, may be  we need to add some extra validation for memory or some other thing.","commit_id":"ca4ed878ef8a7736f1cd6b081fee70904a205d59"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"4e58493827144430ff120d5a588844af11a6b556","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            self.validator.validate(*args, **kwargs)"},{"line_number":35,"context_line":"        except jsonschema.ValidationError as ex:"},{"line_number":36,"context_line":"            if len(ex.path) \u003e 0:"},{"line_number":37,"context_line":"                detail \u003d _(\"Invalid input for field \u0027%(path)s\u0027. The value is \""},{"line_number":38,"context_line":"                           \"\u0027%(value)s\u0027.\") % {\u0027path\u0027: ex.path.pop(),"},{"line_number":39,"context_line":"                                              \u0027value\u0027: ex.instance}"},{"line_number":40,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_a3185dd4","line":37,"updated":"2016-12-16 06:44:12.000000000","message":"How about we alter this log message to - Invalid value:  \u0027%(value)s\u0027 for field: \u0027%(field)s\u0027 ?","commit_id":"ca4ed878ef8a7736f1cd6b081fee70904a205d59"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"e0d73b329a800c6126c1ba1f56e488343d0932df","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            self.validator.validate(*args, **kwargs)"},{"line_number":35,"context_line":"        except jsonschema.ValidationError as ex:"},{"line_number":36,"context_line":"            if len(ex.path) \u003e 0:"},{"line_number":37,"context_line":"                detail \u003d _(\"Invalid input for field \u0027%(path)s\u0027. The value is \""},{"line_number":38,"context_line":"                           \"\u0027%(value)s\u0027.\") % {\u0027path\u0027: ex.path.pop(),"},{"line_number":39,"context_line":"                                              \u0027value\u0027: ex.instance}"},{"line_number":40,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_fd14ade9","line":37,"in_reply_to":"1a6eadb0_a3185dd4","updated":"2016-12-16 08:08:52.000000000","message":"This error message format is consistent with WSME, which other openstack projects are using.","commit_id":"ca4ed878ef8a7736f1cd6b081fee70904a205d59"}],"zun/tests/unit/common/test_validations.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"4da99b82e2aeb7a1e55e337ff3fff98daf1cf5b4","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_create_schema_image_missing(self):"},{"line_number":50,"context_line":"        request_to_validate \u003d {\u0027name\u0027: \u0027test1\u0027}"},{"line_number":51,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":52,"context_line":"                          self.schema_validator.validate,"},{"line_number":53,"context_line":"                          request_to_validate)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_ebcf9953","line":51,"range":{"start_line":51,"start_character":36,"end_line":51,"end_character":57},"updated":"2016-12-15 22:10:09.000000000","message":"Better to assert the error message is actually saying something like \"image is missing...\".","commit_id":"34f62ab3f2f5c60be88aad7313721dfa9596a713"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"c32554fa77b44c8dee4e16f1c30e32397aed961e","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_create_schema_image_missing(self):"},{"line_number":50,"context_line":"        request_to_validate \u003d {\u0027name\u0027: \u0027test1\u0027}"},{"line_number":51,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":52,"context_line":"                          self.schema_validator.validate,"},{"line_number":53,"context_line":"                          request_to_validate)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_6a929a4d","line":51,"range":{"start_line":51,"start_character":36,"end_line":51,"end_character":57},"in_reply_to":"1a6eadb0_ebcf9953","updated":"2016-12-16 04:16:27.000000000","message":"Done","commit_id":"34f62ab3f2f5c60be88aad7313721dfa9596a713"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"4da99b82e2aeb7a1e55e337ff3fff98daf1cf5b4","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        invalid_names \u003d [\u0027a@\u0027, \u0027a\u0027, \"\", \u0027*\u0027 * 265, \" \", \"     \", \"a b\", \u0027ab@\u0027]"},{"line_number":57,"context_line":"        for value in invalid_names:"},{"line_number":58,"context_line":"            request_to_validate \u003d {\u0027name\u0027: value, \u0027image\u0027: \u0027nginx\u0027}"},{"line_number":59,"context_line":"            self.assertRaises(exception.SchemaValidationError,"},{"line_number":60,"context_line":"                              self.schema_validator.validate,"},{"line_number":61,"context_line":"                              request_to_validate)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_0bf2159a","line":59,"range":{"start_line":59,"start_character":40,"end_line":59,"end_character":61},"updated":"2016-12-15 22:10:09.000000000","message":"Ditto, better to assert the error message","commit_id":"34f62ab3f2f5c60be88aad7313721dfa9596a713"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"c32554fa77b44c8dee4e16f1c30e32397aed961e","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        invalid_names \u003d [\u0027a@\u0027, \u0027a\u0027, \"\", \u0027*\u0027 * 265, \" \", \"     \", \"a b\", \u0027ab@\u0027]"},{"line_number":57,"context_line":"        for value in invalid_names:"},{"line_number":58,"context_line":"            request_to_validate \u003d {\u0027name\u0027: value, \u0027image\u0027: \u0027nginx\u0027}"},{"line_number":59,"context_line":"            self.assertRaises(exception.SchemaValidationError,"},{"line_number":60,"context_line":"                              self.schema_validator.validate,"},{"line_number":61,"context_line":"                              request_to_validate)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_aa98326b","line":59,"range":{"start_line":59,"start_character":40,"end_line":59,"end_character":61},"in_reply_to":"1a6eadb0_0bf2159a","updated":"2016-12-16 04:16:27.000000000","message":"Done","commit_id":"34f62ab3f2f5c60be88aad7313721dfa9596a713"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"4da99b82e2aeb7a1e55e337ff3fff98daf1cf5b4","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        invalid_memory \u003d [\u00272KG\u0027, 2.2, \u0027G2\u0027, \u00272.2G\u0027, \u00272L\u0027, 10]"},{"line_number":65,"context_line":"        for value in invalid_memory:"},{"line_number":66,"context_line":"            request_to_validate \u003d {\u0027memory\u0027: value, \u0027image\u0027: \u0027nginx\u0027}"},{"line_number":67,"context_line":"            self.assertRaises(exception.SchemaValidationError,"},{"line_number":68,"context_line":"                              self.schema_validator.validate,"},{"line_number":69,"context_line":"                              request_to_validate)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_8b34654a","line":67,"range":{"start_line":67,"start_character":40,"end_line":67,"end_character":61},"updated":"2016-12-15 22:10:09.000000000","message":"Ditto","commit_id":"34f62ab3f2f5c60be88aad7313721dfa9596a713"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"c32554fa77b44c8dee4e16f1c30e32397aed961e","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        invalid_memory \u003d [\u00272KG\u0027, 2.2, \u0027G2\u0027, \u00272.2G\u0027, \u00272L\u0027, 10]"},{"line_number":65,"context_line":"        for value in invalid_memory:"},{"line_number":66,"context_line":"            request_to_validate \u003d {\u0027memory\u0027: value, \u0027image\u0027: \u0027nginx\u0027}"},{"line_number":67,"context_line":"            self.assertRaises(exception.SchemaValidationError,"},{"line_number":68,"context_line":"                              self.schema_validator.validate,"},{"line_number":69,"context_line":"                              request_to_validate)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_ca9bae64","line":67,"range":{"start_line":67,"start_character":40,"end_line":67,"end_character":61},"in_reply_to":"1a6eadb0_8b34654a","updated":"2016-12-16 04:16:27.000000000","message":"Done","commit_id":"34f62ab3f2f5c60be88aad7313721dfa9596a713"}]}
