)]}'
{"novaclient/v2/shell.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"72da311b4c8cd9ee2be967efdcc8897ff5df201d","unresolved":false,"context_lines":[{"line_number":962,"context_line":"def do_network_list(cs, args):"},{"line_number":963,"context_line":"    \"\"\"Print a list of available networks.\"\"\""},{"line_number":964,"context_line":"    network_list \u003d cs.networks.list()"},{"line_number":965,"context_line":"    columns \u003d [\u0027Id\u0027, \u0027Label\u0027, \u0027Cidr\u0027]"},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"    formatters \u003d {}"},{"line_number":968,"context_line":"    field_titles \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_484f2abd","line":965,"range":{"start_line":965,"start_character":4,"end_line":965,"end_character":37},"updated":"2016-04-25 03:07:37.000000000","message":"$ nova network-list --field id   \nERROR (Exception): Field names must be unique!","commit_id":"4d85363c8b01821a09627d6b6c09de3c4629d4e9"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"91cb314934e7f0c0a815ae9fce72ca4c638ab82a","unresolved":false,"context_lines":[{"line_number":957,"context_line":"    \u0027--fields\u0027,"},{"line_number":958,"context_line":"    default\u003dNone,"},{"line_number":959,"context_line":"    metavar\u003d\u0027\u003cfields\u003e\u0027,"},{"line_number":960,"context_line":"    help\u003d_(\u0027Comma-separated list of fields to display extra fields. \u0027"},{"line_number":961,"context_line":"           \u0027Use the show command to see which fields are available.\u0027))"},{"line_number":962,"context_line":"def do_network_list(cs, args):"},{"line_number":963,"context_line":"    \"\"\"Print a list of available networks.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_308b2320","line":960,"range":{"start_line":960,"start_character":53,"end_line":960,"end_character":66},"updated":"2016-04-25 16:49:05.000000000","message":"The highlighted change seems to be redundant to me.","commit_id":"b792c1c4998911ea0a70a61ca67ff9681de598ac"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"2efaac858914fc378731b75eb3bda2cdff3cedc2","unresolved":false,"context_lines":[{"line_number":957,"context_line":"    \u0027--fields\u0027,"},{"line_number":958,"context_line":"    default\u003dNone,"},{"line_number":959,"context_line":"    metavar\u003d\u0027\u003cfields\u003e\u0027,"},{"line_number":960,"context_line":"    help\u003d_(\u0027Comma-separated list of fields to display extra fields. \u0027"},{"line_number":961,"context_line":"           \u0027Use the show command to see which fields are available.\u0027))"},{"line_number":962,"context_line":"def do_network_list(cs, args):"},{"line_number":963,"context_line":"    \"\"\"Print a list of available networks.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_73b765f5","line":960,"range":{"start_line":960,"start_character":53,"end_line":960,"end_character":66},"in_reply_to":"1a122d0e_308b2320","updated":"2016-04-25 18:33:39.000000000","message":"Done","commit_id":"b792c1c4998911ea0a70a61ca67ff9681de598ac"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"91cb314934e7f0c0a815ae9fce72ca4c638ab82a","unresolved":false,"context_lines":[{"line_number":963,"context_line":"    \"\"\"Print a list of available networks.\"\"\""},{"line_number":964,"context_line":"    network_list \u003d cs.networks.list()"},{"line_number":965,"context_line":"    columns \u003d [\u0027ID\u0027, \u0027Label\u0027, \u0027Cidr\u0027]"},{"line_number":966,"context_line":"    columns_lower \u003d [c.lower() for c in columns]"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"    formatters \u003d {}"},{"line_number":969,"context_line":"    field_titles \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_b077333a","line":966,"updated":"2016-04-25 16:49:05.000000000","message":"Could use a set for this, too:\n\n    columns_lower \u003d set(c.lower() for c in columns)","commit_id":"b792c1c4998911ea0a70a61ca67ff9681de598ac"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"2efaac858914fc378731b75eb3bda2cdff3cedc2","unresolved":false,"context_lines":[{"line_number":963,"context_line":"    \"\"\"Print a list of available networks.\"\"\""},{"line_number":964,"context_line":"    network_list \u003d cs.networks.list()"},{"line_number":965,"context_line":"    columns \u003d [\u0027ID\u0027, \u0027Label\u0027, \u0027Cidr\u0027]"},{"line_number":966,"context_line":"    columns_lower \u003d [c.lower() for c in columns]"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"    formatters \u003d {}"},{"line_number":969,"context_line":"    field_titles \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_b3d61dc1","line":966,"in_reply_to":"1a122d0e_b077333a","updated":"2016-04-25 18:33:39.000000000","message":"Done","commit_id":"b792c1c4998911ea0a70a61ca67ff9681de598ac"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"91cb314934e7f0c0a815ae9fce72ca4c638ab82a","unresolved":false,"context_lines":[{"line_number":975,"context_line":"                continue"},{"line_number":976,"context_line":"            field_title, formatter \u003d utils._make_field_formatter(field, {})"},{"line_number":977,"context_line":"            if field_title.lower() in columns_lower:"},{"line_number":978,"context_line":"                continue"},{"line_number":979,"context_line":"            field_titles.append(field_title)"},{"line_number":980,"context_line":"            formatters[field_title] \u003d formatter"},{"line_number":981,"context_line":"        if non_existent_fields:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_10c5473b","line":978,"updated":"2016-04-25 16:49:05.000000000","message":"A thought: what if someone uses, e.g., \"--fields\u003dfield1,field2,field1,field3\"; as I read this, \"field1\" would end up duplicated in the output, even though this code would catch, say, a duplicated id.  If you go with the \u0027set\u0027 approach I suggest above, you could add \"columns_lower.add(field_title.lower())\" after this line and prevent that possibility.","commit_id":"b792c1c4998911ea0a70a61ca67ff9681de598ac"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"2efaac858914fc378731b75eb3bda2cdff3cedc2","unresolved":false,"context_lines":[{"line_number":975,"context_line":"                continue"},{"line_number":976,"context_line":"            field_title, formatter \u003d utils._make_field_formatter(field, {})"},{"line_number":977,"context_line":"            if field_title.lower() in columns_lower:"},{"line_number":978,"context_line":"                continue"},{"line_number":979,"context_line":"            field_titles.append(field_title)"},{"line_number":980,"context_line":"            formatters[field_title] \u003d formatter"},{"line_number":981,"context_line":"        if non_existent_fields:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_5363491a","line":978,"in_reply_to":"1a122d0e_10c5473b","updated":"2016-04-25 18:33:39.000000000","message":"Done","commit_id":"b792c1c4998911ea0a70a61ca67ff9681de598ac"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"91cb314934e7f0c0a815ae9fce72ca4c638ab82a","unresolved":false,"context_lines":[{"line_number":1439,"context_line":"    \u0027--fields\u0027,"},{"line_number":1440,"context_line":"    default\u003dNone,"},{"line_number":1441,"context_line":"    metavar\u003d\u0027\u003cfields\u003e\u0027,"},{"line_number":1442,"context_line":"    help\u003d_(\u0027Comma-separated list of fields to display extra fields. \u0027"},{"line_number":1443,"context_line":"           \u0027Use the show command to see which fields are available.\u0027))"},{"line_number":1444,"context_line":"@utils.arg("},{"line_number":1445,"context_line":"    \u0027--minimal\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_30e043cc","line":1442,"range":{"start_line":1442,"start_character":53,"end_line":1442,"end_character":66},"updated":"2016-04-25 16:49:05.000000000","message":"Again, this seems redundant to me.","commit_id":"b792c1c4998911ea0a70a61ca67ff9681de598ac"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"91cb314934e7f0c0a815ae9fce72ca4c638ab82a","unresolved":false,"context_lines":[{"line_number":1556,"context_line":"            columns.insert(2, \u0027Tenant ID\u0027)"},{"line_number":1557,"context_line":"        if search_opts[\u0027changes-since\u0027]:"},{"line_number":1558,"context_line":"            columns.append(\u0027Updated\u0027)"},{"line_number":1559,"context_line":"    columns_lower \u003d [c.lower() for c in columns]"},{"line_number":1560,"context_line":""},{"line_number":1561,"context_line":"    if args.minimal and args.fields:"},{"line_number":1562,"context_line":"        msg \u003d _(\u0027--fields cannot coexist with --minimal\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_5004df7c","line":1559,"range":{"start_line":1559,"start_character":20,"end_line":1559,"end_character":48},"updated":"2016-04-25 16:49:05.000000000","message":"Again, I advocate a \u0027set\u0027-based approach.","commit_id":"b792c1c4998911ea0a70a61ca67ff9681de598ac"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"91cb314934e7f0c0a815ae9fce72ca4c638ab82a","unresolved":false,"context_lines":[{"line_number":1559,"context_line":"    columns_lower \u003d [c.lower() for c in columns]"},{"line_number":1560,"context_line":""},{"line_number":1561,"context_line":"    if args.minimal and args.fields:"},{"line_number":1562,"context_line":"        msg \u003d _(\u0027--fields cannot coexist with --minimal\u0027)"},{"line_number":1563,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":1564,"context_line":""},{"line_number":1565,"context_line":"    formatters \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_9035d747","line":1562,"range":{"start_line":1562,"start_character":14,"end_line":1562,"end_character":57},"updated":"2016-04-25 16:49:05.000000000","message":"Phrase this as:\n\n    --fields and --minimal are mutually exclusive\n\nFor that matter, argparse has the concept of mutually exclusive options built in; I wonder if @utils.arg() provides a means to utilize that functionality?","commit_id":"b792c1c4998911ea0a70a61ca67ff9681de598ac"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"2efaac858914fc378731b75eb3bda2cdff3cedc2","unresolved":false,"context_lines":[{"line_number":1559,"context_line":"    columns_lower \u003d [c.lower() for c in columns]"},{"line_number":1560,"context_line":""},{"line_number":1561,"context_line":"    if args.minimal and args.fields:"},{"line_number":1562,"context_line":"        msg \u003d _(\u0027--fields cannot coexist with --minimal\u0027)"},{"line_number":1563,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":1564,"context_line":""},{"line_number":1565,"context_line":"    formatters \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_6ea81cdc","line":1562,"range":{"start_line":1562,"start_character":14,"end_line":1562,"end_character":57},"in_reply_to":"1a122d0e_9035d747","updated":"2016-04-25 18:33:39.000000000","message":"let\u0027s keep it untouched\n\nsince this change is out of the bug scope","commit_id":"b792c1c4998911ea0a70a61ca67ff9681de598ac"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"271499a6b2fc6eab6820921aebcf8718ad31b36d","unresolved":false,"context_lines":[{"line_number":957,"context_line":"    \u0027--fields\u0027,"},{"line_number":958,"context_line":"    default\u003dNone,"},{"line_number":959,"context_line":"    metavar\u003d\u0027\u003cfields\u003e\u0027,"},{"line_number":960,"context_line":"    help\u003d_(\u0027Comma-separated list of fields to display.\u0027"},{"line_number":961,"context_line":"           \u0027Use the show command to see which fields are available.\u0027))"},{"line_number":962,"context_line":"def do_network_list(cs, args):"},{"line_number":963,"context_line":"    \"\"\"Print a list of available networks.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_840c7995","line":960,"updated":"2016-04-25 20:08:41.000000000","message":"Need to add one space after the period here, or \"display.\" and \"Use\" will run into one another.  Same below, at line 1443.","commit_id":"60f3b0537f695f21665320351a94a9bbd572d5fc"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"5b94c0fed0fc9004be4be05913a49a49981b9289","unresolved":false,"context_lines":[{"line_number":957,"context_line":"    \u0027--fields\u0027,"},{"line_number":958,"context_line":"    default\u003dNone,"},{"line_number":959,"context_line":"    metavar\u003d\u0027\u003cfields\u003e\u0027,"},{"line_number":960,"context_line":"    help\u003d_(\u0027Comma-separated list of fields to display.\u0027"},{"line_number":961,"context_line":"           \u0027Use the show command to see which fields are available.\u0027))"},{"line_number":962,"context_line":"def do_network_list(cs, args):"},{"line_number":963,"context_line":"    \"\"\"Print a list of available networks.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_06506c31","line":960,"in_reply_to":"1a122d0e_840c7995","updated":"2016-04-26 01:13:41.000000000","message":"Done","commit_id":"60f3b0537f695f21665320351a94a9bbd572d5fc"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"271499a6b2fc6eab6820921aebcf8718ad31b36d","unresolved":false,"context_lines":[{"line_number":1546,"context_line":"    _translate_keys(servers, convert)"},{"line_number":1547,"context_line":"    _translate_extended_states(servers)"},{"line_number":1548,"context_line":""},{"line_number":1549,"context_line":"    id_col \u003d \u0027ID\u0027"},{"line_number":1550,"context_line":""},{"line_number":1551,"context_line":"    formatters \u003d {}"},{"line_number":1552,"context_line":"    field_titles \u003d []"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_a4689522","line":1549,"updated":"2016-04-25 20:08:41.000000000","message":"Were you intending to revert the whole change to do_list(), or just eliminate the added logic to make --minimal and --fields mutually exclusive?  Anyway, I\u0027d suggest copying over the same logic from do_network_list() that uses a set…","commit_id":"60f3b0537f695f21665320351a94a9bbd572d5fc"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"5b94c0fed0fc9004be4be05913a49a49981b9289","unresolved":false,"context_lines":[{"line_number":1546,"context_line":"    _translate_keys(servers, convert)"},{"line_number":1547,"context_line":"    _translate_extended_states(servers)"},{"line_number":1548,"context_line":""},{"line_number":1549,"context_line":"    id_col \u003d \u0027ID\u0027"},{"line_number":1550,"context_line":""},{"line_number":1551,"context_line":"    formatters \u003d {}"},{"line_number":1552,"context_line":"    field_titles \u003d []"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_a626d8cb","line":1549,"in_reply_to":"1a122d0e_a4689522","updated":"2016-04-26 01:13:41.000000000","message":"what I do here is want to keep same logic as in master branch, but 1. remove duplicate columns in args.fields, 2. don\u0027t do the fields things if args.minimal is true.\n\n1554 is needed, because previously, when we do: ``nova list --feilds nonexistent --minimal`` then it will fail, but actually even ``nova list --fields created --minimal`` will not show created field, so the check is actually not needed, because we won\u0027t show that field anyway\n\nwill do in a set way","commit_id":"60f3b0537f695f21665320351a94a9bbd572d5fc"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"71a59d235a98d635030b73bcaf68ab505d56690c","unresolved":false,"context_lines":[{"line_number":1552,"context_line":"    field_titles \u003d []"},{"line_number":1553,"context_line":"    non_existent_fields \u003d []"},{"line_number":1554,"context_line":"    if not args.minimal and args.fields:"},{"line_number":1555,"context_line":"        fields \u003d set(args.fields.split(\u0027,\u0027))"},{"line_number":1556,"context_line":"        fields.discard(\u0027id\u0027)"},{"line_number":1557,"context_line":"        for field in fields:"},{"line_number":1558,"context_line":"            if servers and not hasattr(servers[0], field):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_31667351","line":1555,"updated":"2016-04-26 13:49:42.000000000","message":"First observation: this will randomize the order in which fields will be generated.  Second observation: this doesn\u0027t address the case of \"--fields\u003dfield1,Field1,fIELD1,FIELD1\".","commit_id":"f339bb422263e33ebfd1d713b90b84240f5b1f49"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"629025d6fd253e6d2ff9742e5f58557273390c95","unresolved":false,"context_lines":[{"line_number":1552,"context_line":"    field_titles \u003d []"},{"line_number":1553,"context_line":"    non_existent_fields \u003d []"},{"line_number":1554,"context_line":"    if not args.minimal and args.fields:"},{"line_number":1555,"context_line":"        fields \u003d set(args.fields.split(\u0027,\u0027))"},{"line_number":1556,"context_line":"        fields.discard(\u0027id\u0027)"},{"line_number":1557,"context_line":"        for field in fields:"},{"line_number":1558,"context_line":"            if servers and not hasattr(servers[0], field):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_b59c2e0f","line":1555,"in_reply_to":"1a122d0e_31667351","updated":"2016-04-26 14:24:23.000000000","message":"will fix issue 1, issue 2 doesn\u0027t exist because we will raise a command error for non existent fields","commit_id":"f339bb422263e33ebfd1d713b90b84240f5b1f49"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"71a59d235a98d635030b73bcaf68ab505d56690c","unresolved":false,"context_lines":[{"line_number":1588,"context_line":"            columns.insert(2, \u0027Tenant ID\u0027)"},{"line_number":1589,"context_line":"        if search_opts[\u0027changes-since\u0027]:"},{"line_number":1590,"context_line":"            columns.append(\u0027Updated\u0027)"},{"line_number":1591,"context_line":""},{"line_number":1592,"context_line":"    formatters[\u0027Networks\u0027] \u003d utils._format_servers_list_networks"},{"line_number":1593,"context_line":"    sortby_index \u003d 1"},{"line_number":1594,"context_line":"    if args.sort:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_715c6b7d","line":1591,"updated":"2016-04-26 13:49:42.000000000","message":"Please drop this added line…","commit_id":"f339bb422263e33ebfd1d713b90b84240f5b1f49"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"33de291a4c08a08f467909d702afb8dbf2a4a9c6","unresolved":false,"context_lines":[{"line_number":964,"context_line":"    network_list \u003d cs.networks.list()"},{"line_number":965,"context_line":"    columns \u003d [\u0027ID\u0027, \u0027Label\u0027, \u0027Cidr\u0027]"},{"line_number":966,"context_line":"    columns +\u003d _get_list_table_columns_and_formatters("},{"line_number":967,"context_line":"        args.fields, network_list, exclude_fields\u003d(\u0027id\u0027, \u0027label\u0027, \u0027cidr\u0027))[0]"},{"line_number":968,"context_line":"    utils.print_list(network_list, columns)"},{"line_number":969,"context_line":""},{"line_number":970,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_8db6393c","line":967,"updated":"2016-04-27 05:52:06.000000000","message":"To avoid the duplication, you could do:\n\n    exclude_fields\u003d(c.lower() for c in columns)","commit_id":"4c439f4183b2d35e58f2c7d7d5dc507846893cf8"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"ff820c1bae736c687b690e077ffc851897dae62e","unresolved":false,"context_lines":[{"line_number":964,"context_line":"    network_list \u003d cs.networks.list()"},{"line_number":965,"context_line":"    columns \u003d [\u0027ID\u0027, \u0027Label\u0027, \u0027Cidr\u0027]"},{"line_number":966,"context_line":"    columns +\u003d _get_list_table_columns_and_formatters("},{"line_number":967,"context_line":"        args.fields, network_list, exclude_fields\u003d(\u0027id\u0027, \u0027label\u0027, \u0027cidr\u0027))[0]"},{"line_number":968,"context_line":"    utils.print_list(network_list, columns)"},{"line_number":969,"context_line":""},{"line_number":970,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_4d96e14c","line":967,"in_reply_to":"1a122d0e_8db6393c","updated":"2016-04-27 06:27:08.000000000","message":"Done","commit_id":"4c439f4183b2d35e58f2c7d7d5dc507846893cf8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"33de291a4c08a08f467909d702afb8dbf2a4a9c6","unresolved":false,"context_lines":[{"line_number":1526,"context_line":"    _translate_keys(servers, convert)"},{"line_number":1527,"context_line":"    _translate_extended_states(servers)"},{"line_number":1528,"context_line":""},{"line_number":1529,"context_line":"    id_col \u003d \u0027ID\u0027"},{"line_number":1530,"context_line":"    formatters \u003d {}"},{"line_number":1531,"context_line":""},{"line_number":1532,"context_line":"    _cols, _fmts \u003d _get_list_table_columns_and_formatters("}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_ad87b55f","line":1529,"updated":"2016-04-27 05:52:06.000000000","message":"I\u0027m tempted to suggest moving this line back to line 1493 to eliminate one unneeded alteration to the file.  (Note that if you do that, there will need to be a blank line after it as well, to completely eliminate that segment from the diff.)","commit_id":"4c439f4183b2d35e58f2c7d7d5dc507846893cf8"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"ff820c1bae736c687b690e077ffc851897dae62e","unresolved":false,"context_lines":[{"line_number":1526,"context_line":"    _translate_keys(servers, convert)"},{"line_number":1527,"context_line":"    _translate_extended_states(servers)"},{"line_number":1528,"context_line":""},{"line_number":1529,"context_line":"    id_col \u003d \u0027ID\u0027"},{"line_number":1530,"context_line":"    formatters \u003d {}"},{"line_number":1531,"context_line":""},{"line_number":1532,"context_line":"    _cols, _fmts \u003d _get_list_table_columns_and_formatters("}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_edac0da1","line":1529,"in_reply_to":"1a122d0e_ad87b55f","updated":"2016-04-27 06:27:08.000000000","message":"Done","commit_id":"4c439f4183b2d35e58f2c7d7d5dc507846893cf8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"33de291a4c08a08f467909d702afb8dbf2a4a9c6","unresolved":false,"context_lines":[{"line_number":1529,"context_line":"    id_col \u003d \u0027ID\u0027"},{"line_number":1530,"context_line":"    formatters \u003d {}"},{"line_number":1531,"context_line":""},{"line_number":1532,"context_line":"    _cols, _fmts \u003d _get_list_table_columns_and_formatters("},{"line_number":1533,"context_line":"        args.fields, servers, exclude_fields\u003d(\u0027id\u0027,), filters\u003dfilters)"},{"line_number":1534,"context_line":""},{"line_number":1535,"context_line":"    if args.minimal:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_eda6cd0d","line":1532,"updated":"2016-04-27 05:52:06.000000000","message":"A typical convention is that local variables with a \u0027_\u0027 prefix are unused; thus, I\u0027d suggest renaming these variables to \u0027cols\u0027 and \u0027fmts\u0027 and get rid of the leading \u0027_\u0027.","commit_id":"4c439f4183b2d35e58f2c7d7d5dc507846893cf8"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"ff820c1bae736c687b690e077ffc851897dae62e","unresolved":false,"context_lines":[{"line_number":1529,"context_line":"    id_col \u003d \u0027ID\u0027"},{"line_number":1530,"context_line":"    formatters \u003d {}"},{"line_number":1531,"context_line":""},{"line_number":1532,"context_line":"    _cols, _fmts \u003d _get_list_table_columns_and_formatters("},{"line_number":1533,"context_line":"        args.fields, servers, exclude_fields\u003d(\u0027id\u0027,), filters\u003dfilters)"},{"line_number":1534,"context_line":""},{"line_number":1535,"context_line":"    if args.minimal:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_2d93a55c","line":1532,"in_reply_to":"1a122d0e_eda6cd0d","updated":"2016-04-27 06:27:08.000000000","message":"Done","commit_id":"4c439f4183b2d35e58f2c7d7d5dc507846893cf8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"33de291a4c08a08f467909d702afb8dbf2a4a9c6","unresolved":false,"context_lines":[{"line_number":1595,"context_line":"    if not fields:"},{"line_number":1596,"context_line":"        return [], {}"},{"line_number":1597,"context_line":""},{"line_number":1598,"context_line":"    obj \u003d None if not isinstance(objs, list) else objs[0]"},{"line_number":1599,"context_line":""},{"line_number":1600,"context_line":"    columns \u003d []"},{"line_number":1601,"context_line":"    formatters \u003d {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_6d459d41","line":1598,"updated":"2016-04-27 05:52:06.000000000","message":"This logic doesn\u0027t quite match your documentation for objs.  In particular, this will raise an IndexError if objs is the empty list, whereas your documentation says you would use the value of objs directly.\n\nIf you want to implement the code the way the docstring suggests, the logic should probably look something like this:\n\n    if not objs:\n        obj \u003d None\n    elif isinstance(objs, list):\n        obj \u003d objs[0]\n    else:\n        obj \u003d objs","commit_id":"4c439f4183b2d35e58f2c7d7d5dc507846893cf8"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"ff820c1bae736c687b690e077ffc851897dae62e","unresolved":false,"context_lines":[{"line_number":1595,"context_line":"    if not fields:"},{"line_number":1596,"context_line":"        return [], {}"},{"line_number":1597,"context_line":""},{"line_number":1598,"context_line":"    obj \u003d None if not isinstance(objs, list) else objs[0]"},{"line_number":1599,"context_line":""},{"line_number":1600,"context_line":"    columns \u003d []"},{"line_number":1601,"context_line":"    formatters \u003d {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_ada695be","line":1598,"in_reply_to":"1a122d0e_6d459d41","updated":"2016-04-27 06:27:08.000000000","message":"Done","commit_id":"4c439f4183b2d35e58f2c7d7d5dc507846893cf8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"820f0a301475c081cd9a270882537da924ae11eb","unresolved":false,"context_lines":[{"line_number":1491,"context_line":"    filters \u003d {\u0027flavor\u0027: lambda f: f[\u0027id\u0027],"},{"line_number":1492,"context_line":"               \u0027security_groups\u0027: utils._format_security_groups}"},{"line_number":1493,"context_line":""},{"line_number":1494,"context_line":"    id_col \u003d \u0027ID\u0027"},{"line_number":1495,"context_line":""},{"line_number":1496,"context_line":"    detailed \u003d not args.minimal"},{"line_number":1497,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a122d0e_64000f03","line":1494,"updated":"2016-04-27 13:19:19.000000000","message":"Um…you put this back…","commit_id":"23dbc0f5df456dbe0c5bab2b65cae7c639c56814"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"820f0a301475c081cd9a270882537da924ae11eb","unresolved":false,"context_lines":[{"line_number":1529,"context_line":"    _translate_keys(servers, convert)"},{"line_number":1530,"context_line":"    _translate_extended_states(servers)"},{"line_number":1531,"context_line":""},{"line_number":1532,"context_line":"    id_col \u003d \u0027ID\u0027"},{"line_number":1533,"context_line":"    formatters \u003d {}"},{"line_number":1534,"context_line":""},{"line_number":1535,"context_line":"    cols, fmts \u003d _get_list_table_columns_and_formatters("}],"source_content_type":"text/x-python","patch_set":12,"id":"1a122d0e_bfffceff","line":1532,"updated":"2016-04-27 13:19:19.000000000","message":"…and then left this here :)","commit_id":"23dbc0f5df456dbe0c5bab2b65cae7c639c56814"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"d305a4f279361a8deea8200768fc80ef0cb6d80d","unresolved":false,"context_lines":[{"line_number":1529,"context_line":"    _translate_keys(servers, convert)"},{"line_number":1530,"context_line":"    _translate_extended_states(servers)"},{"line_number":1531,"context_line":""},{"line_number":1532,"context_line":"    id_col \u003d \u0027ID\u0027"},{"line_number":1533,"context_line":"    formatters \u003d {}"},{"line_number":1534,"context_line":""},{"line_number":1535,"context_line":"    cols, fmts \u003d _get_list_table_columns_and_formatters("}],"source_content_type":"text/x-python","patch_set":12,"id":"1a122d0e_dff44af2","line":1532,"in_reply_to":"1a122d0e_bfffceff","updated":"2016-04-27 13:29:00.000000000","message":"I\u0027m glad it is the last one, thank you for looking through all these patches, Sir!","commit_id":"23dbc0f5df456dbe0c5bab2b65cae7c639c56814"}]}
