)]}'
{"nova/api/openstack/compute/contrib/instance_usage.py":[{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"05f02ccc83914fe68490c90c9521800b9df7c04f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2013 Rackspace Hosting"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlD4%3D","line":1,"updated":"2013-05-03 03:26:31.000000000","message":"Also openstack foundation right? (I\u0027m really not sure)","commit_id":"3387825e71cd098927d85a47b2465fc12e11d080"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"05f02ccc83914fe68490c90c9521800b9df7c04f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def detail(self, req, resp_obj):"},{"line_number":49,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":50,"context_line":"        auth \u003d authorize(context)"},{"line_number":51,"context_line":"        print auth"},{"line_number":52,"context_line":"        if auth:"},{"line_number":53,"context_line":"            # Attach our slave template to the response object"},{"line_number":54,"context_line":"            resp_obj.attach(xml\u003dInstanceUsagesTemplate())"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlGI%3D","line":51,"updated":"2013-05-03 03:26:31.000000000","message":"forgot ^","commit_id":"3387825e71cd098927d85a47b2465fc12e11d080"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"05f02ccc83914fe68490c90c9521800b9df7c04f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":50,"context_line":"        auth \u003d authorize(context)"},{"line_number":51,"context_line":"        print auth"},{"line_number":52,"context_line":"        if auth:"},{"line_number":53,"context_line":"            # Attach our slave template to the response object"},{"line_number":54,"context_line":"            resp_obj.attach(xml\u003dInstanceUsagesTemplate())"},{"line_number":55,"context_line":"            servers \u003d list(resp_obj.obj[\u0027servers\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlFA%3D","line":52,"updated":"2013-05-03 03:26:31.000000000","message":"can you do if authorize(context): and you did on L38?","commit_id":"3387825e71cd098927d85a47b2465fc12e11d080"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"48a1a57178d876869a6f0e777774f40770f60b0b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":50,"context_line":"        auth \u003d authorize(context)"},{"line_number":51,"context_line":"        print auth"},{"line_number":52,"context_line":"        if auth:"},{"line_number":53,"context_line":"            # Attach our slave template to the response object"},{"line_number":54,"context_line":"            resp_obj.attach(xml\u003dInstanceUsagesTemplate())"},{"line_number":55,"context_line":"            servers \u003d list(resp_obj.obj[\u0027servers\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FiQM%3D","line":52,"in_reply_to":"AAAAOn%2F%2FlFA%3D","updated":"2013-05-06 17:46:50.000000000","message":"Yup, the only reason for the 2 liner was for debug. Taking that out now.","commit_id":"3387825e71cd098927d85a47b2465fc12e11d080"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6f9db70d85b70465e04a2daaec37436c0ddd3c1f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"class Instance_usage(extensions.ExtensionDescriptor):"},{"line_number":62,"context_line":"    \"\"\"Adds launched_at and terminated_at on Instances.\"\"\""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    name \u003d \"InstanceUsage\""},{"line_number":65,"context_line":"    alias \u003d \"OS-INST-USG\""},{"line_number":66,"context_line":"    namespace \u003d (\"http://docs.openstack.org/compute/ext/\""},{"line_number":67,"context_line":"                 \"instance_usage/api/v1.1\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2F0DQ%3D","line":64,"updated":"2013-05-22 14:06:40.000000000","message":"OK, so this is probably annoying picky, but this is user facing, and the user concept is server not instance.\n\nShould this be called ServerUsage?","commit_id":"fb99f423d1c3b8a5bef1252c242f512ad3ce6006"}],"nova/api/openstack/compute/contrib/server_usage.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b35dd61b0dc3b4a271cadcd00d81bd5787c9af5d","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @wsgi.extends"},{"line_number":36,"context_line":"    def show(self, req, resp_obj, id):"},{"line_number":37,"context_line":"        print \"!!!!!!!!!!!!!!!!!!!!!!!\""},{"line_number":38,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":39,"context_line":"        if authorize(context):"},{"line_number":40,"context_line":"            # Attach our slave template to the response object"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FgDQ%3D","line":37,"updated":"2013-05-31 19:15:00.000000000","message":"left a couple of debugging prints in.","commit_id":"f9a2ab901d6b89292a0e32c45f7e3687a22c07a9"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"3e25585d8efa8e41a119c208cb16babd16c88072","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @wsgi.extends"},{"line_number":36,"context_line":"    def show(self, req, resp_obj, id):"},{"line_number":37,"context_line":"        print \"!!!!!!!!!!!!!!!!!!!!!!!\""},{"line_number":38,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":39,"context_line":"        if authorize(context):"},{"line_number":40,"context_line":"            # Attach our slave template to the response object"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Ff6U%3D","line":37,"in_reply_to":"AAAAPH%2F%2FgDQ%3D","updated":"2013-05-31 19:51:41.000000000","message":"Whoops, fixed.","commit_id":"f9a2ab901d6b89292a0e32c45f7e3687a22c07a9"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b35dd61b0dc3b4a271cadcd00d81bd5787c9af5d","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    @wsgi.extends"},{"line_number":49,"context_line":"    def detail(self, req, resp_obj):"},{"line_number":50,"context_line":"        print \"!!!!!!!!!!!!!!!!!!!!!!!\""},{"line_number":51,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":52,"context_line":"        if authorize(context):"},{"line_number":53,"context_line":"            # Attach our slave template to the response object"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FgDM%3D","line":50,"updated":"2013-05-31 19:15:00.000000000","message":"one here.","commit_id":"f9a2ab901d6b89292a0e32c45f7e3687a22c07a9"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"3e25585d8efa8e41a119c208cb16babd16c88072","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    @wsgi.extends"},{"line_number":49,"context_line":"    def detail(self, req, resp_obj):"},{"line_number":50,"context_line":"        print \"!!!!!!!!!!!!!!!!!!!!!!!\""},{"line_number":51,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":52,"context_line":"        if authorize(context):"},{"line_number":53,"context_line":"            # Attach our slave template to the response object"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Ff6Q%3D","line":50,"in_reply_to":"AAAAPH%2F%2FgDM%3D","updated":"2013-05-31 19:51:41.000000000","message":"Done","commit_id":"f9a2ab901d6b89292a0e32c45f7e3687a22c07a9"}],"nova/tests/api/openstack/compute/contrib/test_instance_usage.py":[{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"05f02ccc83914fe68490c90c9521800b9df7c04f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlEk%3D","line":1,"updated":"2013-05-03 03:26:31.000000000","message":"2013","commit_id":"3387825e71cd098927d85a47b2465fc12e11d080"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"05f02ccc83914fe68490c90c9521800b9df7c04f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        req.headers[\u0027Accept\u0027] \u003d self.content_type"},{"line_number":69,"context_line":"        res \u003d req.get_response(fakes.wsgi_app(init_only\u003d(\u0027servers\u0027,)))"},{"line_number":70,"context_line":"        return res"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _get_server(self, body):"},{"line_number":73,"context_line":"        print body"},{"line_number":74,"context_line":"        return jsonutils.loads(body).get(\u0027server\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlD0%3D","line":71,"updated":"2013-05-03 03:26:31.000000000","message":"any reason to create this ^ method instead of use fakes.HttpReuqest.blank from here: https://github.com/openstack/nova/blob/master/nova/tests/api/openstack/fakes.py#L304 as all the tests do?","commit_id":"3387825e71cd098927d85a47b2465fc12e11d080"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"08b34c18c1a00f6f2b6bf8bd0768b3aa149f7b9b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        req.accept \u003d self.content_type"},{"line_number":68,"context_line":"        res \u003d req.get_response(fakes.wsgi_app(init_only\u003d(\u0027servers\u0027,)))"},{"line_number":69,"context_line":"        return res"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _get_server(self, body):"},{"line_number":72,"context_line":"        return jsonutils.loads(body).get(\u0027server\u0027)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FgDo%3D","line":70,"updated":"2013-05-07 17:29:59.000000000","message":"again: any reason to create this ^ method instead of use fakes.HttpReuqest.blank from here: https://github.com/openstack/nova/blob/master/nova/tests/api/openstack/fakes.py#L304 as all the tests do?","commit_id":"fb99f423d1c3b8a5bef1252c242f512ad3ce6006"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"38b647509fcbd23cdfd06b4a84450a25496879c2","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        req.accept \u003d self.content_type"},{"line_number":68,"context_line":"        res \u003d req.get_response(fakes.wsgi_app(init_only\u003d(\u0027servers\u0027,)))"},{"line_number":69,"context_line":"        return res"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _get_server(self, body):"},{"line_number":72,"context_line":"        return jsonutils.loads(body).get(\u0027server\u0027)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Ff%2Bc%3D","line":70,"in_reply_to":"AAAAOn%2F%2FgDo%3D","updated":"2013-05-07 18:00:17.000000000","message":"I\u0027ve already changed it to using fakes.HttpRequest.blank.","commit_id":"fb99f423d1c3b8a5bef1252c242f512ad3ce6006"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6f9db70d85b70465e04a2daaec37436c0ddd3c1f","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        res \u003d self._make_request(url)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        self.assertEqual(res.status_int, 404)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class InstanceUsageXmlTest(InstanceUsageTest):"},{"line_number":124,"context_line":"    content_type \u003d \u0027application/xml\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2F0DI%3D","line":121,"updated":"2013-05-22 14:06:40.000000000","message":"It\u0027s maybe a dumb thing to test, but should we ensure if the extension is disabled that the attributes are not present?","commit_id":"fb99f423d1c3b8a5bef1252c242f512ad3ce6006"}],"nova/tests/api/openstack/compute/contrib/test_server_usage.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b35dd61b0dc3b4a271cadcd00d81bd5787c9af5d","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        return jsonutils.loads(body).get(\u0027servers\u0027)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def assertServerUsage(self, server, launched_at, terminated_at):"},{"line_number":78,"context_line":"        print server"},{"line_number":79,"context_line":"        resp_launched_at \u003d timeutils.parse_isotime("},{"line_number":80,"context_line":"            server.get(\u0027%slaunched_at\u0027 % self.prefix))"},{"line_number":81,"context_line":"        self.assertEqual(timeutils.normalize_time(resp_launched_at),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FgC8%3D","line":78,"updated":"2013-05-31 19:15:00.000000000","message":"print.","commit_id":"f9a2ab901d6b89292a0e32c45f7e3687a22c07a9"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"3e25585d8efa8e41a119c208cb16babd16c88072","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        return jsonutils.loads(body).get(\u0027servers\u0027)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def assertServerUsage(self, server, launched_at, terminated_at):"},{"line_number":78,"context_line":"        print server"},{"line_number":79,"context_line":"        resp_launched_at \u003d timeutils.parse_isotime("},{"line_number":80,"context_line":"            server.get(\u0027%slaunched_at\u0027 % self.prefix))"},{"line_number":81,"context_line":"        self.assertEqual(timeutils.normalize_time(resp_launched_at),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Ff6E%3D","line":78,"in_reply_to":"AAAAPH%2F%2FgC8%3D","updated":"2013-05-31 19:51:41.000000000","message":"Done","commit_id":"f9a2ab901d6b89292a0e32c45f7e3687a22c07a9"}],"nova/tests/integrated/test_api_samples.py":[{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"05f02ccc83914fe68490c90c9521800b9df7c04f","unresolved":false,"context_lines":[{"line_number":2405,"context_line":"        uuid \u003d self._post_server()"},{"line_number":2406,"context_line":"        response \u003d self._do_get(\u0027servers/detail\u0027)"},{"line_number":2407,"context_line":"        subs \u003d self._get_regexes()"},{"line_number":2408,"context_line":"        subs[\u0027id\u0027] \u003d uuid"},{"line_number":2409,"context_line":"        subs[\u0027hostid\u0027] \u003d \u0027[a-f0-9]+\u0027"},{"line_number":2410,"context_line":"        return self._verify_response(\u0027servers-detail-resp\u0027, subs,"},{"line_number":2411,"context_line":"                                     response, 200)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2FlD8%3D","line":2408,"updated":"2013-05-03 03:26:31.000000000","message":"this ^ will became a failure if someone add more than one servers to the fake response of servers/detail better keep it generic as _get_regexes propose, agree?\nalthough this would be useful on test_show which show just one server","commit_id":"3387825e71cd098927d85a47b2465fc12e11d080"}]}
