)]}'
{"karbor/api/v1/providers.py":[{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"7344767a16ea3c87544ace1bb5a7da81d3b3fd58","unresolved":false,"context_lines":[{"line_number":384,"context_line":"            raise exception.PlanNotFound(plan_id\u003dplan_id)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        extra_info \u003d checkpoint.get(\"extra-info\", None)"},{"line_number":387,"context_line":"        if extra_info is not None and not isinstance(extra_info, dict):"},{"line_number":388,"context_line":"            msg \u003d _(\"Extra-info in checkpoint must be a dict when \""},{"line_number":389,"context_line":"                    \"creating a checkpoint.\")"},{"line_number":390,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":391,"context_line":"        checkpoint_extra_info \u003d None"},{"line_number":392,"context_line":"        if extra_info is not None:"},{"line_number":393,"context_line":"            checkpoint_extra_info \u003d jsonutils.dumps(extra_info)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a89bdaa_f7073b7f","line":390,"range":{"start_line":387,"start_character":0,"end_line":390,"end_character":52},"updated":"2016-09-09 02:45:11.000000000","message":"would better check the format of keys of \u0027extra_info\u0027 according to the definitions in the bp(doc/source/specs/checkpoint-metadata.rst).","commit_id":"02fb608b8d6782b25b3be53d12c997226cb64728"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"864917f622a52117444c2bf18b2fbf6a3d7bfe0e","unresolved":false,"context_lines":[{"line_number":384,"context_line":"            raise exception.PlanNotFound(plan_id\u003dplan_id)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        extra_info \u003d checkpoint.get(\"extra-info\", None)"},{"line_number":387,"context_line":"        if extra_info is not None and not isinstance(extra_info, dict):"},{"line_number":388,"context_line":"            msg \u003d _(\"Extra-info in checkpoint must be a dict when \""},{"line_number":389,"context_line":"                    \"creating a checkpoint.\")"},{"line_number":390,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":391,"context_line":"        checkpoint_extra_info \u003d None"},{"line_number":392,"context_line":"        if extra_info is not None:"},{"line_number":393,"context_line":"            checkpoint_extra_info \u003d jsonutils.dumps(extra_info)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a89bdaa_54f77358","line":390,"range":{"start_line":387,"start_character":0,"end_line":390,"end_character":52},"in_reply_to":"9a89bdaa_19e60415","updated":"2016-09-13 02:08:37.000000000","message":"IMO, I will not add this check.","commit_id":"02fb608b8d6782b25b3be53d12c997226cb64728"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"b968a1a00eb6993c9ccf0f8090dfa5aae93bec63","unresolved":false,"context_lines":[{"line_number":384,"context_line":"            raise exception.PlanNotFound(plan_id\u003dplan_id)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        extra_info \u003d checkpoint.get(\"extra-info\", None)"},{"line_number":387,"context_line":"        if extra_info is not None and not isinstance(extra_info, dict):"},{"line_number":388,"context_line":"            msg \u003d _(\"Extra-info in checkpoint must be a dict when \""},{"line_number":389,"context_line":"                    \"creating a checkpoint.\")"},{"line_number":390,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":391,"context_line":"        checkpoint_extra_info \u003d None"},{"line_number":392,"context_line":"        if extra_info is not None:"},{"line_number":393,"context_line":"            checkpoint_extra_info \u003d jsonutils.dumps(extra_info)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a8ec9b2_ef303b0a","line":390,"range":{"start_line":387,"start_character":0,"end_line":390,"end_character":52},"in_reply_to":"9a89bdaa_54f77358","updated":"2016-09-14 01:31:02.000000000","message":"why? If you won\u0027t, you should update the doc first.","commit_id":"02fb608b8d6782b25b3be53d12c997226cb64728"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"267a1131511793245a721faa6b4b656b6bac1207","unresolved":false,"context_lines":[{"line_number":384,"context_line":"            raise exception.PlanNotFound(plan_id\u003dplan_id)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        extra_info \u003d checkpoint.get(\"extra-info\", None)"},{"line_number":387,"context_line":"        if extra_info is not None and not isinstance(extra_info, dict):"},{"line_number":388,"context_line":"            msg \u003d _(\"Extra-info in checkpoint must be a dict when \""},{"line_number":389,"context_line":"                    \"creating a checkpoint.\")"},{"line_number":390,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":391,"context_line":"        checkpoint_extra_info \u003d None"},{"line_number":392,"context_line":"        if extra_info is not None:"},{"line_number":393,"context_line":"            checkpoint_extra_info \u003d jsonutils.dumps(extra_info)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a89bdaa_19e60415","line":390,"range":{"start_line":387,"start_character":0,"end_line":390,"end_character":52},"in_reply_to":"9a89bdaa_790c9994","updated":"2016-09-13 01:15:07.000000000","message":"I copy the descriptions about the key of \u0027extra_info\u0027, you can see it define the format of it, and can define a regular expression to check it.\n\nKeys that are officially recognized\nwill be in the format of ``karbor-\u003ckey-name\u003e`` for example\n``karbor-created-by``.\n\nAnything that is not officially defined *should* use the\nprefix: ``x-\u003capplication\u003e--\u003ckey-name\u003e``.\nFor example, ``x-trigger-master--tigger-id``","commit_id":"02fb608b8d6782b25b3be53d12c997226cb64728"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"e9486c9d864a036212bf55105c7018dc180cb692","unresolved":false,"context_lines":[{"line_number":384,"context_line":"            raise exception.PlanNotFound(plan_id\u003dplan_id)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        extra_info \u003d checkpoint.get(\"extra-info\", None)"},{"line_number":387,"context_line":"        if extra_info is not None and not isinstance(extra_info, dict):"},{"line_number":388,"context_line":"            msg \u003d _(\"Extra-info in checkpoint must be a dict when \""},{"line_number":389,"context_line":"                    \"creating a checkpoint.\")"},{"line_number":390,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":391,"context_line":"        checkpoint_extra_info \u003d None"},{"line_number":392,"context_line":"        if extra_info is not None:"},{"line_number":393,"context_line":"            checkpoint_extra_info \u003d jsonutils.dumps(extra_info)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a89bdaa_790c9994","line":390,"range":{"start_line":387,"start_character":0,"end_line":390,"end_character":52},"in_reply_to":"9a89bdaa_f7073b7f","updated":"2016-09-12 11:43:36.000000000","message":"The checkpoint-metadata.rst only define the template format of the \u0027extra-info\u0027. I don\u0027t think the keys of \u0027extra-info\u0027 have a certain value.","commit_id":"02fb608b8d6782b25b3be53d12c997226cb64728"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"94d687a884b4fa4340c125950eb7d8d9add806aa","unresolved":false,"context_lines":[{"line_number":383,"context_line":"            raise exception.PlanNotFound(plan_id\u003dplan_id)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        extra_info \u003d checkpoint.get(\"extra-info\", None)"},{"line_number":386,"context_line":"        if extra_info is not None and not isinstance(extra_info, dict):"},{"line_number":387,"context_line":"            msg \u003d _(\"Extra-info in checkpoint must be a dict when \""},{"line_number":388,"context_line":"                    \"creating a checkpoint.\")"},{"line_number":389,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a6eadb0_cd8a631a","line":386,"range":{"start_line":386,"start_character":11,"end_line":386,"end_character":70},"updated":"2016-12-20 08:29:27.000000000","message":"As Saggi said, the keys of \u0027extra-info\u0027 must be string. So it is better to add that check. A simple \u0027all\u0027 statement can do it.","commit_id":"d380f0f79e22a55586aba0efc3231c0fa5d9569a"},{"author":{"_account_id":21648,"name":"zhangshuai","email":"446077695@qq.com","username":"zhangshuai"},"change_message_id":"507b5e00f720028e7439d4594f4d3f110d93eb9b","unresolved":false,"context_lines":[{"line_number":383,"context_line":"            raise exception.PlanNotFound(plan_id\u003dplan_id)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        extra_info \u003d checkpoint.get(\"extra-info\", None)"},{"line_number":386,"context_line":"        if extra_info is not None and not isinstance(extra_info, dict):"},{"line_number":387,"context_line":"            msg \u003d _(\"Extra-info in checkpoint must be a dict when \""},{"line_number":388,"context_line":"                    \"creating a checkpoint.\")"},{"line_number":389,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a6eadb0_333fb626","line":386,"range":{"start_line":386,"start_character":11,"end_line":386,"end_character":70},"in_reply_to":"1a6eadb0_cd8a631a","updated":"2016-12-20 09:15:37.000000000","message":"must be string? or must be dict?","commit_id":"d380f0f79e22a55586aba0efc3231c0fa5d9569a"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"73e40ecb543946dd081fe115909f4ad25d22aa07","unresolved":false,"context_lines":[{"line_number":386,"context_line":"            raise exception.PlanNotFound(plan_id\u003dplan_id)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        extra_info \u003d checkpoint.get(\"extra-info\", None)"},{"line_number":389,"context_line":"        if extra_info is not None and not isinstance(extra_info, dict):"},{"line_number":390,"context_line":"            msg \u003d _(\"Extra-info in checkpoint must be a dict when \""},{"line_number":391,"context_line":"                    \"creating a checkpoint.\")"},{"line_number":392,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        if isinstance(extra_info, dict) and \\"},{"line_number":395,"context_line":"                not all(map(_isstring, extra_info.keys())):"},{"line_number":396,"context_line":"            msg \u003d _(\"Key of extra-info in checkpoint must be string when\""},{"line_number":397,"context_line":"                    \"creating a checkpoint.\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a6eadb0_849c995e","line":394,"range":{"start_line":389,"start_character":0,"end_line":394,"end_character":45},"updated":"2016-12-21 02:07:50.000000000","message":"IMO, It is better to write the codes like this:\nif extra_info is not None:\n    if not isinstance(extra_info, dict):\n        raise \n    if not all(map(lambda s: isinstance(s, str), extra_info.keys())):\n        raise","commit_id":"039188829432f4a99327721ce88fbcaa605753c1"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"73e40ecb543946dd081fe115909f4ad25d22aa07","unresolved":false,"context_lines":[{"line_number":391,"context_line":"                    \"creating a checkpoint.\")"},{"line_number":392,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        if isinstance(extra_info, dict) and \\"},{"line_number":395,"context_line":"                not all(map(_isstring, extra_info.keys())):"},{"line_number":396,"context_line":"            msg \u003d _(\"Key of extra-info in checkpoint must be string when\""},{"line_number":397,"context_line":"                    \"creating a checkpoint.\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a6eadb0_64585dfb","line":394,"range":{"start_line":394,"start_character":44,"end_line":394,"end_character":45},"updated":"2016-12-21 02:07:50.000000000","message":"Using \"()\" instead of \u0027\\\u0027 is better. For example:\nif *** and (\n    ***):","commit_id":"039188829432f4a99327721ce88fbcaa605753c1"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"73e40ecb543946dd081fe115909f4ad25d22aa07","unresolved":false,"context_lines":[{"line_number":392,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        if isinstance(extra_info, dict) and \\"},{"line_number":395,"context_line":"                not all(map(_isstring, extra_info.keys())):"},{"line_number":396,"context_line":"            msg \u003d _(\"Key of extra-info in checkpoint must be string when\""},{"line_number":397,"context_line":"                    \"creating a checkpoint.\")"},{"line_number":398,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a6eadb0_443a8199","line":395,"range":{"start_line":395,"start_character":28,"end_line":395,"end_character":37},"updated":"2016-12-21 02:07:50.000000000","message":"Using \u0027lambda s: isinstance(s, str)\u0027 is better.","commit_id":"039188829432f4a99327721ce88fbcaa605753c1"}],"smaug/api/v1/providers.py":[{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"ce9005f29ca6a7a962168abbde6db66f10565ae3","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                \u0027status\u0027: checkpoint.get(\u0027status\u0027),"},{"line_number":137,"context_line":"                \u0027protection_plan\u0027: checkpoint.get(\u0027protection_plan\u0027),"},{"line_number":138,"context_line":"                \u0027resource_graph\u0027: checkpoint.get(\u0027resource_graph\u0027),"},{"line_number":139,"context_line":"                \u0027metadata\u0027: checkpoint.get(\u0027user-data\u0027),"},{"line_number":140,"context_line":"            }"},{"line_number":141,"context_line":"        }"},{"line_number":142,"context_line":"        return checkpoint_ref"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_e40f4886","line":139,"range":{"start_line":139,"start_character":16,"end_line":139,"end_character":56},"updated":"2016-08-16 08:53:03.000000000","message":"bp specifies extra-info","commit_id":"6ce8321c34ffbb6aab62240053ff3183539591a9"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"b28dc7052781d4a7ed0fa4c2f121d883657fba44","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                \u0027status\u0027: checkpoint.get(\u0027status\u0027),"},{"line_number":137,"context_line":"                \u0027protection_plan\u0027: checkpoint.get(\u0027protection_plan\u0027),"},{"line_number":138,"context_line":"                \u0027resource_graph\u0027: checkpoint.get(\u0027resource_graph\u0027),"},{"line_number":139,"context_line":"                \u0027metadata\u0027: checkpoint.get(\u0027user-data\u0027),"},{"line_number":140,"context_line":"            }"},{"line_number":141,"context_line":"        }"},{"line_number":142,"context_line":"        return checkpoint_ref"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_38b05f43","line":139,"range":{"start_line":139,"start_character":16,"end_line":139,"end_character":56},"in_reply_to":"3ac371cc_e40f4886","updated":"2016-08-16 09:40:09.000000000","message":"I will wait for the rename patch being merged, then I will update this patch.","commit_id":"6ce8321c34ffbb6aab62240053ff3183539591a9"}]}
