)]}'
{"smaug/api/v1/restorations.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"663c2f7f77270e4b16493c499babd22a3bc1eef0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_6ba59545","line":1,"range":{"start_line":1,"start_character":24,"end_line":1,"end_character":30},"updated":"2016-02-29 15:19:32.000000000","message":"we need to rename it to Restore restorations is usually used for Antiques","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"d54e49bb95765386a5073c6ab863d67b840710a3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_c1345e4b","line":1,"range":{"start_line":1,"start_character":24,"end_line":1,"end_character":30},"in_reply_to":"9aed3d3a_6ba59545","updated":"2016-03-01 03:25:16.000000000","message":"Done","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"663c2f7f77270e4b16493c499babd22a3bc1eef0","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"import six"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"query_restoration_filters_opt \u003d cfg.ListOpt("},{"line_number":37,"context_line":"    \u0027query_restoration_filters\u0027,"},{"line_number":38,"context_line":"    default\u003d[\u0027status\u0027],"},{"line_number":39,"context_line":"    help\u003d\"Restoration filter options which \""}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_4b79b1c7","line":36,"range":{"start_line":36,"start_character":6,"end_line":36,"end_character":16},"updated":"2016-02-29 15:19:32.000000000","message":"restore","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"d54e49bb95765386a5073c6ab863d67b840710a3","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"import six"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"query_restoration_filters_opt \u003d cfg.ListOpt("},{"line_number":37,"context_line":"    \u0027query_restoration_filters\u0027,"},{"line_number":38,"context_line":"    default\u003d[\u0027status\u0027],"},{"line_number":39,"context_line":"    help\u003d\"Restoration filter options which \""}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_a1379a4b","line":36,"range":{"start_line":36,"start_character":6,"end_line":36,"end_character":16},"in_reply_to":"9aed3d3a_4b79b1c7","updated":"2016-03-01 03:25:16.000000000","message":"Done","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"663c2f7f77270e4b16493c499babd22a3bc1eef0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"import six"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"query_restoration_filters_opt \u003d cfg.ListOpt("},{"line_number":37,"context_line":"    \u0027query_restoration_filters\u0027,"},{"line_number":38,"context_line":"    default\u003d[\u0027status\u0027],"},{"line_number":39,"context_line":"    help\u003d\"Restoration filter options which \""},{"line_number":40,"context_line":"    \"non-admin user could use to \""}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_eb46c579","line":37,"range":{"start_line":37,"start_character":11,"end_line":37,"end_character":22},"updated":"2016-02-29 15:19:32.000000000","message":"ditto","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"663c2f7f77270e4b16493c499babd22a3bc1eef0","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    smaug.policy.enforce(context, _action, target)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class RestorationViewBuilder(common.ViewBuilder):"},{"line_number":67,"context_line":"    \"\"\"Model a server API response as a python dictionary.\"\"\""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    _collection_name \u003d \"restorations\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_2b242dc3","line":66,"range":{"start_line":66,"start_character":6,"end_line":66,"end_character":17},"updated":"2016-02-29 15:19:32.000000000","message":"ditto","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"d54e49bb95765386a5073c6ab863d67b840710a3","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    smaug.policy.enforce(context, _action, target)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class RestorationViewBuilder(common.ViewBuilder):"},{"line_number":67,"context_line":"    \"\"\"Model a server API response as a python dictionary.\"\"\""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    _collection_name \u003d \"restorations\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_0143e6b2","line":66,"range":{"start_line":66,"start_character":6,"end_line":66,"end_character":17},"in_reply_to":"9aed3d3a_2b242dc3","updated":"2016-03-01 03:25:16.000000000","message":"Done","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"663c2f7f77270e4b16493c499babd22a3bc1eef0","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        return restorations_dict"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class RestorationsController(wsgi.Controller):"},{"line_number":124,"context_line":"    \"\"\"The Restorations API controller for the OpenStack API.\"\"\""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    _view_builder_class \u003d RestorationViewBuilder"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_4b0ed13b","line":123,"range":{"start_line":123,"start_character":6,"end_line":123,"end_character":18},"updated":"2016-02-29 15:19:32.000000000","message":"Restore","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"d54e49bb95765386a5073c6ab863d67b840710a3","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        return restorations_dict"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class RestorationsController(wsgi.Controller):"},{"line_number":124,"context_line":"    \"\"\"The Restorations API controller for the OpenStack API.\"\"\""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    _view_builder_class \u003d RestorationViewBuilder"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_21442ab5","line":123,"range":{"start_line":123,"start_character":6,"end_line":123,"end_character":18},"in_reply_to":"9aed3d3a_4b0ed13b","updated":"2016-03-01 03:25:16.000000000","message":"Done","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"663c2f7f77270e4b16493c499babd22a3bc1eef0","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        if context.is_admin and all_tenants:"},{"line_number":203,"context_line":"            # Need to remove all_tenants to pass the filtering below."},{"line_number":204,"context_line":"            del filters[\u0027all_tenants\u0027]"},{"line_number":205,"context_line":"            restorations \u003d objects.RestoreList.get_all("},{"line_number":206,"context_line":"                context, marker, limit,"},{"line_number":207,"context_line":"                sort_keys\u003dsort_keys,"},{"line_number":208,"context_line":"                sort_dirs\u003dsort_dirs,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_2e39dbd7","line":205,"range":{"start_line":205,"start_character":12,"end_line":205,"end_character":24},"updated":"2016-02-29 15:19:32.000000000","message":"restore","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"d54e49bb95765386a5073c6ab863d67b840710a3","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        if context.is_admin and all_tenants:"},{"line_number":203,"context_line":"            # Need to remove all_tenants to pass the filtering below."},{"line_number":204,"context_line":"            del filters[\u0027all_tenants\u0027]"},{"line_number":205,"context_line":"            restorations \u003d objects.RestoreList.get_all("},{"line_number":206,"context_line":"                context, marker, limit,"},{"line_number":207,"context_line":"                sort_keys\u003dsort_keys,"},{"line_number":208,"context_line":"                sort_dirs\u003dsort_dirs,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_8115369d","line":205,"range":{"start_line":205,"start_character":12,"end_line":205,"end_character":24},"in_reply_to":"9aed3d3a_2e39dbd7","updated":"2016-03-01 03:25:16.000000000","message":"Done","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"}],"smaug/api/v1/router.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"663c2f7f77270e4b16493c499babd22a3bc1eef0","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from smaug.api.openstack import ProjectMapper"},{"line_number":14,"context_line":"from smaug.api.v1 import plans"},{"line_number":15,"context_line":"from smaug.api.v1 import restorations"},{"line_number":16,"context_line":"from smaug.api.v1 import scheduled_operations"},{"line_number":17,"context_line":"from smaug.wsgi import common as wsgi_common"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_6e5da314","line":15,"range":{"start_line":15,"start_character":25,"end_line":15,"end_character":37},"updated":"2016-02-29 15:19:32.000000000","message":"restore","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"d54e49bb95765386a5073c6ab863d67b840710a3","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from smaug.api.openstack import ProjectMapper"},{"line_number":14,"context_line":"from smaug.api.v1 import plans"},{"line_number":15,"context_line":"from smaug.api.v1 import restorations"},{"line_number":16,"context_line":"from smaug.api.v1 import scheduled_operations"},{"line_number":17,"context_line":"from smaug.wsgi import common as wsgi_common"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_812ed6f8","line":15,"range":{"start_line":15,"start_character":25,"end_line":15,"end_character":37},"in_reply_to":"9aed3d3a_6e5da314","updated":"2016-03-01 03:25:16.000000000","message":"Done","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"663c2f7f77270e4b16493c499babd22a3bc1eef0","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                        controller\u003dplans_resources,"},{"line_number":31,"context_line":"                        collection\u003d{},"},{"line_number":32,"context_line":"                        member\u003d{\u0027action\u0027: \u0027POST\u0027})"},{"line_number":33,"context_line":"        mapper.resource(\"restoration\", \"restorations\","},{"line_number":34,"context_line":"                        controller\u003drestorations_resources,"},{"line_number":35,"context_line":"                        collection\u003d{},"},{"line_number":36,"context_line":"                        member\u003d{\u0027action\u0027: \u0027POST\u0027})"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_4eb1bf46","line":33,"range":{"start_line":33,"start_character":25,"end_line":33,"end_character":36},"updated":"2016-02-29 15:19:32.000000000","message":"ditto","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"d54e49bb95765386a5073c6ab863d67b840710a3","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                        controller\u003dplans_resources,"},{"line_number":31,"context_line":"                        collection\u003d{},"},{"line_number":32,"context_line":"                        member\u003d{\u0027action\u0027: \u0027POST\u0027})"},{"line_number":33,"context_line":"        mapper.resource(\"restoration\", \"restorations\","},{"line_number":34,"context_line":"                        controller\u003drestorations_resources,"},{"line_number":35,"context_line":"                        collection\u003d{},"},{"line_number":36,"context_line":"                        member\u003d{\u0027action\u0027: \u0027POST\u0027})"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_6131125a","line":33,"range":{"start_line":33,"start_character":25,"end_line":33,"end_character":36},"in_reply_to":"9aed3d3a_4eb1bf46","updated":"2016-03-01 03:25:16.000000000","message":"Done","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"}],"smaug/tests/unit/api/v1/test_plans.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"663c2f7f77270e4b16493c499babd22a3bc1eef0","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    def test_plan_delete(self, moak_plan_get):\r"},{"line_number":143,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v1/plans\u0027)\r"},{"line_number":144,"context_line":"        self.controller.\\\r"},{"line_number":145,"context_line":"            delete(req, \u00272a9ce1f3-cc1a-4516-9435-0ebb13caa398\u0027)\r"},{"line_number":146,"context_line":"        self.assertTrue(moak_plan_get.called)\r"},{"line_number":147,"context_line":"\r"},{"line_number":148,"context_line":"    def test_plan_delete_Invalid(self):\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_6e7c83b5","line":145,"range":{"start_line":145,"start_character":12,"end_line":145,"end_character":18},"updated":"2016-02-29 15:19:32.000000000","message":"unrelated but OK next time is best in another patch","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"663c2f7f77270e4b16493c499babd22a3bc1eef0","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    def test_plan_delete_Invalid(self):\r"},{"line_number":149,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v1/plans/1\u0027)\r"},{"line_number":150,"context_line":"        self.assertRaises(\r"},{"line_number":151,"context_line":"            exc.HTTPBadRequest, self.controller.delete,\r"},{"line_number":152,"context_line":"            req, \"1\")\r"},{"line_number":153,"context_line":"\r"},{"line_number":154,"context_line":"    @mock.patch(\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_8e562728","line":151,"range":{"start_line":151,"start_character":48,"end_line":151,"end_character":54},"updated":"2016-02-29 15:19:32.000000000","message":"ditto","commit_id":"16046900f373bae7d2f9f1f413defb70cf0dc4e4"}]}
