)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"27623f64c5636dfab26031144da3e8b307c6bda5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Darja Shakhray \u003cdshakhray@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-06-27 13:32:37 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add schemas for artifacts"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"* \"list_type_schemas\";"},{"line_number":10,"context_line":"* \"type_name_schema\"."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3aaa91ec_0e74449a","line":7,"updated":"2016-06-28 13:50:05.000000000","message":"I guess this is WIP?","commit_id":"f1add9fa6b65441025fcf1056945cc2e29584129"}],"glance/api/glare/v1/resource.py":[{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"34ad7edaf866cc7e92230c3fcdaeff1c9fde5e06","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        response.content_type \u003d \u0027application/json\u0027"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def list_type_schemas(self, response, type_schemas):"},{"line_number":357,"context_line":"        self._prepare_json_response(response, {\u0027schemas\u0027: type_schemas})"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def type_name_schema(self, response, type_schemas):"},{"line_number":360,"context_line":"        self._prepare_json_response(response, {\u0027schema\u0027: type_schemas})"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_d295e640","line":357,"updated":"2016-07-04 07:44:40.000000000","message":"Looks like we need application/schema+json according to the standart.","commit_id":"9087f2d5af2c54e4848977eb6bbb3c7e8519bf72"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"8a85251400253edce11acfe9a42a832b114bfdfd","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def type_name_schema(self, req, type_name):"},{"line_number":64,"context_line":"        type_schemas \u003d self.engine.type_name_schema(req.context, type_name)"},{"line_number":65,"context_line":"        return {type_name: type_schemas}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def list_type_names(self, req, sort, limit\u003dNone):"},{"line_number":68,"context_line":"        \"\"\"Return list of type name by specified sort condition and limit"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_3c7bd429","line":65,"updated":"2016-07-06 15:52:42.000000000","message":"Not sure we need type_name here.\nIs it in accordance with type_name?","commit_id":"b8c4c04e8f422f3892c0e37c31d825ea49e3594f"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"8a85251400253edce11acfe9a42a832b114bfdfd","unresolved":false,"context_lines":[{"line_number":357,"context_line":"    def list_type_schemas(self, response, type_schemas):"},{"line_number":358,"context_line":"        self._prepare_json_response(response,"},{"line_number":359,"context_line":"                                    {\u0027schemas\u0027: type_schemas},"},{"line_number":360,"context_line":"                                    content_type\u003d\u0027schema+json\u0027)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def type_name_schema(self, response, type_schemas):"},{"line_number":363,"context_line":"        self._prepare_json_response(response,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_bcd98459","line":360,"updated":"2016-07-06 15:52:42.000000000","message":"I guess you need application/ here.","commit_id":"b8c4c04e8f422f3892c0e37c31d825ea49e3594f"}],"glance/glare/engine.py":[{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"8a85251400253edce11acfe9a42a832b114bfdfd","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def gen_schemas(reg):"},{"line_number":29,"context_line":"    schemas \u003d {}"},{"line_number":30,"context_line":"    for name, type_list in reg.obj_classes().items():"},{"line_number":31,"context_line":"        schemas[type_list[0].get_type_name()] \u003d type_list[0].gen_schemas()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_fc0e6c8a","line":28,"updated":"2016-07-06 15:52:42.000000000","message":"Could you please move the fun inside class?","commit_id":"b8c4c04e8f422f3892c0e37c31d825ea49e3594f"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"8a85251400253edce11acfe9a42a832b114bfdfd","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @classmethod"},{"line_number":103,"context_line":"    def type_name_schema(cls, context, type_name):"},{"line_number":104,"context_line":"        policy.enforce(\"type_name_schema\", {}, context)"},{"line_number":105,"context_line":"        if type_name not in cls.schemas:"},{"line_number":106,"context_line":"            msg \u003d (_LE(\"Artifact type %s does not exist\") % type_name)"},{"line_number":107,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_fc5cac7e","line":104,"updated":"2016-07-06 15:52:42.000000000","message":"I think we can introduce the same policies for list and get schema.","commit_id":"b8c4c04e8f422f3892c0e37c31d825ea49e3594f"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"8a85251400253edce11acfe9a42a832b114bfdfd","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        if type_name not in cls.schemas:"},{"line_number":106,"context_line":"            msg \u003d (_LE(\"Artifact type %s does not exist\") % type_name)"},{"line_number":107,"context_line":"            LOG.error(msg)"},{"line_number":108,"context_line":"            raise exception.BadRequest(message\u003dmsg)"},{"line_number":109,"context_line":"        return cls.schemas[type_name]"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_3c53d46c","line":108,"updated":"2016-07-06 15:52:42.000000000","message":"NotFound?","commit_id":"b8c4c04e8f422f3892c0e37c31d825ea49e3594f"}],"glance/objects/base.py":[{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"84863750e2825df04c0cfeeefd875adcaf003f33","unresolved":false,"context_lines":[{"line_number":754,"context_line":"        return self.obj_to_primitive()[\u0027versioned_object.data\u0027]"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    @staticmethod"},{"line_number":757,"context_line":"    def schema_type(attr):"},{"line_number":758,"context_line":"        if isinstance(attr, fields.IntegerField):"},{"line_number":759,"context_line":"            return \u0027int\u0027"},{"line_number":760,"context_line":"        elif isinstance(attr, fields.FloatField):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_de268d15","line":757,"updated":"2016-07-04 09:05:05.000000000","message":"What about version? Blob dict?","commit_id":"9087f2d5af2c54e4848977eb6bbb3c7e8519bf72"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"84863750e2825df04c0cfeeefd875adcaf003f33","unresolved":false,"context_lines":[{"line_number":756,"context_line":"    @staticmethod"},{"line_number":757,"context_line":"    def schema_type(attr):"},{"line_number":758,"context_line":"        if isinstance(attr, fields.IntegerField):"},{"line_number":759,"context_line":"            return \u0027int\u0027"},{"line_number":760,"context_line":"        elif isinstance(attr, fields.FloatField):"},{"line_number":761,"context_line":"            return \u0027numeric\u0027"},{"line_number":762,"context_line":"        elif isinstance(attr, fields.BooleanField):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_5e88dd22","line":759,"updated":"2016-07-04 09:05:05.000000000","message":"Does int comply JSON schema notation? Should this be integer?","commit_id":"9087f2d5af2c54e4848977eb6bbb3c7e8519bf72"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"84863750e2825df04c0cfeeefd875adcaf003f33","unresolved":false,"context_lines":[{"line_number":758,"context_line":"        if isinstance(attr, fields.IntegerField):"},{"line_number":759,"context_line":"            return \u0027int\u0027"},{"line_number":760,"context_line":"        elif isinstance(attr, fields.FloatField):"},{"line_number":761,"context_line":"            return \u0027numeric\u0027"},{"line_number":762,"context_line":"        elif isinstance(attr, fields.BooleanField):"},{"line_number":763,"context_line":"            return \u0027boolean\u0027"},{"line_number":764,"context_line":"        elif isinstance(attr, glare_fields.List):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_7e87990f","line":761,"updated":"2016-07-04 09:05:05.000000000","message":"Ditto. Looks like it must be number.","commit_id":"9087f2d5af2c54e4848977eb6bbb3c7e8519bf72"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"84863750e2825df04c0cfeeefd875adcaf003f33","unresolved":false,"context_lines":[{"line_number":762,"context_line":"        elif isinstance(attr, fields.BooleanField):"},{"line_number":763,"context_line":"            return \u0027boolean\u0027"},{"line_number":764,"context_line":"        elif isinstance(attr, glare_fields.List):"},{"line_number":765,"context_line":"            return \u0027list\u0027"},{"line_number":766,"context_line":"        elif isinstance(attr, glare_fields.Dict):"},{"line_number":767,"context_line":"            return \u0027dict\u0027"},{"line_number":768,"context_line":"        if isinstance(attr, glare_fields.BlobField):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_feaa696f","line":765,"updated":"2016-07-04 09:05:05.000000000","message":"There is no array for JSON schema","commit_id":"9087f2d5af2c54e4848977eb6bbb3c7e8519bf72"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"84863750e2825df04c0cfeeefd875adcaf003f33","unresolved":false,"context_lines":[{"line_number":764,"context_line":"        elif isinstance(attr, glare_fields.List):"},{"line_number":765,"context_line":"            return \u0027list\u0027"},{"line_number":766,"context_line":"        elif isinstance(attr, glare_fields.Dict):"},{"line_number":767,"context_line":"            return \u0027dict\u0027"},{"line_number":768,"context_line":"        if isinstance(attr, glare_fields.BlobField):"},{"line_number":769,"context_line":"            return \u0027object\u0027"},{"line_number":770,"context_line":"        return \u0027string\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_5eb61ddd","line":767,"updated":"2016-07-04 09:05:05.000000000","message":"There is no dict for JSON schema","commit_id":"9087f2d5af2c54e4848977eb6bbb3c7e8519bf72"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"84863750e2825df04c0cfeeefd875adcaf003f33","unresolved":false,"context_lines":[{"line_number":765,"context_line":"            return \u0027list\u0027"},{"line_number":766,"context_line":"        elif isinstance(attr, glare_fields.Dict):"},{"line_number":767,"context_line":"            return \u0027dict\u0027"},{"line_number":768,"context_line":"        if isinstance(attr, glare_fields.BlobField):"},{"line_number":769,"context_line":"            return \u0027object\u0027"},{"line_number":770,"context_line":"        return \u0027string\u0027"},{"line_number":771,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_be3c6130","line":768,"updated":"2016-07-04 09:05:05.000000000","message":"Blob is a nested JSON object. So we need to add JSON schema for this object here.","commit_id":"9087f2d5af2c54e4848977eb6bbb3c7e8519bf72"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"84863750e2825df04c0cfeeefd875adcaf003f33","unresolved":false,"context_lines":[{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        for attr_name, attr in cls.fields.items():"},{"line_number":777,"context_line":"            properties \u003d {\u0027mutable\u0027: attr.mutable,"},{"line_number":778,"context_line":"                          \u0027required_on_activate\u0027: attr.required_on_activate,"},{"line_number":779,"context_line":"                          \u0027system\u0027: attr.system,"},{"line_number":780,"context_line":"                          \u0027sortable\u0027: attr.sortable,"},{"line_number":781,"context_line":"                          \u0027nullable\u0027: attr.nullable,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_ded16dfd","line":778,"updated":"2016-07-04 09:05:05.000000000","message":"Required on activate as required","commit_id":"9087f2d5af2c54e4848977eb6bbb3c7e8519bf72"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"a350a5ca3dee20a9d6600987bfdc92a742f40d83","unresolved":false,"context_lines":[{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        for attr_name, attr in cls.fields.items():"},{"line_number":777,"context_line":"            properties \u003d {\u0027mutable\u0027: attr.mutable,"},{"line_number":778,"context_line":"                          \u0027required_on_activate\u0027: attr.required_on_activate,"},{"line_number":779,"context_line":"                          \u0027system\u0027: attr.system,"},{"line_number":780,"context_line":"                          \u0027sortable\u0027: attr.sortable,"},{"line_number":781,"context_line":"                          \u0027nullable\u0027: attr.nullable,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_d874e0fe","line":778,"in_reply_to":"1aa78d24_ded16dfd","updated":"2016-07-04 09:58:22.000000000","message":"Sorry, this should not be required.\nThe only required values are name and version.","commit_id":"9087f2d5af2c54e4848977eb6bbb3c7e8519bf72"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"84863750e2825df04c0cfeeefd875adcaf003f33","unresolved":false,"context_lines":[{"line_number":776,"context_line":"        for attr_name, attr in cls.fields.items():"},{"line_number":777,"context_line":"            properties \u003d {\u0027mutable\u0027: attr.mutable,"},{"line_number":778,"context_line":"                          \u0027required_on_activate\u0027: attr.required_on_activate,"},{"line_number":779,"context_line":"                          \u0027system\u0027: attr.system,"},{"line_number":780,"context_line":"                          \u0027sortable\u0027: attr.sortable,"},{"line_number":781,"context_line":"                          \u0027nullable\u0027: attr.nullable,"},{"line_number":782,"context_line":"                          \u0027default\u0027: attr.default,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_fec1c92f","line":779,"updated":"2016-07-04 09:05:05.000000000","message":"System must be interpreted as read-only attributes.","commit_id":"9087f2d5af2c54e4848977eb6bbb3c7e8519bf72"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"8a85251400253edce11acfe9a42a832b114bfdfd","unresolved":false,"context_lines":[{"line_number":832,"context_line":"    def gen_schemas(cls):"},{"line_number":833,"context_line":"        schemas_prop \u003d {}"},{"line_number":834,"context_line":"        for attr_name, attr in cls.fields.items():"},{"line_number":835,"context_line":"            schemas_prop[attr_name] \u003d cls.schema_attr(attr,"},{"line_number":836,"context_line":"                                                      attr_name\u003dattr_name)"},{"line_number":837,"context_line":"        schemas \u003d {\u0027name\u0027: cls.__name__,"},{"line_number":838,"context_line":"                   \u0027properties\u0027: schemas_prop,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_9ca80822","line":835,"updated":"2016-07-06 15:52:42.000000000","message":"How about artifact type version? Do we have it somewhere?","commit_id":"b8c4c04e8f422f3892c0e37c31d825ea49e3594f"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"8a85251400253edce11acfe9a42a832b114bfdfd","unresolved":false,"context_lines":[{"line_number":837,"context_line":"        schemas \u003d {\u0027name\u0027: cls.__name__,"},{"line_number":838,"context_line":"                   \u0027properties\u0027: schemas_prop,"},{"line_number":839,"context_line":"                   \u0027type\u0027: \u0027object\u0027,"},{"line_number":840,"context_line":"                   \u0027required\u0027: [\"name\", \"version\"]}"},{"line_number":841,"context_line":""},{"line_number":842,"context_line":"        return schemas"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_fcb82c77","line":840,"updated":"2016-07-06 15:52:42.000000000","message":"version is not required to be set. It will be defaulted.","commit_id":"b8c4c04e8f422f3892c0e37c31d825ea49e3594f"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"bd59d87a092155eb83ef12a51e35e4bfd9e65474","unresolved":false,"context_lines":[{"line_number":810,"context_line":"                                  \u0027external\u0027, \u0027status\u0027, \u0027id\u0027]"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"        if isinstance(attr, fields.DateTimeField):"},{"line_number":813,"context_line":"            schema[\u0027format\u0027] \u003d \u0027data-time\u0027"},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"        if attr_name \u003d\u003d \u0027status\u0027:"},{"line_number":816,"context_line":"            schema[\u0027enum\u0027] \u003d list("}],"source_content_type":"text/x-python","patch_set":6,"id":"1aa78d24_67f1c495","line":813,"updated":"2016-07-14 14:34:09.000000000","message":"format is called \u0027date-time\u0027","commit_id":"6fb750de9b896d58a861fe737e70c953633d961b"}]}
