)]}'
{"openstackclient/compute/v2/usage.py":[{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"0d178fcb337ae81d39839cda8ff00d7086bb80c7","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ListUsage(lister.Lister):"},{"line_number":27,"context_line":"    \"\"\"List Usage command\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    log \u003d logging.getLogger(__name__ + \".ListUsage\")"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2FzrI%3D","line":27,"updated":"2013-07-22 22:42:34.000000000","message":"Let\u0027s try and make these a bit more descriptive:\n\n \"\"\"List XXX usage for a specified time period\"\"\"\n\nI\u0027m not sure exactly what XXX is?","commit_id":"20ca9018a550c6aa899570154551896d74075559"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"6976804ec6c093a272bca27236b45210665a3238","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ListUsage(lister.Lister):"},{"line_number":27,"context_line":"    \"\"\"List Usage command\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    log \u003d logging.getLogger(__name__ + \".ListUsage\")"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2FxQg%3D","line":27,"in_reply_to":"AAAAQn%2F%2FygA%3D","updated":"2013-07-23 15:29:59.000000000","message":"\"\"\"List resource usage per project\"\"\"\n\n??","commit_id":"20ca9018a550c6aa899570154551896d74075559"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1eabaf98b4233fb633e56b7ecaaf39206c690ab0","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ListUsage(lister.Lister):"},{"line_number":27,"context_line":"    \"\"\"List Usage command\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    log \u003d logging.getLogger(__name__ + \".ListUsage\")"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2FygA%3D","line":27,"in_reply_to":"AAAAQn%2F%2FzrI%3D","updated":"2013-07-23 08:00:12.000000000","message":"\"\"\"List amount of resources being used, for a specified time period. \"\"\"\n\nStill seems flat.","commit_id":"20ca9018a550c6aa899570154551896d74075559"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"0d178fcb337ae81d39839cda8ff00d7086bb80c7","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        )"},{"line_number":57,"context_line":"        columns_list \u003d list(columns)"},{"line_number":58,"context_line":"        column_headers \u003d ("},{"line_number":59,"context_line":"            \"Tenant ID\","},{"line_number":60,"context_line":"            \"RAM MB-Hours\","},{"line_number":61,"context_line":"            \"CPU Hours\","},{"line_number":62,"context_line":"            \"Disk GB-Hours\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2FzrA%3D","line":59,"updated":"2013-07-22 22:42:34.000000000","message":"Project ID","commit_id":"20ca9018a550c6aa899570154551896d74075559"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b31af8da986cbbe9d2f23aabf42f5c8d19000b26","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        )"},{"line_number":57,"context_line":"        columns_list \u003d list(columns)"},{"line_number":58,"context_line":"        column_headers \u003d ("},{"line_number":59,"context_line":"            \"Tenant ID\","},{"line_number":60,"context_line":"            \"RAM MB-Hours\","},{"line_number":61,"context_line":"            \"CPU Hours\","},{"line_number":62,"context_line":"            \"Disk GB-Hours\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2FzjM%3D","line":59,"in_reply_to":"AAAAQn%2F%2FzrA%3D","updated":"2013-07-22 23:36:13.000000000","message":"Agreed.","commit_id":"20ca9018a550c6aa899570154551896d74075559"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"91a1f6692e7d4e1f0e032158ca12895332a17793","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            setattr(u, columns_list[0], u.tenant_id)"},{"line_number":82,"context_line":"            setattr(u, columns_list[1], \"%.2f\" % u.total_memory_mb_usage)"},{"line_number":83,"context_line":"            setattr(u, columns_list[2], \"%.2f\" % u.total_vcpus_usage)"},{"line_number":84,"context_line":"            setattr(u, columns_list[3], \"%.2f\" % u.total_local_gb_usage)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        for usage in usage_list:"},{"line_number":87,"context_line":"            simplify_usage(usage, columns_list)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2Fy6U%3D","line":84,"updated":"2013-07-23 04:23:20.000000000","message":"It would be good to right-justify these","commit_id":"20ca9018a550c6aa899570154551896d74075559"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1eabaf98b4233fb633e56b7ecaaf39206c690ab0","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            setattr(u, columns_list[0], u.tenant_id)"},{"line_number":82,"context_line":"            setattr(u, columns_list[1], \"%.2f\" % u.total_memory_mb_usage)"},{"line_number":83,"context_line":"            setattr(u, columns_list[2], \"%.2f\" % u.total_vcpus_usage)"},{"line_number":84,"context_line":"            setattr(u, columns_list[3], \"%.2f\" % u.total_local_gb_usage)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        for usage in usage_list:"},{"line_number":87,"context_line":"            simplify_usage(usage, columns_list)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2Fygo%3D","line":84,"in_reply_to":"AAAAQn%2F%2Fy6U%3D","updated":"2013-07-23 08:00:12.000000000","message":"placed in a helper function","commit_id":"20ca9018a550c6aa899570154551896d74075559"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"0d178fcb337ae81d39839cda8ff00d7086bb80c7","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            simplify_usage(usage, columns_list)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        print(\"Usage from %s to %s:\" % (start.strftime(dateformat),"},{"line_number":90,"context_line":"                                        end.strftime(dateformat)))"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        return (column_headers,"},{"line_number":93,"context_line":"                (utils.get_item_properties("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2Fzqw%3D","line":90,"updated":"2013-07-22 22:42:34.000000000","message":"I\u0027m torn here...a list command with no items shouldn\u0027t have any output.  I\u0027m not sure of this should be displayed in that case.  I lean toward no as we din\u0027t show the column headers either.","commit_id":"20ca9018a550c6aa899570154551896d74075559"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b31af8da986cbbe9d2f23aabf42f5c8d19000b26","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            simplify_usage(usage, columns_list)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        print(\"Usage from %s to %s:\" % (start.strftime(dateformat),"},{"line_number":90,"context_line":"                                        end.strftime(dateformat)))"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        return (column_headers,"},{"line_number":93,"context_line":"                (utils.get_item_properties("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2FzjQ%3D","line":90,"in_reply_to":"AAAAQn%2F%2Fzqw%3D","updated":"2013-07-22 23:36:13.000000000","message":"Yeah, that makes sense. If there is nothing to show, then don\u0027t print anything.","commit_id":"20ca9018a550c6aa899570154551896d74075559"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"c48523369c55f0cfcab0d06ede90b34c60a4545c","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            setattr(u, columns_list[0], u.tenant_id)"},{"line_number":82,"context_line":"            setattr(u, columns_list[1], \"%.2f\" % u.total_memory_mb_usage)"},{"line_number":83,"context_line":"            setattr(u, columns_list[2], \"%.2f\" % u.total_vcpus_usage)"},{"line_number":84,"context_line":"            setattr(u, columns_list[3], \"%.2f\" % u.total_local_gb_usage)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        if len(usage_list) \u003e 0:"},{"line_number":87,"context_line":"            print(\"Usage from %s to %s:\" % (start.strftime(dateformat),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAQn%2F%2FtvQ%3D","line":84,"updated":"2013-07-24 15:37:37.000000000","message":"Did the right-justified output get lost?","commit_id":"fefc5e29a16e29e54a82e3cf8968a116c0b1df84"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"22b670862df76551688d290c5e0ee3fab9a3efcc","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            setattr(u, columns_list[0], u.tenant_id)"},{"line_number":82,"context_line":"            setattr(u, columns_list[1], \"%.2f\" % u.total_memory_mb_usage)"},{"line_number":83,"context_line":"            setattr(u, columns_list[2], \"%.2f\" % u.total_vcpus_usage)"},{"line_number":84,"context_line":"            setattr(u, columns_list[3], \"%.2f\" % u.total_local_gb_usage)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        if len(usage_list) \u003e 0:"},{"line_number":87,"context_line":"            print(\"Usage from %s to %s:\" % (start.strftime(dateformat),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAQn%2F%2FpUk%3D","line":84,"in_reply_to":"AAAAQn%2F%2FpeY%3D","updated":"2013-07-25 21:17:37.000000000","message":"Yeah, I was thinking of co-opting their terms for configuring columns, but in a way that doesn\u0027t assume the formatter is going to use the information. The csv formatter wouldn\u0027t, for example.","commit_id":"fefc5e29a16e29e54a82e3cf8968a116c0b1df84"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"c1dc9f7035d952ee35d6f71adf581b7748be5004","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            setattr(u, columns_list[0], u.tenant_id)"},{"line_number":82,"context_line":"            setattr(u, columns_list[1], \"%.2f\" % u.total_memory_mb_usage)"},{"line_number":83,"context_line":"            setattr(u, columns_list[2], \"%.2f\" % u.total_vcpus_usage)"},{"line_number":84,"context_line":"            setattr(u, columns_list[3], \"%.2f\" % u.total_local_gb_usage)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        if len(usage_list) \u003e 0:"},{"line_number":87,"context_line":"            print(\"Usage from %s to %s:\" % (start.strftime(dateformat),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAQn%2F%2FpeY%3D","line":84,"in_reply_to":"AAAAQn%2F%2FpmU%3D","updated":"2013-07-25 20:23:42.000000000","message":"After looking at Cliff\u0027s TableFormatter, this should do what I\u0027m after nicely, eliminating the above loop over usage_list:\n\n\n        return (column_headers,\n                (utils.get_item_properties(\n                    s, columns,\n                    formatters\u003d{\n                        \u0027total_memory_mb_usage\u0027: lambda x: float(\"%.2f\" % x),\n                        \u0027total_vcpus_usage\u0027: lambda x: float(\"%.2f\" % x),\n                        \u0027total_local_gb_usage\u0027: lambda x: float(\"%.2f\" % x),\n                    },\n                ) for s in usage_list))\n\n\nHaving some access to prettytable\u0027s column formatting might still be handy but lower priority.","commit_id":"fefc5e29a16e29e54a82e3cf8968a116c0b1df84"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b09a55cec31f9294c8700937f43b3be586ff52ba","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            setattr(u, columns_list[0], u.tenant_id)"},{"line_number":82,"context_line":"            setattr(u, columns_list[1], \"%.2f\" % u.total_memory_mb_usage)"},{"line_number":83,"context_line":"            setattr(u, columns_list[2], \"%.2f\" % u.total_vcpus_usage)"},{"line_number":84,"context_line":"            setattr(u, columns_list[3], \"%.2f\" % u.total_local_gb_usage)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        if len(usage_list) \u003e 0:"},{"line_number":87,"context_line":"            print(\"Usage from %s to %s:\" % (start.strftime(dateformat),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAQn%2F%2FpmU%3D","line":84,"in_reply_to":"AAAAQn%2F%2FqpA%3D","updated":"2013-07-25 19:35:48.000000000","message":"Cliff should probably deal with the column formatting. Some of the output formats won\u0027t take kindly to having extra whitespace embedded.\n\nThink about the type of settings you want it to have, and I\u0027ll work on an API.","commit_id":"fefc5e29a16e29e54a82e3cf8968a116c0b1df84"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"0cc1aaad4ee96141f2440bed004221854993d648","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            setattr(u, columns_list[0], u.tenant_id)"},{"line_number":82,"context_line":"            setattr(u, columns_list[1], \"%.2f\" % u.total_memory_mb_usage)"},{"line_number":83,"context_line":"            setattr(u, columns_list[2], \"%.2f\" % u.total_vcpus_usage)"},{"line_number":84,"context_line":"            setattr(u, columns_list[3], \"%.2f\" % u.total_local_gb_usage)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        if len(usage_list) \u003e 0:"},{"line_number":87,"context_line":"            print(\"Usage from %s to %s:\" % (start.strftime(dateformat),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAQn%2F%2FqpA%3D","line":84,"in_reply_to":"AAAAQn%2F%2FrhM%3D","updated":"2013-07-25 13:57:02.000000000","message":"Like in a spreadsheet, a column of numbers should default to right justified, particularly if you already are formatting it to a specific number of decimal places.\n\nBased on the header lengths, you can make the fields 12 chars wide and only increase the size of the CPU column.","commit_id":"fefc5e29a16e29e54a82e3cf8968a116c0b1df84"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9d776db1ba8b29b0dc9a7bf5372bbc0a138d4afd","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            setattr(u, columns_list[0], u.tenant_id)"},{"line_number":82,"context_line":"            setattr(u, columns_list[1], \"%.2f\" % u.total_memory_mb_usage)"},{"line_number":83,"context_line":"            setattr(u, columns_list[2], \"%.2f\" % u.total_vcpus_usage)"},{"line_number":84,"context_line":"            setattr(u, columns_list[3], \"%.2f\" % u.total_local_gb_usage)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        if len(usage_list) \u003e 0:"},{"line_number":87,"context_line":"            print(\"Usage from %s to %s:\" % (start.strftime(dateformat),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAQn%2F%2FrhM%3D","line":84,"in_reply_to":"AAAAQn%2F%2FtvQ%3D","updated":"2013-07-25 06:59:55.000000000","message":"I\u0027m confused; in patch set one, i thought you were talking about the syntax\u0027s tabbing. \nBut clearly you are referring to the output. I\u0027m having trouble kicking off an instance on my machine, what exactly was wrong  the output in the first place and what is happening now?","commit_id":"fefc5e29a16e29e54a82e3cf8968a116c0b1df84"}]}
