)]}'
{"nova/api/openstack/compute/plugins/v3/attach_interfaces.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"d063615925200beea75f77e66326f6494a8aa8cf","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        return {\u0027interfaceAttachments\u0027: results}"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class Attach_interfaces(extensions.V3APIExtensionBase):"},{"line_number":177,"context_line":"    \"\"\"Attach interface support.\"\"\""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    name \u003d \"AttachInterfaces\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2Fvv4%3D","line":176,"updated":"2013-06-22 23:48:24.000000000","message":"I think this should be renamed to AttachInterfaces","commit_id":"a87ae677d5408aec848278ca3f999b8e9b2ead50"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"d063615925200beea75f77e66326f6494a8aa8cf","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    version \u003d 1"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def get_resources(self):"},{"line_number":185,"context_line":"        res \u003d [extensions.ResourceExtension(\u0027os-attach-interfaces\u0027,"},{"line_number":186,"context_line":"                                            InterfaceAttachmentController(),"},{"line_number":187,"context_line":"                                            parent\u003ddict("},{"line_number":188,"context_line":"                                                member_name\u003d\u0027server\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2Fvv8%3D","line":185,"updated":"2013-06-22 23:48:24.000000000","message":"Perhaps use ALIAS here instead of explicit os-attach-interfaces?","commit_id":"a87ae677d5408aec848278ca3f999b8e9b2ead50"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d82cea53e064d8cda0c2e8cf4527ade92e98dbb3","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        port_id \u003d id"},{"line_number":64,"context_line":"        try:"},{"line_number":65,"context_line":"            self.compute_api.get(context, server_id)"},{"line_number":66,"context_line":"        except exception.NotFound:"},{"line_number":67,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F%2B%2F0%3D","line":65,"updated":"2013-07-08 02:37:29.000000000","message":"Catch InstanceNotFound better than generic exception","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d82cea53e064d8cda0c2e8cf4527ade92e98dbb3","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            port_info \u003d self.network_api.show_port(context, port_id)"},{"line_number":71,"context_line":"        except exception.NotFound:"},{"line_number":72,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F%2B%2Fw%3D","line":70,"updated":"2013-07-08 02:37:29.000000000","message":"ditto","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"5f42660d40670e62baac71109d954edb3e0537d3","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            port_info \u003d self.network_api.show_port(context, port_id)"},{"line_number":71,"context_line":"        except exception.NotFound:"},{"line_number":72,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2Fqm8%3D","line":70,"in_reply_to":"AAAAP3%2F%2F%2B%2Fw%3D","updated":"2013-07-14 22:23:22.000000000","message":"I\u0027m not sure we should catch the exceptions.PortNotFoundClient in quantum client.","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0def4a9cd88fd20c571d27874f42f69735c99023","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            port_info \u003d self.network_api.show_port(context, port_id)"},{"line_number":71,"context_line":"        except exception.NotFound:"},{"line_number":72,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2FqXU%3D","line":70,"in_reply_to":"AAAAP3%2F%2Fqm8%3D","updated":"2013-07-15 02:46:59.000000000","message":"i think we shoudn\u0027t. it need more process for quantum api. let\u0027s fix this later","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d82cea53e064d8cda0c2e8cf4527ade92e98dbb3","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if port_info[\u0027port\u0027][\u0027device_id\u0027] !\u003d server_id:"},{"line_number":75,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        return {\u0027interfaceAttachment\u0027: _translate_interface_attachment_view("},{"line_number":78,"context_line":"                port_info[\u0027port\u0027])}"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F%2B%2FM%3D","line":76,"updated":"2013-07-08 02:37:29.000000000","message":"interface_attachment","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d82cea53e064d8cda0c2e8cf4527ade92e98dbb3","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        network_id \u003d None"},{"line_number":86,"context_line":"        port_id \u003d None"},{"line_number":87,"context_line":"        req_ip \u003d None"},{"line_number":88,"context_line":"        if body:"},{"line_number":89,"context_line":"            attachment \u003d body[\u0027interfaceAttachment\u0027]"},{"line_number":90,"context_line":"            network_id \u003d attachment.get(\u0027net_id\u0027, None)"},{"line_number":91,"context_line":"            port_id \u003d attachment.get(\u0027port_id\u0027, None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F%2B%2FQ%3D","line":88,"updated":"2013-07-08 02:37:29.000000000","message":"interface_attachment","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d82cea53e064d8cda0c2e8cf4527ade92e98dbb3","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            LOG.audit(_(\"Attach interface\"), instance\u003dinstance)"},{"line_number":105,"context_line":"            network_info \u003d self.compute_api.attach_interface(context,"},{"line_number":106,"context_line":"                instance, network_id, port_id, req_ip)"},{"line_number":107,"context_line":"        except exception.NotFound as e:"},{"line_number":108,"context_line":"            LOG.exception(e)"},{"line_number":109,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":110,"context_line":"        except NotImplementedError:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F%2B%2Fs%3D","line":107,"updated":"2013-07-08 02:37:29.000000000","message":"ditto","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"7c135b6a3e72f11742a95f6682edb816bd3e4dad","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            raise webob.exc.HTTPNotImplemented(explanation\u003dmsg)"},{"line_number":113,"context_line":"        except exception.InterfaceAttachFailed as e:"},{"line_number":114,"context_line":"            LOG.exception(e)"},{"line_number":115,"context_line":"            msg \u003d _(\"Failed to attach interface\")"},{"line_number":116,"context_line":"            raise webob.exc.HTTPInternalServerError(explanation\u003dmsg)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        network, mapping \u003d network_info"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F%2FCI%3D","line":115,"updated":"2013-07-08 01:39:04.000000000","message":"Perhaps this should be e.format_message() here?\n\n(and a few other places similarly in this file)","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d82cea53e064d8cda0c2e8cf4527ade92e98dbb3","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        try:"},{"line_number":133,"context_line":"            instance \u003d self.compute_api.get(context, server_id)"},{"line_number":134,"context_line":"            LOG.audit(_(\"Detach interface %s\"), port_id, instance\u003dinstance)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        except exception.NotFound:"},{"line_number":137,"context_line":"            raise exc.HTTPNotFound()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F%2B%2Fk%3D","line":134,"updated":"2013-07-08 02:37:29.000000000","message":"Is this Log correct, it has two arguments","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d82cea53e064d8cda0c2e8cf4527ade92e98dbb3","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            instance \u003d self.compute_api.get(context, server_id)"},{"line_number":134,"context_line":"            LOG.audit(_(\"Detach interface %s\"), port_id, instance\u003dinstance)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        except exception.NotFound:"},{"line_number":137,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":138,"context_line":"        try:"},{"line_number":139,"context_line":"            self.compute_api.detach_interface(context,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F%2B%2Fo%3D","line":136,"updated":"2013-07-08 02:37:29.000000000","message":"ditto","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d82cea53e064d8cda0c2e8cf4527ade92e98dbb3","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            LOG.audit(_(\"Detach interface %s\"), port_id, instance\u003dinstance)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        except exception.NotFound:"},{"line_number":137,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":138,"context_line":"        try:"},{"line_number":139,"context_line":"            self.compute_api.detach_interface(context,"},{"line_number":140,"context_line":"                instance, port_id\u003dport_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F%2B9s%3D","line":137,"updated":"2013-07-08 02:37:29.000000000","message":"raise exc.HTTPNotFound(e.format_message())","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d82cea53e064d8cda0c2e8cf4527ade92e98dbb3","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        try:"},{"line_number":155,"context_line":"            instance \u003d self.compute_api.get(context, server_id)"},{"line_number":156,"context_line":"        except exception.NotFound:"},{"line_number":157,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        results \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F%2B%2Fg%3D","line":156,"updated":"2013-07-08 02:37:29.000000000","message":"ditto","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d82cea53e064d8cda0c2e8cf4527ade92e98dbb3","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        try:"},{"line_number":163,"context_line":"            data \u003d self.network_api.list_ports(context, **search_opts)"},{"line_number":164,"context_line":"        except exception.NotFound:"},{"line_number":165,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":166,"context_line":"        except NotImplementedError:"},{"line_number":167,"context_line":"            msg \u003d _(\"Network driver does not support this function.\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F%2B%2FY%3D","line":164,"updated":"2013-07-08 02:37:29.000000000","message":"ditto","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"5f42660d40670e62baac71109d954edb3e0537d3","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        try:"},{"line_number":163,"context_line":"            data \u003d self.network_api.list_ports(context, **search_opts)"},{"line_number":164,"context_line":"        except exception.NotFound:"},{"line_number":165,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":166,"context_line":"        except NotImplementedError:"},{"line_number":167,"context_line":"            msg \u003d _(\"Network driver does not support this function.\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2FqlY%3D","line":164,"in_reply_to":"AAAAP3%2F%2F%2B%2FY%3D","updated":"2013-07-14 22:23:22.000000000","message":"ditto","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d82cea53e064d8cda0c2e8cf4527ade92e98dbb3","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        ports \u003d data.get(\u0027ports\u0027, [])"},{"line_number":171,"context_line":"        results \u003d [entity_maker(port) for port in ports]"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        return {\u0027interfaceAttachments\u0027: results}"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class AttachInterfaces(extensions.V3APIExtensionBase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F%2B%2FU%3D","line":173,"updated":"2013-07-08 02:37:29.000000000","message":"interface_attachments","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"}],"nova/tests/api/openstack/compute/plugins/v3/test_attach_interfaces.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0877b271333751af48b852ee9c76f8e88c65b3e7","unresolved":false,"context_lines":[{"line_number":115,"context_line":"         \u0027ips\u0027: {\u0027ip\u0027: requested_ip,"},{"line_number":116,"context_line":"                 \u0027enabled\u0027: 1,"},{"line_number":117,"context_line":"                 \u0027netmask\u0027: \u0027255.255.255.0\u0027,"},{"line_number":118,"context_line":"                 \u0027gateway\u0027: \u0027192.168.1.254\u0027}}]"},{"line_number":119,"context_line":"    return network_info"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2FZSg%3D","line":118,"updated":"2013-07-02 19:04:44.000000000","message":"It\u0027d be nice if you could avoid making random non-functional changes like this :)","commit_id":"0a4aadaff1370303c271c7790179a3ffda8f5dc0"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"7c135b6a3e72f11742a95f6682edb816bd3e4dad","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def test_show(self):"},{"line_number":154,"context_line":"        attachments \u003d attach_interfaces.InterfaceAttachmentController()"},{"line_number":155,"context_line":"        req \u003d webob.Request.blank(\u0027/v3/os-attach-interfaces/show\u0027)"},{"line_number":156,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":157,"context_line":"        req.body \u003d jsonutils.dumps({})"},{"line_number":158,"context_line":"        req.headers[\u0027content-type\u0027] \u003d \u0027application/json\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F%2FB8%3D","line":155,"updated":"2013-07-08 01:39:04.000000000","message":"I\u0027m pretty sure this and the original v2 url is wrong. os-attach-interfaces\u0027 parent is servers so it should be something like: /v3/servers/server_id/os-attach-interfaces\n\nCould you verify this with devstack? Although the URLs are not actually used for the request here I\u0027d like these to be valid examples.","commit_id":"ff40add86b7f48bb2397f177b5c9cd18f149a078"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"126c93fdf15dda1efb05065887141f285093b76c","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def test_item_instance_not_found(self):"},{"line_number":154,"context_line":"        attachments \u003d attach_interfaces.InterfaceAttachmentController()"},{"line_number":155,"context_line":"        req \u003d webob.Request.blank(\u0027/v3/server/fake/os-attach-interfaces/\u0027)"},{"line_number":156,"context_line":"        req.method \u003d \u0027GET\u0027"},{"line_number":157,"context_line":"        req.body \u003d jsonutils.dumps({})"},{"line_number":158,"context_line":"        req.headers[\u0027content-type\u0027] \u003d \u0027application/json\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAP3%2F%2FmAY%3D","line":155,"updated":"2013-07-16 02:49:03.000000000","message":"Please fix up these urls to remove the tenant id","commit_id":"8f7f009fa0e4e0f1de465d42adfbcbe7e6535dcf"}]}
