)]}'
{"nova/api/openstack/compute/contrib/simple_tenant_usage.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"987b80efea66866bd1b9f6f30d1861a794981ceb","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class SimpleTenantUsageController(object):"},{"line_number":35,"context_line":"    @staticmethod"},{"line_number":36,"context_line":"    def _hours_for(instance, period_start, period_stop):"},{"line_number":37,"context_line":"        launched_at \u003d instance.launched_at"},{"line_number":38,"context_line":"        terminated_at \u003d instance.terminated_at"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_4c844fb1","line":35,"updated":"2015-03-17 10:07:44.000000000","message":"this does not look related to the commit message","commit_id":"c2bdf910cfbe7f68bece862005b0e17d590ba2cb"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"987b80efea66866bd1b9f6f30d1861a794981ceb","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            # instance hasn\u0027t launched, so no charge"},{"line_number":70,"context_line":"            return 0"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @staticmethod"},{"line_number":73,"context_line":"    def _get_flavor(context, instance, flavors_cache):"},{"line_number":74,"context_line":"        \"\"\"Get flavor information from the instance\u0027s system_metadata,"},{"line_number":75,"context_line":"        allowing a fallback to lookup by-id for deleted instances only."}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_4cfd2f3b","line":72,"updated":"2015-03-17 10:07:44.000000000","message":"this does not look related to the commit message","commit_id":"c2bdf910cfbe7f68bece862005b0e17d590ba2cb"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"987b80efea66866bd1b9f6f30d1861a794981ceb","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        return rval.values()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @staticmethod"},{"line_number":176,"context_line":"    def _parse_datetime(dtstr):"},{"line_number":177,"context_line":"        if not dtstr:"},{"line_number":178,"context_line":"            value \u003d timeutils.utcnow()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_8c8e47cf","line":175,"updated":"2015-03-17 10:07:44.000000000","message":"ditto","commit_id":"c2bdf910cfbe7f68bece862005b0e17d590ba2cb"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"dd1454892759bf725e77ab804db0432d4ea34e8e","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        except exception.InvalidStrTime as e:"},{"line_number":218,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        now \u003d timeutils.utcnow().replace(tzinfo\u003diso8601.iso8601.Utc())"},{"line_number":221,"context_line":"        if period_stop \u003e now:"},{"line_number":222,"context_line":"            period_stop \u003d now"},{"line_number":223,"context_line":"        usages \u003d self._tenant_usages_for_period(context,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_37033643","line":220,"updated":"2015-03-20 11:54:44.000000000","message":"why doesn\u0027t utcnow actually return a utc tzinfo element? This seems really gorpy and error prone.","commit_id":"6885bbec25e995f843b8d336e55209cf0ad2da13"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7e716868efb9e7ecf06b4ce71d598440bc778000","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        except exception.InvalidStrTime as e:"},{"line_number":218,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        now \u003d timeutils.utcnow().replace(tzinfo\u003diso8601.iso8601.Utc())"},{"line_number":221,"context_line":"        if period_stop \u003e now:"},{"line_number":222,"context_line":"            period_stop \u003d now"},{"line_number":223,"context_line":"        usages \u003d self._tenant_usages_for_period(context,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_1745526e","line":220,"in_reply_to":"9a80dd14_37033643","updated":"2015-03-20 11:58:44.000000000","message":"That\u0027s the default behaviour in Python unfortunately.","commit_id":"6885bbec25e995f843b8d336e55209cf0ad2da13"}],"nova/api/openstack/compute/plugins/v3/simple_tenant_usage.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"dd1454892759bf725e77ab804db0432d4ea34e8e","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        else:"},{"line_number":186,"context_line":"            for fmt in [\"%Y-%m-%dT%H:%M:%S\","},{"line_number":187,"context_line":"                        \"%Y-%m-%dT%H:%M:%S.%f\","},{"line_number":188,"context_line":"                        \"%Y-%m-%d %H:%M:%S.%f\"]:"},{"line_number":189,"context_line":"                try:"},{"line_number":190,"context_line":"                    value \u003d parse_strtime(dtstr, fmt)"},{"line_number":191,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_b7c80623","side":"PARENT","line":188,"range":{"start_line":188,"start_character":24,"end_line":188,"end_character":45},"updated":"2015-03-20 11:54:44.000000000","message":"does timeutils.parse_isotime work on all 3 formats? I thought it didn\u0027t on \"%Y-%m-%d %H:%M:%S.%f\" which is why this code is still here.","commit_id":"dfcfa82af96bae12265875cb313d58109e536480"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7e716868efb9e7ecf06b4ce71d598440bc778000","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        else:"},{"line_number":186,"context_line":"            for fmt in [\"%Y-%m-%dT%H:%M:%S\","},{"line_number":187,"context_line":"                        \"%Y-%m-%dT%H:%M:%S.%f\","},{"line_number":188,"context_line":"                        \"%Y-%m-%d %H:%M:%S.%f\"]:"},{"line_number":189,"context_line":"                try:"},{"line_number":190,"context_line":"                    value \u003d parse_strtime(dtstr, fmt)"},{"line_number":191,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_3726d6ce","side":"PARENT","line":188,"in_reply_to":"9a80dd14_b7c80623","updated":"2015-03-20 11:58:44.000000000","message":"Yes it does:\n\n\u003e\u003e\u003e oslo_utils.timeutils.parse_isotime(\"2014-03-03 12:23:12.123234\")\ndatetime.datetime(2014, 3, 3, 12, 23, 12, 123234, tzinfo\u003d\u003ciso8601.iso8601.Utc object at 0x1091b1290\u003e)","commit_id":"dfcfa82af96bae12265875cb313d58109e536480"}],"nova/tests/unit/api/openstack/compute/contrib/test_simple_tenant_usage.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b4848d7ab29d9a2830ac03cc9d03cc8f6f09e020","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        self.assertRaises(exception.InvalidStrTime,"},{"line_number":347,"context_line":"                          self.simple_tenant_usage.parse_strtime,"},{"line_number":348,"context_line":"                          \"2014-02-21 13:47:20.824060\","},{"line_number":349,"context_line":"                          \"%Y-%m-%dT%H:%M:%S.%f\")"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"class SimpleTenantUsageUtilsV2(SimpleTenantUsageUtilsV21):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_057a2525","side":"PARENT","line":349,"updated":"2015-03-17 12:50:26.000000000","message":"I think this should kept this unit test to ensure we will raise \nInvalidStrTime if the format is incorrect","commit_id":"78184463ba30b842687d52e824e9c203e9822d90"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"90f819b630c6a91be745bee4aa9cd5bae09a9519","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        self.assertRaises(exception.InvalidStrTime,"},{"line_number":347,"context_line":"                          self.simple_tenant_usage.parse_strtime,"},{"line_number":348,"context_line":"                          \"2014-02-21 13:47:20.824060\","},{"line_number":349,"context_line":"                          \"%Y-%m-%dT%H:%M:%S.%f\")"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"class SimpleTenantUsageUtilsV2(SimpleTenantUsageUtilsV21):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_5649315f","side":"PARENT","line":349,"in_reply_to":"9a80dd14_057a2525","updated":"2015-03-17 13:51:04.000000000","message":"Well, no, because the function that raises that exception has been removed, hasn\u0027t it?","commit_id":"78184463ba30b842687d52e824e9c203e9822d90"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b053bf685eb0f7ca0e66e2585fc0cf336c4fe63","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        self.assertRaises(exception.InvalidStrTime,"},{"line_number":347,"context_line":"                          self.simple_tenant_usage.parse_strtime,"},{"line_number":348,"context_line":"                          \"2014-02-21 13:47:20.824060\","},{"line_number":349,"context_line":"                          \"%Y-%m-%dT%H:%M:%S.%f\")"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"class SimpleTenantUsageUtilsV2(SimpleTenantUsageUtilsV21):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_1e8266c8","side":"PARENT","line":349,"in_reply_to":"9a80dd14_5649315f","updated":"2015-03-17 16:31:08.000000000","message":"yes, I missed that part ... I thought another \nInvalidStrTime , thanks","commit_id":"78184463ba30b842687d52e824e9c203e9822d90"}]}
