)]}'
{"nova/api/openstack/v2/contrib/cloudpipe.py":[{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"b9826a3b1ad5ec1852bfd6ab3223b8b3a6a89321","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\"Connect your vlan to the world.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import traceback"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import webob"},{"line_number":21,"context_line":"from webob import exc"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F79I%3D","line":18,"updated":"2011-12-19 19:11:33.000000000","message":"unused import","commit_id":"556fab2528b92a50c4657e701f93285230248da2"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"b9826a3b1ad5ec1852bfd6ab3223b8b3a6a89321","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import traceback"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import webob"},{"line_number":21,"context_line":"from webob import exc"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from nova.api.openstack.v2 import extensions"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F79Q%3D","line":20,"updated":"2011-12-19 19:11:33.000000000","message":"unused import","commit_id":"556fab2528b92a50c4657e701f93285230248da2"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"b9826a3b1ad5ec1852bfd6ab3223b8b3a6a89321","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import traceback"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import webob"},{"line_number":21,"context_line":"from webob import exc"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from nova.api.openstack.v2 import extensions"},{"line_number":24,"context_line":"from nova.auth import manager"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F79M%3D","line":21,"updated":"2011-12-19 19:11:33.000000000","message":"unused import","commit_id":"556fab2528b92a50c4657e701f93285230248da2"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"b9826a3b1ad5ec1852bfd6ab3223b8b3a6a89321","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from nova import exception"},{"line_number":30,"context_line":"from nova import flags"},{"line_number":31,"context_line":"from nova import log as logging"},{"line_number":32,"context_line":"from nova.scheduler import api as scheduler_api"},{"line_number":33,"context_line":"from nova import utils"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F79U%3D","line":32,"updated":"2011-12-19 19:11:33.000000000","message":"unused import","commit_id":"556fab2528b92a50c4657e701f93285230248da2"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"b9826a3b1ad5ec1852bfd6ab3223b8b3a6a89321","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                return instance"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _vpn_dict(self, project, vpn_instance):"},{"line_number":84,"context_line":"        rv \u003d {\u0027project_id\u0027: project.id,"},{"line_number":85,"context_line":"              \u0027public_ip\u0027: project.vpn_ip,"},{"line_number":86,"context_line":"              \u0027public_port\u0027: project.vpn_port}"},{"line_number":87,"context_line":"        if vpn_instance:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F788%3D","line":84,"updated":"2011-12-19 19:11:33.000000000","message":"Should this be represented as the \u0027tenant_id\u0027?","commit_id":"556fab2528b92a50c4657e701f93285230248da2"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"b9826a3b1ad5ec1852bfd6ab3223b8b3a6a89321","unresolved":false,"context_lines":[{"line_number":85,"context_line":"              \u0027public_ip\u0027: project.vpn_ip,"},{"line_number":86,"context_line":"              \u0027public_port\u0027: project.vpn_port}"},{"line_number":87,"context_line":"        if vpn_instance:"},{"line_number":88,"context_line":"            rv[\u0027instance_id\u0027] \u003d vpn_instance[\u0027id\u0027]"},{"line_number":89,"context_line":"            rv[\u0027created_at\u0027] \u003d utils.isotime(vpn_instance[\u0027created_at\u0027])"},{"line_number":90,"context_line":"            address \u003d vpn_instance.get(\u0027fixed_ip\u0027, None)"},{"line_number":91,"context_line":"            if address:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F79A%3D","line":88,"updated":"2011-12-19 19:11:33.000000000","message":"Can you use the uuid here? You should keep the dict key the same, though.","commit_id":"556fab2528b92a50c4657e701f93285230248da2"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"b9826a3b1ad5ec1852bfd6ab3223b8b3a6a89321","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                else:"},{"line_number":97,"context_line":"                    rv[\u0027state\u0027] \u003d \u0027down\u0027"},{"line_number":98,"context_line":"            else:"},{"line_number":99,"context_line":"                rv[\u0027state\u0027] \u003d \u0027down - invalid project vpn config\u0027"},{"line_number":100,"context_line":"        else:"},{"line_number":101,"context_line":"            rv[\u0027state\u0027] \u003d \u0027pending\u0027"},{"line_number":102,"context_line":"        return rv"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F784%3D","line":99,"updated":"2011-12-19 19:11:33.000000000","message":"I don\u0027t think we should append this extra data in this field. Is there another way you can convey a bad project config? Or do you we even need to?","commit_id":"556fab2528b92a50c4657e701f93285230248da2"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"b9826a3b1ad5ec1852bfd6ab3223b8b3a6a89321","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    @extensions.admin_only"},{"line_number":105,"context_line":"    def create(self, req, body):"},{"line_number":106,"context_line":"        \"\"\"Create a new cloudpipe instance, if none exists."},{"line_number":107,"context_line":"        "},{"line_number":108,"context_line":"        Requires parameter: project_id"},{"line_number":109,"context_line":"        \"\"\""},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F79E%3D","line":107,"updated":"2011-12-19 19:11:33.000000000","message":"You need to remove this block of whitespace for pep8","commit_id":"556fab2528b92a50c4657e701f93285230248da2"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"b9826a3b1ad5ec1852bfd6ab3223b8b3a6a89321","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        for project in self.auth_manager.get_projects():"},{"line_number":133,"context_line":"            instance \u003d self._get_cloudpipe_for_project(context, project.id)"},{"line_number":134,"context_line":"            vpns.append(self._vpn_dict(project, instance))"},{"line_number":135,"context_line":"        return {\u0027items\u0027: vpns}"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"class Cloudpipe(extensions.ExtensionDescriptor):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F780%3D","line":135,"updated":"2011-12-19 19:11:33.000000000","message":"Can you call the top-level key here \u0027cloudpipes\u0027 or \u0027vpns\u0027? I\u0027d just like to see the extra context since it is so easy to do so.","commit_id":"556fab2528b92a50c4657e701f93285230248da2"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"b6b8d8cbc3f366cafededdc937c5027bf36919fb","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            instance \u003d self._get_cloudpipe_for_project(ctxt, proj)"},{"line_number":119,"context_line":"        return {\u0027instance_id\u0027: instance[\u0027uuid\u0027]}"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @extensions.admin_only"},{"line_number":122,"context_line":"    def index(self, req):"},{"line_number":123,"context_line":"        \"\"\"Show admins the list of running cloudpipe instances.\"\"\""},{"line_number":124,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAC3%2F%2F7qQ%3D","line":121,"updated":"2011-12-20 19:13:02.000000000","message":"You can drop all of these admin_only wrappers.","commit_id":"83cf796cb73928575f18e350b7570269525c0124"},{"author":{"_account_id":1132,"name":"Brian Waldon","email":"brian@waldon.cc","username":"bcwaldon"},"change_message_id":"b6b8d8cbc3f366cafededdc937c5027bf36919fb","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    name \u003d \"Cloudpipe\""},{"line_number":145,"context_line":"    alias \u003d \"os-cloudpipe\""},{"line_number":146,"context_line":"    namespace \u003d \"http://docs.openstack.org/ext/cloudpipe/api/v1.1\""},{"line_number":147,"context_line":"    updated \u003d \"2011-12-16T00:00:00+00:00\""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def get_resources(self):"},{"line_number":150,"context_line":"        resources \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAC3%2F%2F7qY%3D","line":147,"updated":"2011-12-20 19:13:02.000000000","message":"Can you add this line here:\n\nadmin_only \u003d True","commit_id":"83cf796cb73928575f18e350b7570269525c0124"},{"author":{"_account_id":209,"name":"Josh Kearney","email":"josh@jk0.org","username":"jk0"},"change_message_id":"6c26ba282191321106db4ec05cc4b157ed7f5846","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    name \u003d \"Cloudpipe\""},{"line_number":146,"context_line":"    alias \u003d \"os-cloudpipe\""},{"line_number":147,"context_line":"    namespace \u003d \"http://docs.openstack.org/ext/cloudpipe/api/v1.1\""},{"line_number":148,"context_line":"    updated \u003d \"2011-12-16T00:00:00+00:00\""},{"line_number":149,"context_line":"    admin_only \u003d True"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAC3%2F%2F6yE%3D","line":147,"updated":"2011-12-23 18:08:39.000000000","message":"A change went in recently that moved the extension namespaces to compute/ext.","commit_id":"49d98ae14494180511156fd8d3ce53bdf4c13655"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f10fe8c6a2d479183bb5b67fa8594dae0bc6e19c","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        #             or db.instance_get_project_vpn"},{"line_number":75,"context_line":"        for instance in db.instance_get_all_by_project(context, project_id):"},{"line_number":76,"context_line":"            if (instance[\u0027image_id\u0027] \u003d\u003d str(FLAGS.vpn_image_id)"},{"line_number":77,"context_line":"                and not instance[\u0027vm_state\u0027] in [vm_states.DELETED]):"},{"line_number":78,"context_line":"                return instance"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _vpn_dict(self, project, vpn_instance):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAADH%2F%2F%2B%2Bk%3D","line":77,"updated":"2012-01-03 16:33:13.000000000","message":"*raises eyebrow* interesting idiom.  Given that there\u0027s only one state here, I would prefer \u0027!\u003d\u0027 to \u0027not in\u0027 (and \u0027not in\u0027 vs. \u0027not x in y\u0027).  Just a stylistic comment, though.","commit_id":"d57126b2b8b4ff433029bb20716ccb0fbc7fb41e"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"bcab8302501e830b3ced18841a7e31d774b7d13d","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        #             or db.instance_get_project_vpn"},{"line_number":75,"context_line":"        for instance in db.instance_get_all_by_project(context, project_id):"},{"line_number":76,"context_line":"            if (instance[\u0027image_id\u0027] \u003d\u003d str(FLAGS.vpn_image_id)"},{"line_number":77,"context_line":"                and not instance[\u0027vm_state\u0027] in [vm_states.DELETED]):"},{"line_number":78,"context_line":"                return instance"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _vpn_dict(self, project, vpn_instance):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAADH%2F%2F%2B6g%3D","line":77,"updated":"2012-01-03 18:46:44.000000000","message":"*raises eyebrow* interesting idiom. Given that there\u0027s only one state here, I would prefer \u0027!\u003d\u0027 to \u0027not in\u0027 (and \u0027not in\u0027 vs. \u0027not x in y\u0027). Just a stylistic comment, though.","commit_id":"7663f953fc7be801983331cc9ff0af1a71b4528c"}],"nova/tests/api/openstack/v2/contrib/test_cloudpipe.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f10fe8c6a2d479183bb5b67fa8594dae0bc6e19c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self.app \u003d fakes.wsgi_app()"},{"line_number":113,"context_line":"        # get through fault,ratelimit,serialize,extensions,... middlewares"},{"line_number":114,"context_line":"        v2_app \u003d self.app[\u0027/v2\u0027].application.application.application.\\"},{"line_number":115,"context_line":"                 application.application"},{"line_number":116,"context_line":"        route \u003d v2_app.map.match(\u0027/1234/os-cloudpipe\u0027)"},{"line_number":117,"context_line":"        self.controller \u003d route[\u0027controller\u0027].controller"},{"line_number":118,"context_line":"        fakes.stub_out_networking(self.stubs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAADH%2F%2F%2B%2Bg%3D","line":115,"updated":"2012-01-03 16:33:13.000000000","message":"*cough*\n\nThat\u0027s all I have to say about this.\n\n*cough*\n\n(Just wait until I remove two middlewares!)","commit_id":"d57126b2b8b4ff433029bb20716ccb0fbc7fb41e"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"bcab8302501e830b3ced18841a7e31d774b7d13d","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self.app \u003d fakes.wsgi_app()"},{"line_number":113,"context_line":"        # get through fault,ratelimit,serialize,extensions,... middlewares"},{"line_number":114,"context_line":"        v2_app \u003d self.app[\u0027/v2\u0027].application.application.application.\\"},{"line_number":115,"context_line":"                 application.application"},{"line_number":116,"context_line":"        route \u003d v2_app.map.match(\u0027/1234/os-cloudpipe\u0027)"},{"line_number":117,"context_line":"        self.controller \u003d route[\u0027controller\u0027].controller"},{"line_number":118,"context_line":"        fakes.stub_out_networking(self.stubs)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAADH%2F%2F%2B6c%3D","line":115,"updated":"2012-01-03 18:46:44.000000000","message":"*cough*\n\nThat\u0027s all I have to say about this.\n\n*cough*\n\n(Just wait until I remove two middlewares!)","commit_id":"7663f953fc7be801983331cc9ff0af1a71b4528c"}]}
