)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"7d063c99042fdfc4c3df44bf1e7782f0b93e6aed","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Overwrite Usage class\u0027s get() function"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"base.Resource\u0027s get function will call its manager\u0027s get() function"},{"line_number":10,"context_line":"with one parameters. However UsageManager\u0027s get function take\u0027s three"},{"line_number":11,"context_line":"parameters."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I958a55c4d52cec4d1177371b788b3cf788098a6c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7af24918_8c53656c","line":10,"updated":"2016-03-04 23:21:31.000000000","message":"s/take\u0027s/takes/ (femtonit)","commit_id":"c1a32fcc05b3ae75abf6f4b37a3b9670d5fcadc5"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"12e7c980bb3bfe7d940a1b2283fcdc96a3bbc41f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Overwrite Usage class\u0027s get() function"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"base.Resource\u0027s get function will call its manager\u0027s get() function"},{"line_number":10,"context_line":"with one parameters. However UsageManager\u0027s get function take\u0027s three"},{"line_number":11,"context_line":"parameters."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I958a55c4d52cec4d1177371b788b3cf788098a6c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7af24918_3677ec03","line":10,"in_reply_to":"7af24918_8c53656c","updated":"2016-03-06 04:25:49.000000000","message":"Done","commit_id":"c1a32fcc05b3ae75abf6f4b37a3b9670d5fcadc5"}],"novaclient/tests/unit/v2/test_usage.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"7d063c99042fdfc4c3df44bf1e7782f0b93e6aed","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from novaclient.tests.unit.v2 import fakes"},{"line_number":18,"context_line":"from novaclient.v2 import usage"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import six"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class UsageTest(utils.TestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_6cd7f9bf","line":20,"updated":"2016-03-04 23:21:31.000000000","message":"This is a third party import, so it should appear in the (currently non-existant) block of imports between the standard library imports (e.g., \"import datetime\") and the package imports (\"from novaclient.…\")","commit_id":"c1a32fcc05b3ae75abf6f4b37a3b9670d5fcadc5"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"12e7c980bb3bfe7d940a1b2283fcdc96a3bbc41f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from novaclient.tests.unit.v2 import fakes"},{"line_number":18,"context_line":"from novaclient.v2 import usage"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import six"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class UsageTest(utils.TestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_36208cf7","line":20,"in_reply_to":"7af24918_6cd7f9bf","updated":"2016-03-06 04:25:49.000000000","message":"Done","commit_id":"c1a32fcc05b3ae75abf6f4b37a3b9670d5fcadc5"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"7d063c99042fdfc4c3df44bf1e7782f0b93e6aed","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            (\"end\u003d%s\" % now.isoformat()))"},{"line_number":62,"context_line":"        self.assertIsInstance(u, usage.Usage)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_usage_Usage_get(self):"},{"line_number":65,"context_line":"        start \u003d six.u(\u00272012-01-22T19:48:41.750722\u0027)"},{"line_number":66,"context_line":"        stop \u003d six.u(\u00272012-01-22T19:48:41.750722\u0027)"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_4ce79dac","line":64,"updated":"2016-03-04 23:21:31.000000000","message":"Please avoid mixed case here…","commit_id":"c1a32fcc05b3ae75abf6f4b37a3b9670d5fcadc5"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"12e7c980bb3bfe7d940a1b2283fcdc96a3bbc41f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            (\"end\u003d%s\" % now.isoformat()))"},{"line_number":62,"context_line":"        self.assertIsInstance(u, usage.Usage)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_usage_Usage_get(self):"},{"line_number":65,"context_line":"        start \u003d six.u(\u00272012-01-22T19:48:41.750722\u0027)"},{"line_number":66,"context_line":"        stop \u003d six.u(\u00272012-01-22T19:48:41.750722\u0027)"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_161d90bd","line":64,"in_reply_to":"7af24918_4ce79dac","updated":"2016-03-06 04:25:49.000000000","message":"Done","commit_id":"c1a32fcc05b3ae75abf6f4b37a3b9670d5fcadc5"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"7d063c99042fdfc4c3df44bf1e7782f0b93e6aed","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.cs.assert_called("},{"line_number":75,"context_line":"            \u0027GET\u0027,"},{"line_number":76,"context_line":"            \"/os-simple-tenant-usage/tenantfoo?\" +"},{"line_number":77,"context_line":"            (\"start\u003d%s\u0026\" % start) +"},{"line_number":78,"context_line":"            (\"end\u003d%s\" % stop))"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_2ca33151","line":76,"updated":"2016-03-04 23:21:31.000000000","message":"Please don\u0027t use \u0027+\u0027 here.  Format this as a single format string and use a single instance of the \u0027%\u0027 operator.","commit_id":"c1a32fcc05b3ae75abf6f4b37a3b9670d5fcadc5"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"12e7c980bb3bfe7d940a1b2283fcdc96a3bbc41f","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.cs.assert_called("},{"line_number":75,"context_line":"            \u0027GET\u0027,"},{"line_number":76,"context_line":"            \"/os-simple-tenant-usage/tenantfoo?\" +"},{"line_number":77,"context_line":"            (\"start\u003d%s\u0026\" % start) +"},{"line_number":78,"context_line":"            (\"end\u003d%s\" % stop))"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_b682dcc6","line":76,"in_reply_to":"7af24918_2ca33151","updated":"2016-03-06 04:25:49.000000000","message":"IT looks like we need at least tow \u0027%\u0027....","commit_id":"c1a32fcc05b3ae75abf6f4b37a3b9670d5fcadc5"}],"novaclient/v2/usage.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"7d063c99042fdfc4c3df44bf1e7782f0b93e6aed","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from novaclient import base"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import oslo_utils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class Usage(base.Resource):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_cc928df6","line":20,"updated":"2016-03-04 23:21:31.000000000","message":"This is a third-party import and should appear before the \"from novaclient import base\".","commit_id":"c1a32fcc05b3ae75abf6f4b37a3b9670d5fcadc5"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"12e7c980bb3bfe7d940a1b2283fcdc96a3bbc41f","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from novaclient import base"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import oslo_utils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class Usage(base.Resource):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_9687e0d6","line":20,"in_reply_to":"7af24918_cc928df6","updated":"2016-03-06 04:25:49.000000000","message":"Done","commit_id":"c1a32fcc05b3ae75abf6f4b37a3b9670d5fcadc5"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"7d063c99042fdfc4c3df44bf1e7782f0b93e6aed","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                self._add_details(new._info)"},{"line_number":41,"context_line":"                self.append_request_ids(new.request_ids)"},{"line_number":42,"context_line":"        else:"},{"line_number":43,"context_line":"            pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class UsageManager(base.ManagerWithFind):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_aca62151","line":43,"updated":"2016-03-04 23:21:31.000000000","message":"Um, why is there an \u0027else\u0027 clause at all, then?","commit_id":"c1a32fcc05b3ae75abf6f4b37a3b9670d5fcadc5"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"12e7c980bb3bfe7d940a1b2283fcdc96a3bbc41f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                self._add_details(new._info)"},{"line_number":41,"context_line":"                self.append_request_ids(new.request_ids)"},{"line_number":42,"context_line":"        else:"},{"line_number":43,"context_line":"            pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class UsageManager(base.ManagerWithFind):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_f66c6438","line":43,"in_reply_to":"7af24918_aca62151","updated":"2016-03-06 04:25:49.000000000","message":"After some reconsideration, I think these two lines is useless....","commit_id":"c1a32fcc05b3ae75abf6f4b37a3b9670d5fcadc5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7db3aaf7b84d1df0257265e91210ca63985f0296","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        return \"\u003cComputeUsage\u003e\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self):"},{"line_number":31,"context_line":"        fmt \u003d \u0027%Y-%m-%dT%H:%M:%S.%f\u0027"},{"line_number":32,"context_line":"        if self.start and self.stop and self.tenant_id:"},{"line_number":33,"context_line":"            # set_loaded() first ... so if we have to bail, we know we tried."},{"line_number":34,"context_line":"            self.set_loaded(True)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a061dce_88ea5ad9","line":31,"updated":"2016-04-07 19:42:31.000000000","message":"Hmm, are we sure this is the format the API is going to be returning? Looks like some dashboard testing was assuming a different format:\n\nhttp://logs.openstack.org/78/302978/1/check/gate-smaug-dashboard-python34/dd78f35/console.html#_2016-04-07_18_30_40_626\n\nhttp://git.openstack.org/cgit/openstack/horizon/tree/openstack_dashboard/test/test_data/nova_data.py#n129\n\nAnd it looks like this is what oslo.versionedobject DateTime fields are formatted to:\n\nhttps://github.com/openstack/oslo.versionedobjects/blob/master/oslo_versionedobjects/_utils.py#L21","commit_id":"3a538f6d862ae9fb041b496ae53498cf79d04df7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b4a0182bbc4c793397d66e0df8ac55a6bc972e3e","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        return \"\u003cComputeUsage\u003e\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self):"},{"line_number":31,"context_line":"        fmt \u003d \u0027%Y-%m-%dT%H:%M:%S.%f\u0027"},{"line_number":32,"context_line":"        if self.start and self.stop and self.tenant_id:"},{"line_number":33,"context_line":"            # set_loaded() first ... so if we have to bail, we know we tried."},{"line_number":34,"context_line":"            self.set_loaded(True)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a061dce_a352e132","line":31,"in_reply_to":"9a061dce_88d1ba25","updated":"2016-04-07 20:29:09.000000000","message":"Nevermind, I guess this get() is what\u0027s coming back from the API and that\u0027s the format I\u0027m seeing too when testing this out. Still, we should probably test the os-simple-tenant-usage response datetime format, so bug 1567640 can add that to tempest.","commit_id":"3a538f6d862ae9fb041b496ae53498cf79d04df7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1ad3e991b0793b4116b94a32c2da4d4143007e73","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        return \"\u003cComputeUsage\u003e\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self):"},{"line_number":31,"context_line":"        fmt \u003d \u0027%Y-%m-%dT%H:%M:%S.%f\u0027"},{"line_number":32,"context_line":"        if self.start and self.stop and self.tenant_id:"},{"line_number":33,"context_line":"            # set_loaded() first ... so if we have to bail, we know we tried."},{"line_number":34,"context_line":"            self.set_loaded(True)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a061dce_88d1ba25","line":31,"in_reply_to":"9a061dce_88ea5ad9","updated":"2016-04-07 19:43:21.000000000","message":"And this is what the os-simple-tenant-usage API accepts for start/end request parameter formats:\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/simple_tenant_usage.py#L183\n\nSo it seems this code should be a bit more lenient in the formats like the API is.","commit_id":"3a538f6d862ae9fb041b496ae53498cf79d04df7"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"c1cdb3616c04297cb8197492f6805692dccbfbff","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        return \"\u003cComputeUsage\u003e\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self):"},{"line_number":31,"context_line":"        fmt \u003d \u0027%Y-%m-%dT%H:%M:%S.%f\u0027"},{"line_number":32,"context_line":"        if self.start and self.stop and self.tenant_id:"},{"line_number":33,"context_line":"            # set_loaded() first ... so if we have to bail, we know we tried."},{"line_number":34,"context_line":"            self.set_loaded(True)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a061dce_9766e427","line":31,"in_reply_to":"9a061dce_a352e132","updated":"2016-04-08 07:18:37.000000000","message":"Yeah, you are right.The format consistent with the return value[1] of nova API.\nAnd this works OK in my environment, in think one of the use case of this get() \nfunction may look this:\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\u003e\u003e\u003e from novaclient import client\n\u003e\u003e\u003e import datetime\n\u003e\u003e\u003e nova \u003d client.Client(\u00272\u0027,\u0027admin\u0027,\u0027stack\u0027,\u0027admin\u0027,\u0027http://10.167.133.33:35357/v2.0\u0027)\n\u003e\u003e\u003e start \u003d datetime.datetime.strptime(\u00272016-03-01\u0027, \"%Y-%m-%d\")\n\u003e\u003e\u003e end \u003d datetime.datetime.strptime(\u00272016-05-02\u0027, \"%Y-%m-%d\")\n\u003e\u003e\u003e usages \u003d nova.usage.list(start,end)\n\u003e\u003e\u003e usages\n[\u003cComputeUsage\u003e]\n\u003e\u003e\u003e usages[0].get()\n\u003e\u003e\u003e quit\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n[1]: https://github.com/openstack/api-site/blob/master/api-ref/src/wadls/compute-api/src/v2.1/samples/os-simple-tenant-usage/simple-tenant-usage-show-response.json#L19","commit_id":"3a538f6d862ae9fb041b496ae53498cf79d04df7"}]}
