)]}'
{"nova/api/openstack/compute/plugins/v3/agents.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"03f5d3eeaf4f1212cf7e5a208486b635453e3d04","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            url \u003d para[\u0027url\u0027]"},{"line_number":100,"context_line":"            md5hash \u003d para[\u0027md5hash\u0027]"},{"line_number":101,"context_line":"            version \u003d para[\u0027version\u0027]"},{"line_number":102,"context_line":"        except (TypeError, KeyError):"},{"line_number":103,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F50U%3D","line":102,"updated":"2013-06-06 12:24:23.000000000","message":"See below comment about HTTPUnprocessableEntity","commit_id":"254f9f4818f666ace8f262890e39189af61114b4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"03f5d3eeaf4f1212cf7e5a208486b635453e3d04","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":119,"context_line":"        authorize(context)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        try:"},{"line_number":122,"context_line":"            db.agent_build_destroy(context, id)"},{"line_number":123,"context_line":"        except exception.AgentBuildNotFound as ex:"},{"line_number":124,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dex.format_message())"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F508%3D","line":121,"updated":"2013-06-06 12:24:23.000000000","message":"Ivan - could you double check the http status code returned here. I suspect it\u0027s not correct. I think this is a good reference for what it should be set to depending on what agent_build_destroy actually does. http://stackoverflow.com/questions/2342579/http-status-code-for-update-and-delete\n\nAlso update the corresponding test suite to check for the correct status code","commit_id":"254f9f4818f666ace8f262890e39189af61114b4"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"58e1f61005ffd4071725e87edfd0666368962973","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":119,"context_line":"        authorize(context)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        try:"},{"line_number":122,"context_line":"            db.agent_build_destroy(context, id)"},{"line_number":123,"context_line":"        except exception.AgentBuildNotFound as ex:"},{"line_number":124,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dex.format_message())"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F3RU%3D","line":121,"in_reply_to":"AAAAPX%2F%2F508%3D","updated":"2013-06-07 07:19:55.000000000","message":"I think it should be done in another patch after the patch:https://review.openstack.org/#/c/30045/ has been accepted.","commit_id":"254f9f4818f666ace8f262890e39189af61114b4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"03f5d3eeaf4f1212cf7e5a208486b635453e3d04","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            version \u003d agent[\u0027version\u0027]"},{"line_number":137,"context_line":"            url \u003d agent[\u0027url\u0027]"},{"line_number":138,"context_line":"            md5hash \u003d agent[\u0027md5hash\u0027]"},{"line_number":139,"context_line":"        except (TypeError, KeyError):"},{"line_number":140,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F50Y%3D","line":139,"updated":"2013-06-06 12:24:23.000000000","message":"This is a webdav status code which I don\u0027t think we should be using. I think probably HTTPBadRequest is better. Worth checking if the unittest covers this too (and other status codes generally)","commit_id":"254f9f4818f666ace8f262890e39189af61114b4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"03f5d3eeaf4f1212cf7e5a208486b635453e3d04","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                                                 \u0027url\u0027: url,"},{"line_number":149,"context_line":"                                                 \u0027md5hash\u0027: md5hash})"},{"line_number":150,"context_line":"            agent[\u0027agent_id\u0027] \u003d agent_build_ref.id"},{"line_number":151,"context_line":"        except Exception as ex:"},{"line_number":152,"context_line":"            raise webob.exc.HTTPServerError(str(ex))"},{"line_number":153,"context_line":"        return {\u0027agent\u0027: agent}"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F50E%3D","line":151,"updated":"2013-06-06 12:24:23.000000000","message":"This is pretty generic. I wonder if we can be more precise in certain cases here. Might not matter - just a thought :-)","commit_id":"254f9f4818f666ace8f262890e39189af61114b4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"03f5d3eeaf4f1212cf7e5a208486b635453e3d04","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    def get_resources(self):"},{"line_number":165,"context_line":"        resource \u003d [extensions.ResourceExtension(ALIAS,"},{"line_number":166,"context_line":"                                                AgentController())]"},{"line_number":167,"context_line":"        return resource"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F52g%3D","line":167,"updated":"2013-06-06 12:24:23.000000000","message":"You\u0027ll need to also implement a get_controller_extensions() function which returns an empty list as its an abstract function V3APIExtensionBase and the extension will not load without it","commit_id":"254f9f4818f666ace8f262890e39189af61114b4"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"014f3883788221b257264d4fcdf930e93dd04f3a","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                                                AgentController())]"},{"line_number":167,"context_line":"        return resource"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def get_controller_extensions(self):"},{"line_number":170,"context_line":"        controller \u003d EvacuateController()"},{"line_number":171,"context_line":"        extension \u003d extensions.ControllerExtension(self, \u0027servers\u0027, controller)"},{"line_number":172,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPX%2F%2F2Gk%3D","line":169,"updated":"2013-06-07 17:57:15.000000000","message":"It\u0027s  bit odd to have a method starting with get_ that has a side effect and always returns [].  So this should have a comment explaining why.","commit_id":"947ec132a41cacd74fbcec7dacbeec27f5b44304"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"fe158638cf62d903b7cf9f95c2c5b57f83b5fe41","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                                                AgentController())]"},{"line_number":167,"context_line":"        return resource"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def get_controller_extensions(self):"},{"line_number":170,"context_line":"        controller \u003d EvacuateController()"},{"line_number":171,"context_line":"        extension \u003d extensions.ControllerExtension(self, \u0027servers\u0027, controller)"},{"line_number":172,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPX%2F%2F1GQ%3D","line":169,"in_reply_to":"AAAAPX%2F%2F2Gk%3D","updated":"2013-06-08 06:17:35.000000000","message":"sorry, typo.","commit_id":"947ec132a41cacd74fbcec7dacbeec27f5b44304"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"ac943ae80cf58787428c7e957d3292d976163387","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                                                AgentController())]"},{"line_number":167,"context_line":"        return resource"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def get_controller_extensions(self):"},{"line_number":170,"context_line":"        controller \u003d EvacuateController()"},{"line_number":171,"context_line":"        extension \u003d extensions.ControllerExtension(self, \u0027servers\u0027, controller)"},{"line_number":172,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPX%2F%2F1F4%3D","line":169,"in_reply_to":"AAAAPX%2F%2F2Gk%3D","updated":"2013-06-08 06:19:47.000000000","message":"we need get_controller_extensions() function which returns an empty list as its an abstract function V3APIExtensionBase and the extension will not load without it.","commit_id":"947ec132a41cacd74fbcec7dacbeec27f5b44304"}],"setup.cfg":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"03f5d3eeaf4f1212cf7e5a208486b635453e3d04","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    keypairs \u003d nova.api.openstack.compute.plugins.v3.keypairs:Keypairs"},{"line_number":61,"context_line":"    ips \u003d nova.api.openstack.compute.plugins.v3.ips:IPs"},{"line_number":62,"context_line":"    consoles \u003d nova.api.openstack.compute.plugins.v3.consoles:Consoles"},{"line_number":63,"context_line":"    agents \u003d nova.api.openstack.compute.plugins.v3.agents:Agents"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"nova.api.v3.extensions.server.create \u003d"},{"line_number":66,"context_line":"    keypairs_create \u003d nova.api.openstack.compute.plugins.v3.keypairs:Keypairs"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"AAAAPX%2F%2F5zk%3D","line":63,"updated":"2013-06-06 12:24:23.000000000","message":"Since you\u0027ll need to respin the patch anyway so...... I suspect we\u0027re going to a get a lot of merge conflicts with this file. The extensions are not currently in alphabetical order, but I\u0027ll try to get a patch through which makes them so. It will hopefully help minimise merge conflicts with multiple people touching this file with each extension added. For now could you add this one to to the top of the extension list?","commit_id":"254f9f4818f666ace8f262890e39189af61114b4"}]}
