)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"8726f7c3b249689be0e00c0c369e65f9889d1a9d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Added fields option to CLI \u0027cinder list\u0027"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently \u0027cinder list\u0027 does not show all the fields in output"},{"line_number":10,"context_line":"So this option can be used to display required fields."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #1251749"},{"line_number":13,"context_line":"Change-Id: I89d38ef3d180b7ed1cf27f16ca4c1296d665cd24"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAVn%2F%2FuNM%3D","line":10,"updated":"2014-03-04 13:52:12.000000000","message":"A two-line commit message seems terse for a 100+ line patch. Perhaps add a little more info on supporting utility and test methods and/or provide an example of the new option in use.","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":8072,"name":"Saurabh Chordiya","email":"schordiya@vmware.com","username":"saurabh"},"change_message_id":"3873a64953e3b961e4d2875ed52a93c49ee13eea","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Added fields option to CLI \u0027cinder list\u0027"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently \u0027cinder list\u0027 does not show all the fields in output"},{"line_number":10,"context_line":"So this option can be used to display required fields."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #1251749"},{"line_number":13,"context_line":"Change-Id: I89d38ef3d180b7ed1cf27f16ca4c1296d665cd24"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAVn%2F%2FlwU%3D","line":10,"in_reply_to":"AAAAVn%2F%2FuNM%3D","updated":"2014-03-05 07:07:09.000000000","message":"Done","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"662173ca9f777f329060a064c744cab5d9262a22","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently \u0027cinder list\u0027 does not show all the fields in output"},{"line_number":10,"context_line":"So this option can be used to display required fields."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #1251749"},{"line_number":13,"context_line":"Change-Id: I89d38ef3d180b7ed1cf27f16ca4c1296d665cd24"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAVn%2F%2FuKk%3D","line":11,"updated":"2014-03-04 13:58:16.000000000","message":"It looks like a blueprint has been filed on the linked bug report. Since this patch is for work covered by that blueprint, please include a link/reference to the blueprint here as well.","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":8072,"name":"Saurabh Chordiya","email":"schordiya@vmware.com","username":"saurabh"},"change_message_id":"3873a64953e3b961e4d2875ed52a93c49ee13eea","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently \u0027cinder list\u0027 does not show all the fields in output"},{"line_number":10,"context_line":"So this option can be used to display required fields."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #1251749"},{"line_number":13,"context_line":"Change-Id: I89d38ef3d180b7ed1cf27f16ca4c1296d665cd24"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAVn%2F%2Flvs%3D","line":11,"in_reply_to":"AAAAVn%2F%2FuKk%3D","updated":"2014-03-05 07:07:09.000000000","message":"I think that blue-print related to api.","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"8726f7c3b249689be0e00c0c369e65f9889d1a9d","unresolved":false,"context_lines":[{"line_number":10,"context_line":"So this option can be used to display required fields."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #1251749"},{"line_number":13,"context_line":"Change-Id: I89d38ef3d180b7ed1cf27f16ca4c1296d665cd24"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAVn%2F%2FuOQ%3D","line":13,"updated":"2014-03-04 13:52:12.000000000","message":"Please add DocImpact","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":8072,"name":"Saurabh Chordiya","email":"schordiya@vmware.com","username":"saurabh"},"change_message_id":"3873a64953e3b961e4d2875ed52a93c49ee13eea","unresolved":false,"context_lines":[{"line_number":10,"context_line":"So this option can be used to display required fields."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #1251749"},{"line_number":13,"context_line":"Change-Id: I89d38ef3d180b7ed1cf27f16ca4c1296d665cd24"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAVn%2F%2FlwQ%3D","line":13,"in_reply_to":"AAAAVn%2F%2FuOQ%3D","updated":"2014-03-05 07:07:09.000000000","message":"Done","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":7051,"name":"Swapnil Kulkarni","email":"skulkarn@redhat.com","username":"swapnilkulkarni2608"},"change_message_id":"a8249a23a5eaf6a32d7f88cacc6b4d17d2cd44ca","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     saurabh \u003csaurabh.chordiya@nectechnologies.in\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-03-20 10:26:13 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added fields option to CLI \u0027cinder list\u0027"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently \u0027cinder list\u0027 does not show all the fields in output"},{"line_number":10,"context_line":"So this option can be used to display required fields."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAWH%2F%2By%2Bg%3D","line":7,"updated":"2014-03-24 09:39:09.000000000","message":"I think there is a feature freeze in v1. Someone from core can take the final call.","commit_id":"73e28edeede8e5699323e3e45e91c1e9ac63e432"},{"author":{"_account_id":7051,"name":"Swapnil Kulkarni","email":"skulkarn@redhat.com","username":"swapnilkulkarni2608"},"change_message_id":"a8249a23a5eaf6a32d7f88cacc6b4d17d2cd44ca","unresolved":false,"context_lines":[{"line_number":20,"context_line":"In unittests, function \u0027run_command\u0027 modified to capture"},{"line_number":21,"context_line":"the standard output using mock."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Closes-Bug: #1251749"},{"line_number":24,"context_line":"Change-Id: I89d38ef3d180b7ed1cf27f16ca4c1296d665cd24"},{"line_number":25,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAWH%2F%2By%2FA%3D","line":23,"updated":"2014-03-24 09:39:09.000000000","message":"Please add bug information in doc/source/index.rst.","commit_id":"73e28edeede8e5699323e3e45e91c1e9ac63e432"}],"cinderclient/tests/v1/test_shell.py":[{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"8726f7c3b249689be0e00c0c369e65f9889d1a9d","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        result \u003d self.run_command(\u0027list --fields \u0027"},{"line_number":105,"context_line":"                                  \u0027attachments,bootable,availability_zone\u0027)"},{"line_number":106,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/detail\u0027)"},{"line_number":107,"context_line":"        self.assertNotIn(\u0027Name\u0027, result)"},{"line_number":108,"context_line":"        self.assertIn(\u0027Bootable\u0027, result)"},{"line_number":109,"context_line":"        self.assertIn(\u0027Availability Zone\u0027, result)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FuOw%3D","line":107,"updated":"2014-03-04 13:52:12.000000000","message":"Shouldn\u0027t you also add an assertIn check for Attachments?","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":8072,"name":"Saurabh Chordiya","email":"schordiya@vmware.com","username":"saurabh"},"change_message_id":"3873a64953e3b961e4d2875ed52a93c49ee13eea","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        result \u003d self.run_command(\u0027list --fields \u0027"},{"line_number":105,"context_line":"                                  \u0027attachments,bootable,availability_zone\u0027)"},{"line_number":106,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/detail\u0027)"},{"line_number":107,"context_line":"        self.assertNotIn(\u0027Name\u0027, result)"},{"line_number":108,"context_line":"        self.assertIn(\u0027Bootable\u0027, result)"},{"line_number":109,"context_line":"        self.assertIn(\u0027Availability Zone\u0027, result)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FlvQ%3D","line":107,"in_reply_to":"AAAAVn%2F%2FuOw%3D","updated":"2014-03-05 07:07:09.000000000","message":"Done","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"1e69d132471a5a4f48b562eed6a1b04ba34cce86","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @mock.patch(\u0027sys.stdout\u0027, new_callable\u003dsix.StringIO)"},{"line_number":66,"context_line":"    def run_command(self, cmd, mock_stdout):"},{"line_number":67,"context_line":"        if isinstance(cmd, list):"},{"line_number":68,"context_line":"            self.shell.main(cmd)"},{"line_number":69,"context_line":"        else:"},{"line_number":70,"context_line":"            self.shell.main(cmd.split())"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2Fik4%3D","line":67,"updated":"2014-03-05 14:34:38.000000000","message":"I\u0027m curious here. I understand the move to convert the test suite to use mock. However, why the check for cmd in list-form? I don\u0027t see any calls of run_command that pass cmd as a list.","commit_id":"bd1e324cbdc29cef01889614c4f790e8db38287d"},{"author":{"_account_id":8072,"name":"Saurabh Chordiya","email":"schordiya@vmware.com","username":"saurabh"},"change_message_id":"5c4e1c05ce6ec152956207396ca77d5112423e1f","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @mock.patch(\u0027sys.stdout\u0027, new_callable\u003dsix.StringIO)"},{"line_number":66,"context_line":"    def run_command(self, cmd, mock_stdout):"},{"line_number":67,"context_line":"        if isinstance(cmd, list):"},{"line_number":68,"context_line":"            self.shell.main(cmd)"},{"line_number":69,"context_line":"        else:"},{"line_number":70,"context_line":"            self.shell.main(cmd.split())"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2FbVQ%3D","line":67,"in_reply_to":"AAAAVn%2F%2Fik4%3D","updated":"2014-03-06 06:09:24.000000000","message":"Yes, you are right here too :(","commit_id":"bd1e324cbdc29cef01889614c4f790e8db38287d"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"1e69d132471a5a4f48b562eed6a1b04ba34cce86","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def test_list_fields(self):"},{"line_number":104,"context_line":"        result \u003d self.run_command(\u0027list --fields \u0027"},{"line_number":105,"context_line":"                                  \u0027attachments,bootable,availability_zone\u0027)"},{"line_number":106,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/detail\u0027)"},{"line_number":107,"context_line":"        self.assertNotIn(\u0027Name\u0027, result)"},{"line_number":108,"context_line":"        self.assertIn(\u0027Bootable\u0027, result)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2Fiuk%3D","line":105,"updated":"2014-03-05 14:34:38.000000000","message":"The --fields attributes list should no longer be comma-separated.","commit_id":"bd1e324cbdc29cef01889614c4f790e8db38287d"},{"author":{"_account_id":8651,"name":"Chen Xiao","email":"chenxiao@cn.ibm.com","username":"chenxiao"},"change_message_id":"0f362e03caa6b4f33d51f1ef3e59e2ffc205c5e8","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def test_list_fields(self):"},{"line_number":101,"context_line":"        result \u003d self.run_command(\u0027list --fields \u0027"},{"line_number":102,"context_line":"                                  \u0027attachments bootable availability_zone\u0027)"},{"line_number":103,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/detail\u0027)"},{"line_number":104,"context_line":"        self.assertNotIn(\u0027Name\u0027, result)"},{"line_number":105,"context_line":"        self.assertIn(\u0027Bootable\u0027, result)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVn%2F%2FXtU%3D","line":102,"updated":"2014-03-06 15:24:11.000000000","message":"Just a suggestion, I think your function in utils is very good, but your case can not test it fully, if you submit an new patch, you can use fields params like \u0027os-vol-mig-status-attr:name_id\u0027 to test the function, and you can add self.assertIn(\u0027ID\u0027, result)","commit_id":"e5cdb7eb4d84716a76340a6097d18b0ce77b58ae"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"1f2512274e701d0dfdecc499cd901a391f3874d5","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def test_list_fields(self):"},{"line_number":101,"context_line":"        result \u003d self.run_command(\u0027list --fields \u0027"},{"line_number":102,"context_line":"                                  \u0027attachments bootable availability_zone\u0027)"},{"line_number":103,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/detail\u0027)"},{"line_number":104,"context_line":"        self.assertNotIn(\u0027Name\u0027, result)"},{"line_number":105,"context_line":"        self.assertIn(\u0027Bootable\u0027, result)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2Fs4c%3D","line":102,"in_reply_to":"AAAAVn%2F%2FXtU%3D","updated":"2014-03-14 11:51:32.000000000","message":"I agree with Chen. Add in one of those four attributes that include a semi-colon along with the appropriate asserts.","commit_id":"e5cdb7eb4d84716a76340a6097d18b0ce77b58ae"}],"cinderclient/tests/v2/test_shell.py":[{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"8726f7c3b249689be0e00c0c369e65f9889d1a9d","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        result \u003d self.run_command(\u0027list --fields \u0027"},{"line_number":83,"context_line":"                                  \u0027attachments,bootable,availability_zone\u0027)"},{"line_number":84,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/detail\u0027)"},{"line_number":85,"context_line":"        self.assertNotIn(\u0027Name\u0027, result)"},{"line_number":86,"context_line":"        self.assertIn(\u0027Bootable\u0027, result)"},{"line_number":87,"context_line":"        self.assertIn(\u0027Availability Zone\u0027, result)"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FuOo%3D","line":85,"updated":"2014-03-04 13:52:12.000000000","message":"See v1/test_shell.py comment.","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"1e69d132471a5a4f48b562eed6a1b04ba34cce86","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @mock.patch(\u0027sys.stdout\u0027, new_callable\u003dsix.StringIO)"},{"line_number":63,"context_line":"    def run_command(self, cmd, mock_stdout):"},{"line_number":64,"context_line":"        if isinstance(cmd, list):"},{"line_number":65,"context_line":"            self.shell.main(cmd)"},{"line_number":66,"context_line":"        else:"},{"line_number":67,"context_line":"            self.shell.main(cmd.split())"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2Fij8%3D","line":64,"updated":"2014-03-05 14:34:38.000000000","message":"See v1/test_shell.py comment.","commit_id":"bd1e324cbdc29cef01889614c4f790e8db38287d"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"1e69d132471a5a4f48b562eed6a1b04ba34cce86","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def test_list_fields(self):"},{"line_number":82,"context_line":"        result \u003d self.run_command(\u0027list --fields \u0027"},{"line_number":83,"context_line":"                                  \u0027attachments,bootable,availability_zone\u0027)"},{"line_number":84,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/volumes/detail\u0027)"},{"line_number":85,"context_line":"        self.assertNotIn(\u0027Name\u0027, result)"},{"line_number":86,"context_line":"        self.assertIn(\u0027Bootable\u0027, result)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2FiuA%3D","line":83,"updated":"2014-03-05 14:34:38.000000000","message":"See v1/test_shell.py comment.","commit_id":"bd1e324cbdc29cef01889614c4f790e8db38287d"}],"cinderclient/utils.py":[{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"1e69d132471a5a4f48b562eed6a1b04ba34cce86","unresolved":false,"context_lines":[{"line_number":310,"context_line":"def _format_field_name(attr):"},{"line_number":311,"context_line":"    \"\"\"Format an object attribute in a human-friendly way.\"\"\""},{"line_number":312,"context_line":"    # Split at \u0027:\u0027 and leave the extension name as-is."},{"line_number":313,"context_line":"    parts \u003d attr.rsplit(\u0027:\u0027, 1)"},{"line_number":314,"context_line":"    name \u003d parts[-1].replace(\u0027_\u0027, \u0027 \u0027)"},{"line_number":315,"context_line":"    # Don\u0027t title() on mixed case"},{"line_number":316,"context_line":"    if name.isupper() or name.islower():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2Fi%2FQ%3D","line":313,"updated":"2014-03-05 14:34:38.000000000","message":"Why do we need to split here? attr is simply an attribute name of an object - it should never include a colon. You should be able to use attr directly when replacing \u0027_\u0027 with whitespace and when modifying case. No need to join on return either.","commit_id":"bd1e324cbdc29cef01889614c4f790e8db38287d"},{"author":{"_account_id":8072,"name":"Saurabh Chordiya","email":"schordiya@vmware.com","username":"saurabh"},"change_message_id":"5c4e1c05ce6ec152956207396ca77d5112423e1f","unresolved":false,"context_lines":[{"line_number":310,"context_line":"def _format_field_name(attr):"},{"line_number":311,"context_line":"    \"\"\"Format an object attribute in a human-friendly way.\"\"\""},{"line_number":312,"context_line":"    # Split at \u0027:\u0027 and leave the extension name as-is."},{"line_number":313,"context_line":"    parts \u003d attr.rsplit(\u0027:\u0027, 1)"},{"line_number":314,"context_line":"    name \u003d parts[-1].replace(\u0027_\u0027, \u0027 \u0027)"},{"line_number":315,"context_line":"    # Don\u0027t title() on mixed case"},{"line_number":316,"context_line":"    if name.isupper() or name.islower():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2FbrA%3D","line":313,"in_reply_to":"AAAAVn%2F%2Fi%2FQ%3D","updated":"2014-03-06 06:09:24.000000000","message":"There are 4 attributes that contains colon in volume object:-\n\n1. os-vol-host-attr:host\n\n2. os-vol-mig-status-attr:migstat\n\n3. os-vol-mig-status-attr:name_id\n\n4. os-vol-tenant-attr:tenant_id\n\nAfter splitting it with colon, the first part is simply an extension name and second part is attribute name of an object that needs formatting.\n\nAn example how this above attributes are used and formatted:-\n\n$cinder list --fields os-vol-host-attr:host\n\n+--+--------------------------+\n\n| ID | os-vol-host-attr: Host |\n\n+--+---------------------------+\n\n| \u003cID\u003e | Myhost |\n\n+- -----+----------------------+","commit_id":"bd1e324cbdc29cef01889614c4f790e8db38287d"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"1e69d132471a5a4f48b562eed6a1b04ba34cce86","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    name \u003d parts[-1].replace(\u0027_\u0027, \u0027 \u0027)"},{"line_number":315,"context_line":"    # Don\u0027t title() on mixed case"},{"line_number":316,"context_line":"    if name.isupper() or name.islower():"},{"line_number":317,"context_line":"        name \u003d name.title()"},{"line_number":318,"context_line":"    parts[-1] \u003d name"},{"line_number":319,"context_line":"    return \u0027: \u0027.join(parts)"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2FjcE%3D","line":317,"updated":"2014-03-05 14:34:38.000000000","message":"I suspect you want to run the name through title() regardless of whether or not it is all upper or lowercase. With this if-block, \u0027--fields bOOtable\u0027 would get passed right through to the table.","commit_id":"bd1e324cbdc29cef01889614c4f790e8db38287d"},{"author":{"_account_id":8072,"name":"Saurabh Chordiya","email":"schordiya@vmware.com","username":"saurabh"},"change_message_id":"5c4e1c05ce6ec152956207396ca77d5112423e1f","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    name \u003d parts[-1].replace(\u0027_\u0027, \u0027 \u0027)"},{"line_number":315,"context_line":"    # Don\u0027t title() on mixed case"},{"line_number":316,"context_line":"    if name.isupper() or name.islower():"},{"line_number":317,"context_line":"        name \u003d name.title()"},{"line_number":318,"context_line":"    parts[-1] \u003d name"},{"line_number":319,"context_line":"    return \u0027: \u0027.join(parts)"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2Fbm0%3D","line":317,"in_reply_to":"AAAAVn%2F%2FjcE%3D","updated":"2014-03-06 06:09:24.000000000","message":"Yes, no need to title() the mixed case, because there may be a purpose to use mixed case for that filed, so we do not need to format mixed case.\n\nAnd currently no valid use case exist of mixed case with volume object.","commit_id":"bd1e324cbdc29cef01889614c4f790e8db38287d"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"1e69d132471a5a4f48b562eed6a1b04ba34cce86","unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    Optionally pass a dict mapping attribute names to a function. The function"},{"line_number":328,"context_line":"    will be passed the value of the attribute and should return the string to"},{"line_number":329,"context_line":"    display."},{"line_number":330,"context_line":"    \"\"\""},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def get_field(obj):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2FjBI%3D","line":329,"updated":"2014-03-05 14:34:38.000000000","message":"This second paragraph isn\u0027t really pertinent to this function. It\u0027s more about how the attribute/formatter will be used in other code (like print_list). Unless I\u0027m missing something, please remove it.","commit_id":"bd1e324cbdc29cef01889614c4f790e8db38287d"},{"author":{"_account_id":8072,"name":"Saurabh Chordiya","email":"schordiya@vmware.com","username":"saurabh"},"change_message_id":"5c4e1c05ce6ec152956207396ca77d5112423e1f","unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    Optionally pass a dict mapping attribute names to a function. The function"},{"line_number":328,"context_line":"    will be passed the value of the attribute and should return the string to"},{"line_number":329,"context_line":"    display."},{"line_number":330,"context_line":"    \"\"\""},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def get_field(obj):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2Fblc%3D","line":329,"in_reply_to":"AAAAVn%2F%2FjBI%3D","updated":"2014-03-06 06:09:24.000000000","message":"Yes, you are right.","commit_id":"bd1e324cbdc29cef01889614c4f790e8db38287d"}],"cinderclient/v1/shell.py":[{"author":{"_account_id":7051,"name":"Swapnil Kulkarni","email":"skulkarn@redhat.com","username":"swapnilkulkarni2608"},"change_message_id":"94a840b80a3594fad350b8c17190d9776e36d3ea","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            \u0027Bootable\u0027,"},{"line_number":206,"context_line":"            \u0027Attached to\u0027"},{"line_number":207,"context_line":"        ]"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    utils.print_list(volumes, columns, formatters)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2Bq%2Fg%3D","line":208,"updated":"2014-01-23 10:52:46.000000000","message":"can you add support for fields os-vol-host-attr:host, os-vol-mig-status-attr:migstat, os-vol-mig-status-attr:name_id, os-vol-mig-status-attr:name_id. Otherwise the statement in the fields arg \u0027Use the show command to see which fields are available.\u0027 does not validate for all values provided with cinder show. You can see novaclient as ref.","commit_id":"aa4504a9cfb6472f9a4f057aba80a44bc6945319"},{"author":{"_account_id":8072,"name":"Saurabh Chordiya","email":"schordiya@vmware.com","username":"saurabh"},"change_message_id":"f21c1d58d2500421181b8c38d174888d39b9dc04","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            \u0027Bootable\u0027,"},{"line_number":206,"context_line":"            \u0027Attached to\u0027"},{"line_number":207,"context_line":"        ]"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    utils.print_list(volumes, columns, formatters)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2Bq9I%3D","line":208,"in_reply_to":"AAAAUH%2F%2Bq%2Fg%3D","updated":"2014-01-23 10:59:05.000000000","message":"Yes, they are already supported\nFor example we can use it as -\u003e cinder list --fields os-vol-host-attr:host,os-vol-mig-status-attr:migstat,os-vol-mig-status-attr:name_id","commit_id":"aa4504a9cfb6472f9a4f057aba80a44bc6945319"},{"author":{"_account_id":8072,"name":"Saurabh Chordiya","email":"schordiya@vmware.com","username":"saurabh"},"change_message_id":"f29fe1440dbe085c5a14fe4c36d076a4effaeb4b","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            \u0027Bootable\u0027,"},{"line_number":206,"context_line":"            \u0027Attached to\u0027"},{"line_number":207,"context_line":"        ]"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    utils.print_list(volumes, columns, formatters)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BlDc%3D","line":208,"in_reply_to":"AAAAUH%2F%2Bq38%3D","updated":"2014-01-24 07:16:51.000000000","message":"Swapnil, Currently self.run_command(\u0027list\u0027) --\u003e https://github.com/openstack/python-cinderclient/blob/master/cinderclient/tests/v2/test_shell.py#L70 doesn\u0027t return output, so I can\u0027t check that field presence in output. any suggestion?","commit_id":"aa4504a9cfb6472f9a4f057aba80a44bc6945319"},{"author":{"_account_id":7051,"name":"Swapnil Kulkarni","email":"skulkarn@redhat.com","username":"swapnilkulkarni2608"},"change_message_id":"8f9a11b3f292d0f67e3a9d79af47b649bbc8723b","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            \u0027Bootable\u0027,"},{"line_number":206,"context_line":"            \u0027Attached to\u0027"},{"line_number":207,"context_line":"        ]"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    utils.print_list(volumes, columns, formatters)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2Bq38%3D","line":208,"in_reply_to":"AAAAUH%2F%2Bq9I%3D","updated":"2014-01-23 11:11:31.000000000","message":"Saurabh, I had checked the novaclient earlier for this change which has some conversion matrices as I remember, I thought which would be necessary here as well. but supposedly not needed. can you add some tests for the checking fields?Thanks!","commit_id":"aa4504a9cfb6472f9a4f057aba80a44bc6945319"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"8726f7c3b249689be0e00c0c369e65f9889d1a9d","unresolved":false,"context_lines":[{"line_number":165,"context_line":"@utils.arg(\u0027--fields\u0027,"},{"line_number":166,"context_line":"           default\u003dNone,"},{"line_number":167,"context_line":"           metavar\u003d\u0027\u003cfields\u003e\u0027,"},{"line_number":168,"context_line":"           help\u003d\u0027Comma-separated list of fields to display. \u0027"},{"line_number":169,"context_line":"           \u0027Use the show command to see which fields are available.\u0027)"},{"line_number":170,"context_line":"@utils.service_type(\u0027volume\u0027)"},{"line_number":171,"context_line":"def do_list(cs, args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FuQM%3D","line":168,"updated":"2014-03-04 13:52:12.000000000","message":"Rather than deal with comma-separated values, use nargs\u003d\u0027+\u0027. Check out the argparse docs for more info: http://docs.python.org/2/library/argparse.html#nargs","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":8072,"name":"Saurabh Chordiya","email":"schordiya@vmware.com","username":"saurabh"},"change_message_id":"3873a64953e3b961e4d2875ed52a93c49ee13eea","unresolved":false,"context_lines":[{"line_number":165,"context_line":"@utils.arg(\u0027--fields\u0027,"},{"line_number":166,"context_line":"           default\u003dNone,"},{"line_number":167,"context_line":"           metavar\u003d\u0027\u003cfields\u003e\u0027,"},{"line_number":168,"context_line":"           help\u003d\u0027Comma-separated list of fields to display. \u0027"},{"line_number":169,"context_line":"           \u0027Use the show command to see which fields are available.\u0027)"},{"line_number":170,"context_line":"@utils.service_type(\u0027volume\u0027)"},{"line_number":171,"context_line":"def do_list(cs, args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FlvM%3D","line":168,"in_reply_to":"AAAAVn%2F%2FuQM%3D","updated":"2014-03-05 07:07:09.000000000","message":"Done","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"8726f7c3b249689be0e00c0c369e65f9889d1a9d","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    formatters \u003d {}"},{"line_number":189,"context_line":"    field_titles \u003d []"},{"line_number":190,"context_line":"    if args.fields:"},{"line_number":191,"context_line":"        for field in args.fields.split(\u0027,\u0027):"},{"line_number":192,"context_line":"            field_title, formatter \u003d utils._make_field_formatter(field)"},{"line_number":193,"context_line":"            field_titles.append(field_title)"},{"line_number":194,"context_line":"            formatters[field_title] \u003d formatter"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FuQA%3D","line":191,"updated":"2014-03-04 13:52:12.000000000","message":"Using nargs for the \u0027fields\u0027 option above, this for-loop should be \u0027for field in args.fields:\u0027...","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":8072,"name":"Saurabh Chordiya","email":"schordiya@vmware.com","username":"saurabh"},"change_message_id":"3873a64953e3b961e4d2875ed52a93c49ee13eea","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    formatters \u003d {}"},{"line_number":189,"context_line":"    field_titles \u003d []"},{"line_number":190,"context_line":"    if args.fields:"},{"line_number":191,"context_line":"        for field in args.fields.split(\u0027,\u0027):"},{"line_number":192,"context_line":"            field_title, formatter \u003d utils._make_field_formatter(field)"},{"line_number":193,"context_line":"            field_titles.append(field_title)"},{"line_number":194,"context_line":"            formatters[field_title] \u003d formatter"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FlvE%3D","line":191,"in_reply_to":"AAAAVn%2F%2FuQA%3D","updated":"2014-03-05 07:07:09.000000000","message":"Done","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"1e69d132471a5a4f48b562eed6a1b04ba34cce86","unresolved":false,"context_lines":[{"line_number":166,"context_line":"           default\u003dNone,"},{"line_number":167,"context_line":"           metavar\u003d\u0027\u003cfields\u003e\u0027,"},{"line_number":168,"context_line":"           nargs\u003d\u0027+\u0027,"},{"line_number":169,"context_line":"           help\u003d\u0027Comma-separated list of fields to display. \u0027"},{"line_number":170,"context_line":"           \u0027Use the show command to see which fields are available.\u0027)"},{"line_number":171,"context_line":"@utils.service_type(\u0027volume\u0027)"},{"line_number":172,"context_line":"def do_list(cs, args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2Fjn0%3D","line":169,"updated":"2014-03-05 14:34:38.000000000","message":"This help string should be updated to indicate --fields is a list of values (i.e., space-delimited), not a comma-separated string.","commit_id":"bd1e324cbdc29cef01889614c4f790e8db38287d"}],"cinderclient/v2/shell.py":[{"author":{"_account_id":7051,"name":"Swapnil Kulkarni","email":"skulkarn@redhat.com","username":"swapnilkulkarni2608"},"change_message_id":"94a840b80a3594fad350b8c17190d9776e36d3ea","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            \u0027Volume Type\u0027,"},{"line_number":200,"context_line":"            \u0027Bootable\u0027,"},{"line_number":201,"context_line":"            \u0027Attached to\u0027"},{"line_number":202,"context_line":"        ]"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    utils.print_list(volumes, columns, formatters)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2Bq%2Fs%3D","line":202,"updated":"2014-01-23 10:52:46.000000000","message":"same as v1","commit_id":"aa4504a9cfb6472f9a4f057aba80a44bc6945319"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"8726f7c3b249689be0e00c0c369e65f9889d1a9d","unresolved":false,"context_lines":[{"line_number":156,"context_line":"@utils.arg(\u0027--fields\u0027,"},{"line_number":157,"context_line":"           default\u003dNone,"},{"line_number":158,"context_line":"           metavar\u003d\u0027\u003cfields\u003e\u0027,"},{"line_number":159,"context_line":"           help\u003d\u0027Comma-separated list of fields to display. \u0027"},{"line_number":160,"context_line":"           \u0027Use the show command to see which fields are available.\u0027)"},{"line_number":161,"context_line":"@utils.service_type(\u0027volumev2\u0027)"},{"line_number":162,"context_line":"def do_list(cs, args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FuPg%3D","line":159,"updated":"2014-03-04 13:52:12.000000000","message":"See v1/shell.py comments.","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"8726f7c3b249689be0e00c0c369e65f9889d1a9d","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    formatters \u003d {}"},{"line_number":184,"context_line":"    field_titles \u003d []"},{"line_number":185,"context_line":"    if args.fields:"},{"line_number":186,"context_line":"        for field in args.fields.split(\u0027,\u0027):"},{"line_number":187,"context_line":"            field_title, formatter \u003d utils._make_field_formatter(field)"},{"line_number":188,"context_line":"            field_titles.append(field_title)"},{"line_number":189,"context_line":"            formatters[field_title] \u003d formatter"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FuPY%3D","line":186,"updated":"2014-03-04 13:52:12.000000000","message":"See v1/shell.py comments.","commit_id":"e6ab87234bfbe3f66a08c255317bb4044babeb31"},{"author":{"_account_id":7764,"name":"Peter Hamilton","email":"peter.hamilton@jhuapl.edu","username":"Peter"},"change_message_id":"1e69d132471a5a4f48b562eed6a1b04ba34cce86","unresolved":false,"context_lines":[{"line_number":157,"context_line":"           default\u003dNone,"},{"line_number":158,"context_line":"           metavar\u003d\u0027\u003cfields\u003e\u0027,"},{"line_number":159,"context_line":"           nargs\u003d\u0027+\u0027,"},{"line_number":160,"context_line":"           help\u003d\u0027Comma-separated list of fields to display. \u0027"},{"line_number":161,"context_line":"           \u0027Use the show command to see which fields are available.\u0027)"},{"line_number":162,"context_line":"@utils.service_type(\u0027volumev2\u0027)"},{"line_number":163,"context_line":"def do_list(cs, args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2Fjno%3D","line":160,"updated":"2014-03-05 14:34:38.000000000","message":"See v1/shell.py comment.","commit_id":"bd1e324cbdc29cef01889614c4f790e8db38287d"}]}
