)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"401a83ced104645c0b6d3de715f0cdf334b6212a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Akihiro Motoki \u003cmotoki@da.jp.nec.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-28 00:39:55 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add common utilities for OSC plugin implementation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ia36687843c56ebde0d3705ef11435ec7f5cff9d8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"bacf61ea_505b7987","line":7,"updated":"2016-07-28 17:14:59.000000000","message":"what\u0027s the difference between the non-v2 and v2 versions?","commit_id":"7e91391e16c43aba2386863792d4d75caf9a2849"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"89edc1dab042f272e81b33229df33d32ed34a922","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Akihiro Motoki \u003cmotoki@da.jp.nec.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-28 00:39:55 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add common utilities for OSC plugin implementation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ia36687843c56ebde0d3705ef11435ec7f5cff9d8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"bacf61ea_3d2395be","line":7,"in_reply_to":"bacf61ea_505b7987","updated":"2016-08-02 08:59:31.000000000","message":"My original intention is that osc/v2/utils.py is for Networking v2.0 API related stuff and osc/utils.py is for OSC plugin generic stuffs.\nI think most column formatters are specific to Networking API v2.0.\n\nThought?\n\nAnyway I will add more description on their usage.","commit_id":"7e91391e16c43aba2386863792d4d75caf9a2849"}],"neutronclient/osc/utils.py":[{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"970c4b1afe211b1d63664c2c350a7ba1a53a3733","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from neutronclient._i18n import _"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def get_column_definitions(attr_map, long_listing):"},{"line_number":21,"context_line":"    \"\"\"Return table headers and column names for a listing table."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    :parameter attr_map: a list of table entry definitions."}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_7635ced8","line":20,"range":{"start_line":20,"start_character":37,"end_line":20,"end_character":49},"updated":"2016-07-28 20:16:58.000000000","message":"should we set a default value of False to this arg ?","commit_id":"7e91391e16c43aba2386863792d4d75caf9a2849"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"1928c84b0e716f0c1d26b0cd18fdbb18c11ce1bc","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from neutronclient._i18n import _"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def get_column_definitions(attr_map, long_listing):"},{"line_number":21,"context_line":"    \"\"\"Return table headers and column names for a listing table."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    :parameter attr_map: a list of table entry definitions."}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_22594dff","line":20,"range":{"start_line":20,"start_character":37,"end_line":20,"end_character":49},"in_reply_to":"bacf61ea_7635ced8","updated":"2016-07-28 23:17:45.000000000","message":"never mind i guess","commit_id":"7e91391e16c43aba2386863792d4d75caf9a2849"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"401a83ced104645c0b6d3de715f0cdf334b6212a","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def get_columns(item, attr_map\u003dNone):"},{"line_number":45,"context_line":"    attr_map \u003d attr_map or tuple([])"},{"line_number":46,"context_line":"    _attr_map_dict \u003d dict((col, hdr) for col, hdr, default in attr_map)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    columns \u003d [(column, _attr_map_dict.get(column, column))"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_b01c75c2","line":45,"updated":"2016-07-28 17:14:59.000000000","message":"docstrings here would be good.","commit_id":"7e91391e16c43aba2386863792d4d75caf9a2849"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"89edc1dab042f272e81b33229df33d32ed34a922","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def get_columns(item, attr_map\u003dNone):"},{"line_number":45,"context_line":"    attr_map \u003d attr_map or tuple([])"},{"line_number":46,"context_line":"    _attr_map_dict \u003d dict((col, hdr) for col, hdr, default in attr_map)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    columns \u003d [(column, _attr_map_dict.get(column, column))"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_a84aa552","line":45,"in_reply_to":"bacf61ea_b01c75c2","updated":"2016-08-02 08:59:31.000000000","message":"Sure. I will add docstrings for all functions in this module.","commit_id":"7e91391e16c43aba2386863792d4d75caf9a2849"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"970c4b1afe211b1d63664c2c350a7ba1a53a3733","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            tuple(col[1] for col in columns))"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def add_project_owner_option_to_parser(parser):"},{"line_number":56,"context_line":"    parser.add_argument("},{"line_number":57,"context_line":"        \u0027--project\u0027,"},{"line_number":58,"context_line":"        metavar\u003d\u0027\u003cproject\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_eb155b49","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":15},"updated":"2016-07-28 20:16:58.000000000","message":"project_domain_owner? or are we trying to be a little different than osc :)","commit_id":"7e91391e16c43aba2386863792d4d75caf9a2849"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"89edc1dab042f272e81b33229df33d32ed34a922","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            tuple(col[1] for col in columns))"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def add_project_owner_option_to_parser(parser):"},{"line_number":56,"context_line":"    parser.add_argument("},{"line_number":57,"context_line":"        \u0027--project\u0027,"},{"line_number":58,"context_line":"        metavar\u003d\u0027\u003cproject\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_28087527","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":15},"in_reply_to":"bacf61ea_eb155b49","updated":"2016-08-02 08:59:31.000000000","message":"OSC or osc-lib does not provide this kind of method. It is different from OSC one, but I think we need both project and project-domain to specify a project by name, so I prepare this method. I think it is better to feedback to osc-lib.","commit_id":"7e91391e16c43aba2386863792d4d75caf9a2849"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"3880ebf59f38cc3bf10f41eff62695c39836e781","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        metavar\u003d\u0027\u003cproject\u003e\u0027,"},{"line_number":59,"context_line":"        help\u003d_(\"Owner\u0027s project (name or ID)\")"},{"line_number":60,"context_line":"    )"},{"line_number":61,"context_line":"    # Borrowed from openstackclient.identity.common"},{"line_number":62,"context_line":"    # as it is not exposed officially."},{"line_number":63,"context_line":"    parser.add_argument("},{"line_number":64,"context_line":"        \u0027--project-domain\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_507384e7","line":61,"updated":"2016-07-28 14:30:11.000000000","message":"Consider adding a TODO here to pull from osc-lib once available there.","commit_id":"7e91391e16c43aba2386863792d4d75caf9a2849"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"89edc1dab042f272e81b33229df33d32ed34a922","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        metavar\u003d\u0027\u003cproject\u003e\u0027,"},{"line_number":59,"context_line":"        help\u003d_(\"Owner\u0027s project (name or ID)\")"},{"line_number":60,"context_line":"    )"},{"line_number":61,"context_line":"    # Borrowed from openstackclient.identity.common"},{"line_number":62,"context_line":"    # as it is not exposed officially."},{"line_number":63,"context_line":"    parser.add_argument("},{"line_number":64,"context_line":"        \u0027--project-domain\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_080bf124","line":61,"in_reply_to":"bacf61ea_507384e7","updated":"2016-08-02 08:59:31.000000000","message":"sure","commit_id":"7e91391e16c43aba2386863792d4d75caf9a2849"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"d8904f20132a96bda34ae08e2a2414c4e2c6bf09","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        headers \u003d [hdr for col, hdr, default in attr_map if default]"},{"line_number":52,"context_line":"        columns \u003d [col for col, hdr, default in attr_map if default]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    return headers, columns"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def get_columns(item, attr_map\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_25b3220c","line":54,"range":{"start_line":54,"start_character":20,"end_line":54,"end_character":27},"updated":"2016-08-31 09:43:16.000000000","message":"It\u0027s better to be sorted by headers.","commit_id":"211a460991266edca829db809c520603e191f842"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"7341c8fad0277afd47dd90309b29f70e57ca328b","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        headers \u003d [hdr for col, hdr, default in attr_map if default]"},{"line_number":52,"context_line":"        columns \u003d [col for col, hdr, default in attr_map if default]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    return headers, columns"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def get_columns(item, attr_map\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_b4b28ae3","line":54,"range":{"start_line":54,"start_character":11,"end_line":54,"end_character":27},"updated":"2016-09-02 00:44:37.000000000","message":"Would you tell me why sorting is not necessary?  Do these values return a same order?  I\u0027m still not cleared.","commit_id":"80afe38d46f7c99280c41d64a08f69c5de102790"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"da9cc271ff764a4b268817ec0c1802f4f2a69318","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        headers \u003d [hdr for col, hdr, default in attr_map if default]"},{"line_number":52,"context_line":"        columns \u003d [col for col, hdr, default in attr_map if default]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    return headers, columns"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def get_columns(item, attr_map\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_43d31fd5","line":54,"range":{"start_line":54,"start_character":11,"end_line":54,"end_character":27},"in_reply_to":"fa7ab95a_34974c91","updated":"2016-09-02 15:34:42.000000000","message":"Ah, yes. It\u0027s sounds good.  The columns are sorted alphabetical order when \u0027list\u0027 and \u0027show\u0027 result.  I think it\u0027s better to add \u0027long_listing\u003dFalse\u0027 for get_columns.","commit_id":"80afe38d46f7c99280c41d64a08f69c5de102790"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"52590ff351e47174f0e6a54ac35052b5453917d7","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        headers \u003d [hdr for col, hdr, default in attr_map if default]"},{"line_number":52,"context_line":"        columns \u003d [col for col, hdr, default in attr_map if default]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    return headers, columns"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def get_columns(item, attr_map\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_34974c91","line":54,"range":{"start_line":54,"start_character":11,"end_line":54,"end_character":27},"in_reply_to":"fa7ab95a_b4b28ae3","updated":"2016-09-02 13:25:05.000000000","message":"The order of attr_map is honored. By doing so, developer can control the order of headers in a table.\n\nThis method is mainly used for list operation and the next method is intended to use for show operation, but it might be better to have some kind of consistency. How about changing the next method \"get_columns\"? (See my comment below)","commit_id":"80afe38d46f7c99280c41d64a08f69c5de102790"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"7341c8fad0277afd47dd90309b29f70e57ca328b","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        metavar\u003d\u0027\u003cproject-domain\u003e\u0027,"},{"line_number":111,"context_line":"        help\u003d_(\u0027Domain the project belongs to (name or ID). \u0027"},{"line_number":112,"context_line":"               \u0027This can be used in case collisions between project names \u0027"},{"line_number":113,"context_line":"               \u0027exist.\u0027),"},{"line_number":114,"context_line":"    )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_14c25634","line":113,"range":{"start_line":113,"start_character":21,"end_line":113,"end_character":22},"updated":"2016-09-02 00:44:37.000000000","message":"[General comment] Period is not necessary.  Please refer following comment.\n\n* https://review.openstack.org/#/c/351582/7/neutronclient/osc/v2/fwaas/firewallgroup.py@30","commit_id":"80afe38d46f7c99280c41d64a08f69c5de102790"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"52590ff351e47174f0e6a54ac35052b5453917d7","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        metavar\u003d\u0027\u003cproject-domain\u003e\u0027,"},{"line_number":111,"context_line":"        help\u003d_(\u0027Domain the project belongs to (name or ID). \u0027"},{"line_number":112,"context_line":"               \u0027This can be used in case collisions between project names \u0027"},{"line_number":113,"context_line":"               \u0027exist.\u0027),"},{"line_number":114,"context_line":"    )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_e28a7463","line":113,"range":{"start_line":113,"start_character":21,"end_line":113,"end_character":22},"in_reply_to":"fa7ab95a_14c25634","updated":"2016-09-02 13:25:05.000000000","message":"Honestly I am not sure what is the answer.\n\n- First, this method is copied from openstackclient repo (just to avoid importing openstackclient), so this help message was reviewed by OSC team.\n- Second, when I look OSC help, I see several cases where a help message consists of two or more sentences and the help message ends with a period. (Note that most help message with a single sentence ends without period.)","commit_id":"80afe38d46f7c99280c41d64a08f69c5de102790"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"da9cc271ff764a4b268817ec0c1802f4f2a69318","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        metavar\u003d\u0027\u003cproject-domain\u003e\u0027,"},{"line_number":111,"context_line":"        help\u003d_(\u0027Domain the project belongs to (name or ID). \u0027"},{"line_number":112,"context_line":"               \u0027This can be used in case collisions between project names \u0027"},{"line_number":113,"context_line":"               \u0027exist.\u0027),"},{"line_number":114,"context_line":"    )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da7fb54a_64e70441","line":113,"range":{"start_line":113,"start_character":21,"end_line":113,"end_character":22},"in_reply_to":"fa7ab95a_e28a7463","updated":"2016-09-02 15:34:42.000000000","message":"In fact, I think it should be put period even if docstring or help message.(I saw many help msgs/docstrings with \u0027.\u0027)\n\nThis is my first commit to CLI therefore I assumed that I should follow reviewer\u0027s comment.  I\u0027ll check more carefully hereafter.","commit_id":"80afe38d46f7c99280c41d64a08f69c5de102790"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"7341c8fad0277afd47dd90309b29f70e57ca328b","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"def _find_identity_resource(identity_client_manager, name_or_id,"},{"line_number":145,"context_line":"                            resource_type, **kwargs):"},{"line_number":146,"context_line":"    \"\"\"Find a specific identity resource."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    Using keystoneclient\u0027s manager, attempt to find a specific resource by its"},{"line_number":149,"context_line":"    name or ID. If Forbidden to find the resource (a common case if the user"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_34491ab8","line":146,"updated":"2016-09-02 00:44:37.000000000","message":"[General comment] Period is not necessary here.  Please refer following comment:\n\n* https://review.openstack.org/#/c/351582/7/neutronclient/osc/v2/fwaas/firewallgroup.py@86","commit_id":"80afe38d46f7c99280c41d64a08f69c5de102790"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"52590ff351e47174f0e6a54ac35052b5453917d7","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"def _find_identity_resource(identity_client_manager, name_or_id,"},{"line_number":145,"context_line":"                            resource_type, **kwargs):"},{"line_number":146,"context_line":"    \"\"\"Find a specific identity resource."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    Using keystoneclient\u0027s manager, attempt to find a specific resource by its"},{"line_number":149,"context_line":"    name or ID. If Forbidden to find the resource (a common case if the user"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_ff31310c","line":146,"in_reply_to":"fa7ab95a_34491ab8","updated":"2016-09-02 13:25:05.000000000","message":"I didn\u0027t get your point. The comment you referred to is about CLI command help. In help message of OSC command, we don\u0027t terminate messages with a period, so the comment you mentioned is correct.\n\nOn the other hand, it is a docstring of a normal method.\nI don\u0027t think the comment you mentioned applies to this.\n\nSee PEP257 https://www.python.org/dev/peps/pep-0257/ for more information.","commit_id":"80afe38d46f7c99280c41d64a08f69c5de102790"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"da9cc271ff764a4b268817ec0c1802f4f2a69318","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"def _find_identity_resource(identity_client_manager, name_or_id,"},{"line_number":145,"context_line":"                            resource_type, **kwargs):"},{"line_number":146,"context_line":"    \"\"\"Find a specific identity resource."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    Using keystoneclient\u0027s manager, attempt to find a specific resource by its"},{"line_number":149,"context_line":"    name or ID. If Forbidden to find the resource (a common case if the user"}],"source_content_type":"text/x-python","patch_set":7,"id":"da7fb54a_a4366cb2","line":146,"in_reply_to":"fa7ab95a_ff31310c","updated":"2016-09-02 15:34:42.000000000","message":"Thanks for your reply.  I checked your link and I found following description at [1]\n\n* The docstring is a phrase ending in a period\n\nSo, please ignore my comment. sorry.\n[1]https://www.python.org/dev/peps/pep-0257/#one-line-docstrings","commit_id":"80afe38d46f7c99280c41d64a08f69c5de102790"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"cf0b53d427e92e664efbba0663b3af93155d897e","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    :param attr_map: a list of table entry definitions."},{"line_number":37,"context_line":"      Each entry should be a tuple consisting of"},{"line_number":38,"context_line":"      (API attribute name, header name, default column). For example:"},{"line_number":39,"context_line":"      ((\u0027id\u0027, \u0027ID\u0027, True),"},{"line_number":40,"context_line":"       (\u0027name\u0027, \u0027Name\u0027, True),"},{"line_number":41,"context_line":"       (\u0027tenant_id\u0027, \u0027Project\u0027, False))"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a98d1f4_982302a7","line":38,"range":{"start_line":38,"start_character":40,"end_line":38,"end_character":54},"updated":"2016-09-30 14:02:27.000000000","message":"The current \u0027default column\u0027 field is a boolean field.\n\nI got a feedback from yushiro that there is a case where some column needs to be shown in the default mode (non-long mode).\n\nOne example is firewall-rule-list. A firewall rule has a lot of attributes and he would like to prepare \u0027summary\u0027 column which is synthesized from actual rule attributes in the default mode. In the long mode, \u0027summary\u0027 column is not displayed and actual attributes are shown as is.\n\nIt seems better to take this into account.","commit_id":"b0fa2f2c6a533a9cc7a11325eff2566aaf5afb38"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"0a50d07436921bb36c5a758db208002ad08904c0","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            tuple(col[1] for col in columns))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"# TODO(amotoki): Use osc-lib version once osc-lib provides this."},{"line_number":95,"context_line":"def add_project_owner_option_to_parser(parser):"},{"line_number":96,"context_line":"    \"\"\"Register project and project domain options."},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a8bc5a2_3f6e8395","line":94,"range":{"start_line":94,"start_character":0,"end_line":94,"end_character":64},"updated":"2016-09-23 14:57:06.000000000","message":"How about proposing this to osc-lib now?","commit_id":"b0fa2f2c6a533a9cc7a11325eff2566aaf5afb38"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"cf0b53d427e92e664efbba0663b3af93155d897e","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            tuple(col[1] for col in columns))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"# TODO(amotoki): Use osc-lib version once osc-lib provides this."},{"line_number":95,"context_line":"def add_project_owner_option_to_parser(parser):"},{"line_number":96,"context_line":"    \"\"\"Register project and project domain options."},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a98d1f4_f8e5e637","line":94,"range":{"start_line":94,"start_character":0,"end_line":94,"end_character":64},"in_reply_to":"5a8bc5a2_3f6e8395","updated":"2016-09-30 14:02:27.000000000","message":"I am planning to propose a patch to osc-lib, but at now I\u0027d like to gather opinions from developers of OSC plugin. My plan is to propose a patch around the summit.","commit_id":"b0fa2f2c6a533a9cc7a11325eff2566aaf5afb38"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"0a50d07436921bb36c5a758db208002ad08904c0","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"# The following methods are borrowed from openstackclient.identity.common"},{"line_number":118,"context_line":"# as it is not exposed officially."},{"line_number":119,"context_line":"# TODO(amotoki): Use osc-lib version once osc-lib provides this."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"def find_domain(identity_client, name_or_id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a8bc5a2_9f6237ac","line":119,"range":{"start_line":117,"start_character":0,"end_line":119,"end_character":64},"updated":"2016-09-23 14:57:06.000000000","message":"How about proposing this to osc-lib now?","commit_id":"b0fa2f2c6a533a9cc7a11325eff2566aaf5afb38"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"637a22c305a92e2b916e799a5d553bb5beaca03b","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"# The following methods are borrowed from openstackclient.identity.common"},{"line_number":118,"context_line":"# as it is not exposed officially."},{"line_number":119,"context_line":"# TODO(amotoki): Use osc-lib version once osc-lib provides this."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"def find_domain(identity_client, name_or_id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa6399be_ef4590b3","line":119,"range":{"start_line":117,"start_character":0,"end_line":119,"end_character":64},"in_reply_to":"3a98d1f4_b84d1e40","updated":"2016-10-18 00:27:54.000000000","message":"I filed a bug 1632147 on identity methods to OSC launchpad.","commit_id":"b0fa2f2c6a533a9cc7a11325eff2566aaf5afb38"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"cf0b53d427e92e664efbba0663b3af93155d897e","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"# The following methods are borrowed from openstackclient.identity.common"},{"line_number":118,"context_line":"# as it is not exposed officially."},{"line_number":119,"context_line":"# TODO(amotoki): Use osc-lib version once osc-lib provides this."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"def find_domain(identity_client, name_or_id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a98d1f4_b84d1e40","line":119,"range":{"start_line":117,"start_character":0,"end_line":119,"end_character":64},"in_reply_to":"5a8bc5a2_9f6237ac","updated":"2016-09-30 14:02:27.000000000","message":"It might be better to propose this part first. Thanks.","commit_id":"b0fa2f2c6a533a9cc7a11325eff2566aaf5afb38"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"20cdab192a463d532be9fb0f1aab9b16f6405a03","unresolved":false,"context_lines":[{"line_number":82,"context_line":"       ((\u0027id\u0027, \u0027name\u0027, \u0027tenant_id\u0027, \u0027foo\u0027),  # attributes"},{"line_number":83,"context_line":"        (\u0027ID\u0027, \u0027Name\u0027, \u0027Project\u0027, \u0027foo\u0027)     # display names"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    Both tuples of attributes and display names are sorted by display names"},{"line_number":86,"context_line":"    in the alphabetical order."},{"line_number":87,"context_line":"    Attributes not found in a given attr_map are kept as-is."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    :param item: a dictionary which represents a resource."}],"source_content_type":"text/x-python","patch_set":13,"id":"9a629dbe_263988d9","line":86,"range":{"start_line":85,"start_character":0,"end_line":86,"end_character":30},"updated":"2016-11-13 18:04:43.000000000","message":"I think it should be aligned a behavior with get_column_definitions.  Because, currently, we cannot control the order when uses get_columns.(sorted by display name)  Both methods use a same argument(attr_map), hence the result should be a same order.","commit_id":"0fef5cd84a559784cc8841e6ad2e8b4e4d137603"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4908e18120970406e21f86fbc6e75efbfb3c6f55","unresolved":false,"context_lines":[{"line_number":82,"context_line":"       ((\u0027id\u0027, \u0027name\u0027, \u0027tenant_id\u0027, \u0027foo\u0027),  # attributes"},{"line_number":83,"context_line":"        (\u0027ID\u0027, \u0027Name\u0027, \u0027Project\u0027, \u0027foo\u0027)     # display names"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    Both tuples of attributes and display names are sorted by display names"},{"line_number":86,"context_line":"    in the alphabetical order."},{"line_number":87,"context_line":"    Attributes not found in a given attr_map are kept as-is."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    :param item: a dictionary which represents a resource."}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_51948889","line":86,"range":{"start_line":85,"start_character":0,"end_line":86,"end_character":30},"in_reply_to":"3a71b18c_4272aeae","updated":"2016-12-10 01:11:56.000000000","message":"\"sorting\u0027 comes from the following reasons:\n\n- The current OSC (and Neutron CLI) displays columns in the alphabetical order (the option for sorting might be an option)\n- The order from dict.keys() is random, so there is no reproduce-able order.\n- If there are unknown columns, \n\nAdding an argument \u0027sorting\u0027 is one option, but honestly I don\u0027t see enough reason to add more option.","commit_id":"0fef5cd84a559784cc8841e6ad2e8b4e4d137603"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"ca47a63534ca1b4e92e77c58aef0fe34cf21c7cc","unresolved":false,"context_lines":[{"line_number":82,"context_line":"       ((\u0027id\u0027, \u0027name\u0027, \u0027tenant_id\u0027, \u0027foo\u0027),  # attributes"},{"line_number":83,"context_line":"        (\u0027ID\u0027, \u0027Name\u0027, \u0027Project\u0027, \u0027foo\u0027)     # display names"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    Both tuples of attributes and display names are sorted by display names"},{"line_number":86,"context_line":"    in the alphabetical order."},{"line_number":87,"context_line":"    Attributes not found in a given attr_map are kept as-is."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    :param item: a dictionary which represents a resource."}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_4272aeae","line":86,"range":{"start_line":85,"start_character":0,"end_line":86,"end_character":30},"in_reply_to":"9a629dbe_263988d9","updated":"2016-12-02 07:36:41.000000000","message":"I\u0027m sorry.  I forgot following case in #87\n\n\u003e Attributes not found in a given attr_map are kept as-is.\n\nSo, I understood it should be sorted by display names in all keys(\u003ddisplay_name).  Please ignore my strange comment.","commit_id":"0fef5cd84a559784cc8841e6ad2e8b4e4d137603"}],"neutronclient/osc/v2/trunk/network_trunk.py":[{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5f94ea32b2b53c1bf49567e583043012c09eb472","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":69,"context_line":"            help\u003d_(\"Disable trunk\")"},{"line_number":70,"context_line":"        )"},{"line_number":71,"context_line":"        parser.add_argument("},{"line_number":72,"context_line":"            \u0027--project\u0027,"},{"line_number":73,"context_line":"            metavar\u003d\u0027\u003cproject\u003e\u0027,"},{"line_number":74,"context_line":"            help\u003d_(\"Owner\u0027s project (name or ID)\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_c885435a","line":71,"updated":"2016-08-31 00:32:34.000000000","message":"It duplicates the definition with osc_util L#76.  Therefore, this line is not necessary.","commit_id":"211a460991266edca829db809c520603e191f842"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5f94ea32b2b53c1bf49567e583043012c09eb472","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            metavar\u003d\u0027\u003cproject\u003e\u0027,"},{"line_number":74,"context_line":"            help\u003d_(\"Owner\u0027s project (name or ID)\")"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":"        osc_utils.add_project_domain_option_to_parser(parser)"},{"line_number":77,"context_line":"        return parser"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_cb77fd9d","line":76,"updated":"2016-08-31 00:32:34.000000000","message":"osc_utils.add_project_owner_option_to_parser(parser)","commit_id":"211a460991266edca829db809c520603e191f842"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5f94ea32b2b53c1bf49567e583043012c09eb472","unresolved":false,"context_lines":[{"line_number":331,"context_line":"            parsed_args.project,"},{"line_number":332,"context_line":"            parsed_args.project_domain,"},{"line_number":333,"context_line":"        ).id"},{"line_number":334,"context_line":"        attrs[\u0027tenant_id\u0027] \u003d project_id"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    return attrs"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_48c0537d","line":334,"updated":"2016-08-31 00:32:34.000000000","message":"Finally, the value of \u0027project\u0027 is stored attrs[\u0027tenant_id\u0027].\nI think UT is difficult.  Do you know the better way to add \u0027tenant_id\u0027 only into Namespace?\n\nex. arglist \u003d [\u0027--project\u0027, \u0027my-project\u0027,...]\n    verifylist \u003d [\u0027tenant_id\u0027, \u0027my-project\u0027,..]\n\nIn this case, an error occurred in check_parser(osc_lib/tests/utils.py +127)\n\ntesttools.matchers._impl.MismatchError: \u0027tenant_id\u0027 not in Namespace","commit_id":"211a460991266edca829db809c520603e191f842"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"8f128e4e54b3cd76e8560d152c06cf6a1a9f5420","unresolved":false,"context_lines":[{"line_number":331,"context_line":"            parsed_args.project,"},{"line_number":332,"context_line":"            parsed_args.project_domain,"},{"line_number":333,"context_line":"        ).id"},{"line_number":334,"context_line":"        attrs[\u0027tenant_id\u0027] \u003d project_id"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    return attrs"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_abe26eff","line":334,"in_reply_to":"fa7ab95a_48c0537d","updated":"2016-09-01 00:29:55.000000000","message":"I\u0027m sorry this is my misunderstanding.  Please forget it.","commit_id":"211a460991266edca829db809c520603e191f842"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"f036a4127b947de2917444ef429eb117d82b6b15","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            metavar\u003d\u0027\u003cproject\u003e\u0027,"},{"line_number":74,"context_line":"            help\u003d_(\"Owner\u0027s project (name or ID)\")"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":"        osc_utils.add_project_domain_option_to_parser(parser)"},{"line_number":77,"context_line":"        return parser"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_345a4884","line":76,"updated":"2016-08-31 20:53:37.000000000","message":"domain vs owner","commit_id":"0864487ac5dad5931a0a534f0e627a6d1c79d7e7"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"47164096d508d2ff7f1efca17d06b4fd9a8d6c55","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            metavar\u003d\u0027\u003cproject\u003e\u0027,"},{"line_number":74,"context_line":"            help\u003d_(\"Owner\u0027s project (name or ID)\")"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":"        osc_utils.add_project_domain_option_to_parser(parser)"},{"line_number":77,"context_line":"        return parser"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_8b204a4b","line":76,"in_reply_to":"fa7ab95a_345a4884","updated":"2016-09-01 00:29:23.000000000","message":"Done","commit_id":"0864487ac5dad5931a0a534f0e627a6d1c79d7e7"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"f4a583e31248e7a53ea5cd44e1d8c15f78aad8ae","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        client.trunk_remove_subports(trunk_id, attrs)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"def _format_admin_state(item):"},{"line_number":308,"context_line":"    return \u0027UP\u0027 if item else \u0027DOWN\u0027"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"_formatters \u003d {"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa6399be_0251bc0e","line":308,"range":{"start_line":307,"start_character":0,"end_line":308,"end_character":35},"updated":"2016-10-17 22:21:03.000000000","message":"can this be killed in favor of [1]?\n\n[1] https://review.openstack.org/#/c/348097/10/neutronclient/osc/v2/utils.py","commit_id":"b0fa2f2c6a533a9cc7a11325eff2566aaf5afb38"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"637a22c305a92e2b916e799a5d553bb5beaca03b","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        client.trunk_remove_subports(trunk_id, attrs)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"def _format_admin_state(item):"},{"line_number":308,"context_line":"    return \u0027UP\u0027 if item else \u0027DOWN\u0027"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"_formatters \u003d {"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa6399be_ef73d013","line":308,"range":{"start_line":307,"start_character":0,"end_line":308,"end_character":35},"in_reply_to":"fa6399be_0251bc0e","updated":"2016-10-18 00:27:54.000000000","message":"Thanks for the catch. I forgot to drop it.","commit_id":"b0fa2f2c6a533a9cc7a11325eff2566aaf5afb38"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"c0f97f85f203c5274fae4faf369edc9c3988f788","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        client.trunk_remove_subports(trunk_id, attrs)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"def _format_admin_state(item):"},{"line_number":308,"context_line":"    return \u0027UP\u0027 if item else \u0027DOWN\u0027"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_a25069d5","line":307,"updated":"2016-11-02 18:32:07.000000000","message":"Please see Armando\u0027s comment about using the utility method here.","commit_id":"1927ac411b150a8f93bbcafb0bc4c11d76b0efa9"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9a2edaeb8922eeebd159d26de8563a89ffc8298b","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        client.trunk_remove_subports(trunk_id, attrs)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"def _format_admin_state(item):"},{"line_number":308,"context_line":"    return \u0027UP\u0027 if item else \u0027DOWN\u0027"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_33b508ee","line":307,"in_reply_to":"ba5da102_a25069d5","updated":"2016-11-08 14:27:38.000000000","message":"Done","commit_id":"1927ac411b150a8f93bbcafb0bc4c11d76b0efa9"}],"neutronclient/osc/v2/utils.py":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"2edc1444d2637fbd0ed2488388e1b0ef043d8098","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def _format_admin_state(state):"},{"line_number":17,"context_line":"    return \u0027UP\u0027 if state else \u0027DOWN\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_b973927f","line":16,"range":{"start_line":16,"start_character":4,"end_line":16,"end_character":5},"updated":"2016-07-29 14:14:44.000000000","message":"Do you really intend for this to be private?","commit_id":"7e91391e16c43aba2386863792d4d75caf9a2849"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"89edc1dab042f272e81b33229df33d32ed34a922","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def _format_admin_state(state):"},{"line_number":17,"context_line":"    return \u0027UP\u0027 if state else \u0027DOWN\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_bdf30572","line":16,"range":{"start_line":16,"start_character":4,"end_line":16,"end_character":5},"in_reply_to":"bacf61ea_b973927f","updated":"2016-08-02 08:59:31.000000000","message":"This should be public.","commit_id":"7e91391e16c43aba2386863792d4d75caf9a2849"}]}
