)]}'
{"senlin/common/schema.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"31625d4072cd5cd7b8e110d6be39187c514486ff","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        except ValueError as ex:"},{"line_number":125,"context_line":"            raise exception.SpecValidationFailed(message\u003dsix.text_type(ex))"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def validate_version(self, version, key):"},{"line_number":128,"context_line":"        if self.min_version and self.min_version \u003e version:"},{"line_number":129,"context_line":"            msg \u003d _(\u0027%(key)s is not supported in version %(version)s.\u0027"},{"line_number":130,"context_line":"                    ) % {\u0027key\u0027: key, \u0027version\u0027: version}"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_9734f24a","line":127,"range":{"start_line":127,"start_character":8,"end_line":127,"end_character":24},"updated":"2016-08-19 08:49:31.000000000","message":"I\u0027d suggest we make this a private function invoked from the validate() method on line 101.","commit_id":"39d58cc633ad4c25c446765f1d9d50b144a1ebfe"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"6081121bb736def2f8f1a0594f3d3c3142e80034","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        except ValueError as ex:"},{"line_number":125,"context_line":"            raise exception.SpecValidationFailed(message\u003dsix.text_type(ex))"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def validate_version(self, version, key):"},{"line_number":128,"context_line":"        if self.min_version and self.min_version \u003e version:"},{"line_number":129,"context_line":"            msg \u003d _(\u0027%(key)s is not supported in version %(version)s.\u0027"},{"line_number":130,"context_line":"                    ) % {\u0027key\u0027: key, \u0027version\u0027: version}"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_0f93ca50","line":127,"range":{"start_line":127,"start_character":8,"end_line":127,"end_character":24},"in_reply_to":"3ac371cc_9734f24a","updated":"2016-08-19 09:28:30.000000000","message":"I see. Will make a change.","commit_id":"39d58cc633ad4c25c446765f1d9d50b144a1ebfe"},{"author":{"_account_id":7404,"name":"Ethan Lynn","email":"xuanlangjian@gmail.com","username":"GaryLynn"},"change_message_id":"5a0633dc8d835573dba49a8ccb9a330799cd399c","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            msg \u003d _(\u0027%(key)s is not supported in version %(version)s.\u0027"},{"line_number":130,"context_line":"                    ) % {\u0027key\u0027: key, \u0027version\u0027: version}"},{"line_number":131,"context_line":"            raise exception.SpecValidationFailed(message\u003dmsg)"},{"line_number":132,"context_line":"        if self.max_version and self.max_version \u003d\u003d version:"},{"line_number":133,"context_line":"            msg \u003d _(\u0027Warning: %(key)s will be deprecated after version \u0027"},{"line_number":134,"context_line":"                    \u0027%(version)s!\u0027) % {\u0027key\u0027: key, \u0027version\u0027: version}"},{"line_number":135,"context_line":"            LOG.warning(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_a2dac214","line":132,"range":{"start_line":132,"start_character":28,"end_line":132,"end_character":59},"updated":"2016-08-12 04:21:06.000000000","message":"Should we always display this msg if max_version exists? Since this key will be deprecated in the future.","commit_id":"39d58cc633ad4c25c446765f1d9d50b144a1ebfe"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"6081121bb736def2f8f1a0594f3d3c3142e80034","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            msg \u003d _(\u0027%(key)s is not supported in version %(version)s.\u0027"},{"line_number":130,"context_line":"                    ) % {\u0027key\u0027: key, \u0027version\u0027: version}"},{"line_number":131,"context_line":"            raise exception.SpecValidationFailed(message\u003dmsg)"},{"line_number":132,"context_line":"        if self.max_version and self.max_version \u003d\u003d version:"},{"line_number":133,"context_line":"            msg \u003d _(\u0027Warning: %(key)s will be deprecated after version \u0027"},{"line_number":134,"context_line":"                    \u0027%(version)s!\u0027) % {\u0027key\u0027: key, \u0027version\u0027: version}"},{"line_number":135,"context_line":"            LOG.warning(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_0f2f4af7","line":132,"range":{"start_line":132,"start_character":28,"end_line":132,"end_character":59},"in_reply_to":"3ac371cc_37089e91","updated":"2016-08-19 09:28:30.000000000","message":"ok, it makes sense to always throw warning once max_version is set. Will also add exception raising for case version\u003emax_version since it is obviously an error in spec definition.","commit_id":"39d58cc633ad4c25c446765f1d9d50b144a1ebfe"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"31625d4072cd5cd7b8e110d6be39187c514486ff","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            msg \u003d _(\u0027%(key)s is not supported in version %(version)s.\u0027"},{"line_number":130,"context_line":"                    ) % {\u0027key\u0027: key, \u0027version\u0027: version}"},{"line_number":131,"context_line":"            raise exception.SpecValidationFailed(message\u003dmsg)"},{"line_number":132,"context_line":"        if self.max_version and self.max_version \u003d\u003d version:"},{"line_number":133,"context_line":"            msg \u003d _(\u0027Warning: %(key)s will be deprecated after version \u0027"},{"line_number":134,"context_line":"                    \u0027%(version)s!\u0027) % {\u0027key\u0027: key, \u0027version\u0027: version}"},{"line_number":135,"context_line":"            LOG.warning(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_37089e91","line":132,"range":{"start_line":132,"start_character":28,"end_line":132,"end_character":59},"in_reply_to":"9ad45d7e_a2dac214","updated":"2016-08-19 08:49:31.000000000","message":"agree.\nmaybe we should check if version \u003e self.max_version and raise an exception if so.","commit_id":"39d58cc633ad4c25c446765f1d9d50b144a1ebfe"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"31625d4072cd5cd7b8e110d6be39187c514486ff","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        return iter(self._schema)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"class VersioningSpec(Spec):"},{"line_number":469,"context_line":"    \"\"\"A spec class with version support.\"\"\""},{"line_number":470,"context_line":"    def __init__(self, schema, data, version\u003dNone):"},{"line_number":471,"context_line":"        super(VersioningSpec, self).__init__(schema, data)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_979eb205","line":468,"range":{"start_line":468,"start_character":6,"end_line":468,"end_character":20},"updated":"2016-08-19 08:49:31.000000000","message":"this class isn\u0027t that useful and it is adding maintenance workload.\n\nhow about we add these logics directly into Spec class because we are not risking breaking existing code.","commit_id":"39d58cc633ad4c25c446765f1d9d50b144a1ebfe"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"6081121bb736def2f8f1a0594f3d3c3142e80034","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        return iter(self._schema)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"class VersioningSpec(Spec):"},{"line_number":469,"context_line":"    \"\"\"A spec class with version support.\"\"\""},{"line_number":470,"context_line":"    def __init__(self, schema, data, version\u003dNone):"},{"line_number":471,"context_line":"        super(VersioningSpec, self).__init__(schema, data)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_ef48eece","line":468,"range":{"start_line":468,"start_character":6,"end_line":468,"end_character":20},"in_reply_to":"3ac371cc_979eb205","updated":"2016-08-19 09:28:30.000000000","message":"Will change.","commit_id":"39d58cc633ad4c25c446765f1d9d50b144a1ebfe"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"f6f4deae03befb4a1188198a1d6d078f9bf3c890","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def _validate_version(self, version, key):"},{"line_number":128,"context_line":"        if self.min_version and self.min_version \u003e version:"},{"line_number":129,"context_line":"            msg \u003d _(\u0027%(key)s is not supported in version %(version)s.\u0027"},{"line_number":130,"context_line":"                    ) % {\u0027key\u0027: key, \u0027version\u0027: version}"},{"line_number":131,"context_line":"            raise exception.SpecValidationFailed(message\u003dmsg)"},{"line_number":132,"context_line":"        if self.max_version:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_31f99e81","line":129,"range":{"start_line":129,"start_character":20,"end_line":129,"end_character":69},"updated":"2016-08-22 06:46:47.000000000","message":"%(key)s (min_version\u003d%(min)s) is not supported by specy version %(version)s.","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"bdaaab7ac58dbb69b62252ded28504ee02c8206b","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def _validate_version(self, version, key):"},{"line_number":128,"context_line":"        if self.min_version and self.min_version \u003e version:"},{"line_number":129,"context_line":"            msg \u003d _(\u0027%(key)s is not supported in version %(version)s.\u0027"},{"line_number":130,"context_line":"                    ) % {\u0027key\u0027: key, \u0027version\u0027: version}"},{"line_number":131,"context_line":"            raise exception.SpecValidationFailed(message\u003dmsg)"},{"line_number":132,"context_line":"        if self.max_version:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_4c1c81c1","line":129,"range":{"start_line":129,"start_character":20,"end_line":129,"end_character":69},"in_reply_to":"1ac06dbe_31f99e81","updated":"2016-08-22 07:02:54.000000000","message":"Done","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"f6f4deae03befb4a1188198a1d6d078f9bf3c890","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            raise exception.SpecValidationFailed(message\u003dmsg)"},{"line_number":132,"context_line":"        if self.max_version:"},{"line_number":133,"context_line":"            if version \u003e self.max_version:"},{"line_number":134,"context_line":"                msg \u003d _(\u0027Spec version %(version)s is larger than max_version \u0027"},{"line_number":135,"context_line":"                        \u0027of %(key)s property.\u0027) % {\u0027version\u0027: version,"},{"line_number":136,"context_line":"                                                   \u0027key\u0027: key}"},{"line_number":137,"context_line":"                raise exception.SpecValidationFailed(message\u003dmsg)"},{"line_number":138,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_d1eacaab","line":135,"range":{"start_line":134,"start_character":24,"end_line":135,"end_character":46},"updated":"2016-08-22 06:46:47.000000000","message":"%(key)s (max_version\u003d%(max)s) is not supported by spec version %(version)s.","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"bdaaab7ac58dbb69b62252ded28504ee02c8206b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            raise exception.SpecValidationFailed(message\u003dmsg)"},{"line_number":132,"context_line":"        if self.max_version:"},{"line_number":133,"context_line":"            if version \u003e self.max_version:"},{"line_number":134,"context_line":"                msg \u003d _(\u0027Spec version %(version)s is larger than max_version \u0027"},{"line_number":135,"context_line":"                        \u0027of %(key)s property.\u0027) % {\u0027version\u0027: version,"},{"line_number":136,"context_line":"                                                   \u0027key\u0027: key}"},{"line_number":137,"context_line":"                raise exception.SpecValidationFailed(message\u003dmsg)"},{"line_number":138,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_ecb60d89","line":135,"range":{"start_line":134,"start_character":24,"end_line":135,"end_character":46},"in_reply_to":"1ac06dbe_d1eacaab","updated":"2016-08-22 07:02:54.000000000","message":"Done","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"f6f4deae03befb4a1188198a1d6d078f9bf3c890","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            # We have a child schema specified for list elements"},{"line_number":326,"context_line":"            # Fake a dict of array elements, since we have only one schema"},{"line_number":327,"context_line":"            schema_arr \u003d dict((k, sub_schema[k]) for k in keys)"},{"line_number":328,"context_line":"            # Version is set to \"\" since nested properties are non-versioning"},{"line_number":329,"context_line":"            subspec \u003d Spec(schema_arr, dict(values), version\u003d\"\")"},{"line_number":330,"context_line":"            subspec.validate()"},{"line_number":331,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_51eedab4","line":328,"range":{"start_line":328,"start_character":63,"end_line":328,"end_character":77},"updated":"2016-08-22 06:46:47.000000000","message":"not versioned","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"bdaaab7ac58dbb69b62252ded28504ee02c8206b","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            # We have a child schema specified for list elements"},{"line_number":326,"context_line":"            # Fake a dict of array elements, since we have only one schema"},{"line_number":327,"context_line":"            schema_arr \u003d dict((k, sub_schema[k]) for k in keys)"},{"line_number":328,"context_line":"            # Version is set to \"\" since nested properties are non-versioning"},{"line_number":329,"context_line":"            subspec \u003d Spec(schema_arr, dict(values), version\u003d\"\")"},{"line_number":330,"context_line":"            subspec.validate()"},{"line_number":331,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_6ce69db5","line":328,"range":{"start_line":328,"start_character":63,"end_line":328,"end_character":77},"in_reply_to":"1ac06dbe_51eedab4","updated":"2016-08-22 07:02:54.000000000","message":"Done","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"f6f4deae03befb4a1188198a1d6d078f9bf3c890","unresolved":false,"context_lines":[{"line_number":326,"context_line":"            # Fake a dict of array elements, since we have only one schema"},{"line_number":327,"context_line":"            schema_arr \u003d dict((k, sub_schema[k]) for k in keys)"},{"line_number":328,"context_line":"            # Version is set to \"\" since nested properties are non-versioning"},{"line_number":329,"context_line":"            subspec \u003d Spec(schema_arr, dict(values), version\u003d\"\")"},{"line_number":330,"context_line":"            subspec.validate()"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            return ((k, subspec[k]) for k in keys)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_712156fb","line":329,"range":{"start_line":329,"start_character":53,"end_line":329,"end_character":63},"updated":"2016-08-22 06:46:47.000000000","message":"can we skip this? I mean the Spec constructor has a version\u003dNone as its parameter, why do we have to pass a \"\" here?","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"bdaaab7ac58dbb69b62252ded28504ee02c8206b","unresolved":false,"context_lines":[{"line_number":326,"context_line":"            # Fake a dict of array elements, since we have only one schema"},{"line_number":327,"context_line":"            schema_arr \u003d dict((k, sub_schema[k]) for k in keys)"},{"line_number":328,"context_line":"            # Version is set to \"\" since nested properties are non-versioning"},{"line_number":329,"context_line":"            subspec \u003d Spec(schema_arr, dict(values), version\u003d\"\")"},{"line_number":330,"context_line":"            subspec.validate()"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            return ((k, subspec[k]) for k in keys)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_4ce1219a","line":329,"range":{"start_line":329,"start_character":53,"end_line":329,"end_character":63},"in_reply_to":"1ac06dbe_712156fb","updated":"2016-08-22 07:02:54.000000000","message":"Done","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"f6f4deae03befb4a1188198a1d6d078f9bf3c890","unresolved":false,"context_lines":[{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        sub_schema \u003d self.schema"},{"line_number":372,"context_line":"        if sub_schema is not None:"},{"line_number":373,"context_line":"            # sub_schema shoud be a dict here. Version is set to \"\" since"},{"line_number":374,"context_line":"            # nested properties are non-versioning"},{"line_number":375,"context_line":"            subspec \u003d Spec(sub_schema, dict(values), version\u003d\"\")"},{"line_number":376,"context_line":"            subspec.validate()"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"            return ((k, subspec[k]) for k in sub_schema)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_f18386ca","line":375,"range":{"start_line":373,"start_character":0,"end_line":375,"end_character":64},"updated":"2016-08-22 06:46:47.000000000","message":"see common on line 328","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"bdaaab7ac58dbb69b62252ded28504ee02c8206b","unresolved":false,"context_lines":[{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        sub_schema \u003d self.schema"},{"line_number":372,"context_line":"        if sub_schema is not None:"},{"line_number":373,"context_line":"            # sub_schema shoud be a dict here. Version is set to \"\" since"},{"line_number":374,"context_line":"            # nested properties are non-versioning"},{"line_number":375,"context_line":"            subspec \u003d Spec(sub_schema, dict(values), version\u003d\"\")"},{"line_number":376,"context_line":"            subspec.validate()"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"            return ((k, subspec[k]) for k in sub_schema)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_aceed588","line":375,"range":{"start_line":373,"start_character":0,"end_line":375,"end_character":64},"in_reply_to":"1ac06dbe_f18386ca","updated":"2016-08-22 07:02:54.000000000","message":"Done","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"f6f4deae03befb4a1188198a1d6d078f9bf3c890","unresolved":false,"context_lines":[{"line_number":419,"context_line":""},{"line_number":420,"context_line":"class Spec(collections.Mapping):"},{"line_number":421,"context_line":"    \u0027\u0027\u0027A class that contains all spec items.\u0027\u0027\u0027"},{"line_number":422,"context_line":"    def __init__(self, schema, data, version\u003dNone):"},{"line_number":423,"context_line":"        self._schema \u003d schema"},{"line_number":424,"context_line":"        self._data \u003d data"},{"line_number":425,"context_line":"        if version is None:"},{"line_number":426,"context_line":"            # Try to extract version information from spec"},{"line_number":427,"context_line":"            # if it is not provided."},{"line_number":428,"context_line":"            self._version \u003d get_spec_version(data)[1]"},{"line_number":429,"context_line":"        else:"},{"line_number":430,"context_line":"            # Version can also be specified explicitly when"},{"line_number":431,"context_line":"            # versioning spec being initialized. This is useful for"},{"line_number":432,"context_line":"            # case that sub spec inherit version from parent spec,"},{"line_number":433,"context_line":"            # e.g. property spec of profile/policy will inherit"},{"line_number":434,"context_line":"            # version from parent data spec."},{"line_number":435,"context_line":"            # Note: version should be set to \"\" if spec is non-verioning."},{"line_number":436,"context_line":"            # In that case, verion validation will not be done."},{"line_number":437,"context_line":"            self._version \u003d version"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    def validate(self):"},{"line_number":440,"context_line":"        \u0027\u0027\u0027Validate the schema.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_d1476a75","line":437,"range":{"start_line":422,"start_character":0,"end_line":437,"end_character":35},"updated":"2016-08-22 06:46:47.000000000","message":"I have some other thoughts and I think I understand your endeavor to make this backward compatible...\n\nThe version parameter is newly added, that is the reason we are assigning a default value \u0027None\u0027 for it on line 422.\n\nIf version is not specified, maybe we can just have the self._version \u003d None. That way we don\u0027t do any version checking.\n\nIf it is assigned a value, the get_spec_version call should have happended before doing the \u0027__init__()\u0027 call. So we don\u0027t do \u0027get_spec_version\u0027 inside __init__.\n\nIs that gonna make the logic a little simpler?","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"bdaaab7ac58dbb69b62252ded28504ee02c8206b","unresolved":false,"context_lines":[{"line_number":419,"context_line":""},{"line_number":420,"context_line":"class Spec(collections.Mapping):"},{"line_number":421,"context_line":"    \u0027\u0027\u0027A class that contains all spec items.\u0027\u0027\u0027"},{"line_number":422,"context_line":"    def __init__(self, schema, data, version\u003dNone):"},{"line_number":423,"context_line":"        self._schema \u003d schema"},{"line_number":424,"context_line":"        self._data \u003d data"},{"line_number":425,"context_line":"        if version is None:"},{"line_number":426,"context_line":"            # Try to extract version information from spec"},{"line_number":427,"context_line":"            # if it is not provided."},{"line_number":428,"context_line":"            self._version \u003d get_spec_version(data)[1]"},{"line_number":429,"context_line":"        else:"},{"line_number":430,"context_line":"            # Version can also be specified explicitly when"},{"line_number":431,"context_line":"            # versioning spec being initialized. This is useful for"},{"line_number":432,"context_line":"            # case that sub spec inherit version from parent spec,"},{"line_number":433,"context_line":"            # e.g. property spec of profile/policy will inherit"},{"line_number":434,"context_line":"            # version from parent data spec."},{"line_number":435,"context_line":"            # Note: version should be set to \"\" if spec is non-verioning."},{"line_number":436,"context_line":"            # In that case, verion validation will not be done."},{"line_number":437,"context_line":"            self._version \u003d version"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    def validate(self):"},{"line_number":440,"context_line":"        \u0027\u0027\u0027Validate the schema.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_8c079980","line":437,"range":{"start_line":422,"start_character":0,"end_line":437,"end_character":35},"in_reply_to":"1ac06dbe_d1476a75","updated":"2016-08-22 07:02:54.000000000","message":"Yes, this will make the logic much simpler. Just in that case, spec version extracting must be done explicitly. But this does make sense to me. Will make a change.","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"f6f4deae03befb4a1188198a1d6d078f9bf3c890","unresolved":false,"context_lines":[{"line_number":466,"context_line":"        elif schema_item.required:"},{"line_number":467,"context_line":"            raise ValueError(_(\u0027Required spec item \"%s\" not assigned\u0027) % key)"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        # Validate schema version for versioning spec"},{"line_number":470,"context_line":"        if self._version !\u003d \u0027\u0027:"},{"line_number":471,"context_line":"            self._schema[key]._validate_version(self._version, key)"},{"line_number":472,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_2c42e53e","line":469,"range":{"start_line":469,"start_character":26,"end_line":469,"end_character":33},"updated":"2016-08-22 06:46:47.000000000","message":"delete","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"f6f4deae03befb4a1188198a1d6d078f9bf3c890","unresolved":false,"context_lines":[{"line_number":466,"context_line":"        elif schema_item.required:"},{"line_number":467,"context_line":"            raise ValueError(_(\u0027Required spec item \"%s\" not assigned\u0027) % key)"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        # Validate schema version for versioning spec"},{"line_number":470,"context_line":"        if self._version !\u003d \u0027\u0027:"},{"line_number":471,"context_line":"            self._schema[key]._validate_version(self._version, key)"},{"line_number":472,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_8c50390c","line":469,"range":{"start_line":469,"start_character":38,"end_line":469,"end_character":48},"updated":"2016-08-22 06:46:47.000000000","message":"versioned","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"bdaaab7ac58dbb69b62252ded28504ee02c8206b","unresolved":false,"context_lines":[{"line_number":466,"context_line":"        elif schema_item.required:"},{"line_number":467,"context_line":"            raise ValueError(_(\u0027Required spec item \"%s\" not assigned\u0027) % key)"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        # Validate schema version for versioning spec"},{"line_number":470,"context_line":"        if self._version !\u003d \u0027\u0027:"},{"line_number":471,"context_line":"            self._schema[key]._validate_version(self._version, key)"},{"line_number":472,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_2c8ae5bf","line":469,"range":{"start_line":469,"start_character":26,"end_line":469,"end_character":33},"in_reply_to":"1ac06dbe_2c42e53e","updated":"2016-08-22 07:02:54.000000000","message":"Done","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"bdaaab7ac58dbb69b62252ded28504ee02c8206b","unresolved":false,"context_lines":[{"line_number":466,"context_line":"        elif schema_item.required:"},{"line_number":467,"context_line":"            raise ValueError(_(\u0027Required spec item \"%s\" not assigned\u0027) % key)"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        # Validate schema version for versioning spec"},{"line_number":470,"context_line":"        if self._version !\u003d \u0027\u0027:"},{"line_number":471,"context_line":"            self._schema[key]._validate_version(self._version, key)"},{"line_number":472,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ac06dbe_4c8f61cc","line":469,"range":{"start_line":469,"start_character":38,"end_line":469,"end_character":48},"in_reply_to":"1ac06dbe_8c50390c","updated":"2016-08-22 07:02:54.000000000","message":"Done","commit_id":"38054c2e317508687dafc626a3afa027d1b24a40"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"24553dd01ba0c1c69c15c9380d99391a14fcb5cb","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        elif schema_item.required:"},{"line_number":456,"context_line":"            raise ValueError(_(\u0027Required spec item \"%s\" not assigned\u0027) % key)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        # Validate schema for versioned spec"},{"line_number":459,"context_line":"        if self._version:"},{"line_number":460,"context_line":"            self._schema[key]._validate_version(self._version, key)"},{"line_number":461,"context_line":"        return value"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def __getitem__(self, key):"},{"line_number":464,"context_line":"        \u0027\u0027\u0027Lazy evaluation for spec items.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_50cf0eb0","line":461,"range":{"start_line":458,"start_character":0,"end_line":461,"end_character":20},"updated":"2016-08-26 03:28:24.000000000","message":"should this logic be moved to the validate() function on line 428?","commit_id":"9b7f0baf4c8552ee2fc96e14a6aeb33e2111916f"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"9237bd9c12164a103d489783b5aefb10b6e9ea2d","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        elif schema_item.required:"},{"line_number":456,"context_line":"            raise ValueError(_(\u0027Required spec item \"%s\" not assigned\u0027) % key)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        # Validate schema for versioned spec"},{"line_number":459,"context_line":"        if self._version:"},{"line_number":460,"context_line":"            self._schema[key]._validate_version(self._version, key)"},{"line_number":461,"context_line":"        return value"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def __getitem__(self, key):"},{"line_number":464,"context_line":"        \u0027\u0027\u0027Lazy evaluation for spec items.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_90ffd633","line":461,"range":{"start_line":458,"start_character":0,"end_line":461,"end_character":20},"in_reply_to":"fa7ab95a_50cf0eb0","updated":"2016-08-26 03:48:26.000000000","message":"Yes. Just noticed there is a statement \"validate through resolve\" in line432, so I thought it was intended to embed the validation progress into resolve_value method. Will move this logic to line433. Thanks.","commit_id":"9b7f0baf4c8552ee2fc96e14a6aeb33e2111916f"}]}
