)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"d31c649f151b372832f0637b7cc3cf8f7b601a96","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I3a8a76d384caa32975f8e77f50f3cf3c3be13786"},{"line_number":13,"context_line":"Closes-Bug: #1546849"},{"line_number":14,"context_line":"Depends-On: I9783bc4ccceae3d361dce52d51483ef2187920a9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"1af94dfe_902cef4b","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":53},"updated":"2016-03-16 12:03:51.000000000","message":"This patch has been merged. We can remove this line now.","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"caa58ca669a104483ddf424a6f63ce70601dd9a9","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I3a8a76d384caa32975f8e77f50f3cf3c3be13786"},{"line_number":13,"context_line":"Closes-Bug: #1546849"},{"line_number":14,"context_line":"Depends-On: I9783bc4ccceae3d361dce52d51483ef2187920a9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"1af94dfe_ea1c2e15","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":53},"in_reply_to":"1af94dfe_902cef4b","updated":"2016-03-17 02:25:41.000000000","message":"Please refer earlier comments from Richard and Brad...","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"}],"doc/source/command-objects/router-port.rst":[{"author":{"_account_id":18658,"name":"Jas Singh","email":"singhj@us.ibm.com","username":"singhj"},"change_message_id":"ca5fdee3e56a1b31736bd002ce4dd81104ea95ab","unresolved":false,"context_lines":[{"line_number":13,"context_line":".. code:: bash"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    os router add port"},{"line_number":16,"context_line":"        \u003cport\u003e \u003crouter\u003e"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":".. option:: \u003cport\u003e"},{"line_number":19,"context_line":"    Port to be added (name or ID)"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7af24918_1a31eeec","line":16,"range":{"start_line":16,"start_character":7,"end_line":16,"end_character":23},"updated":"2016-03-02 17:02:34.000000000","message":"suggest putting these on separate lines","commit_id":"a747255083e5594f03f9632b83a0ad2db287cf60"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"e71f3901f424163c22aee39c167da4a25cebb88b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"        \u003crouter\u003e"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":".. option:: \u003cport\u003e"},{"line_number":20,"context_line":"    Port to be added (name or ID)"},{"line_number":21,"context_line":".. _subnet_delete-subnet:"},{"line_number":22,"context_line":".. describe:: \u003crouter\u003e"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5aef4532_95d88f1f","line":20,"range":{"start_line":20,"start_character":4,"end_line":20,"end_character":33},"updated":"2016-03-07 11:58:22.000000000","message":"Add a blank line here, please.","commit_id":"dc30ba530e71dc20239815235b61be34efb8297e"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"e71f3901f424163c22aee39c167da4a25cebb88b","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":".. option:: \u003cport\u003e"},{"line_number":20,"context_line":"    Port to be added (name or ID)"},{"line_number":21,"context_line":".. _subnet_delete-subnet:"},{"line_number":22,"context_line":".. describe:: \u003crouter\u003e"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    Router to which port would be added (name or ID)"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5aef4532_75f8637d","line":21,"range":{"start_line":21,"start_character":3,"end_line":21,"end_character":25},"updated":"2016-03-07 11:58:22.000000000","message":"And this is wrong comment.","commit_id":"dc30ba530e71dc20239815235b61be34efb8297e"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"7a21716626bb4195dcba37183d94266dc183e394","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":"router"},{"line_number":4,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3afc51ec_cad97185","line":1,"updated":"2016-03-14 19:14:28.000000000","message":"This is really a router resource command and should go in that file","commit_id":"ee228bec030b33aa4e7293cb2bdb46edb44a46e0"}],"doc/source/command-objects/router.rst":[{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"5aa4cfa3b9e731cdc2a75495189481a007973f88","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    List additional fields in output"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"router add port"},{"line_number":85,"context_line":"---------------"},{"line_number":86,"context_line":"Add a port to a router"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1af94dfe_5a9d6b64","line":84,"updated":"2016-03-16 07:35:16.000000000","message":"nit: If we can append the \"router add port\" block at the end of the document, it might be more readable, because now it exactly split the CURD actions of router.","commit_id":"2850d70f445c7908c73c608da8d95987af2ac746"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"fa2e77eb38248c6c49834a314fba232e782dae6d","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    List additional fields in output"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"router add port"},{"line_number":85,"context_line":"---------------"},{"line_number":86,"context_line":"Add a port to a router"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1af94dfe_aaf7c6f3","line":84,"in_reply_to":"1af94dfe_5a9d6b64","updated":"2016-03-17 02:07:21.000000000","message":"Done","commit_id":"2850d70f445c7908c73c608da8d95987af2ac746"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"5aa4cfa3b9e731cdc2a75495189481a007973f88","unresolved":false,"context_lines":[{"line_number":88,"context_line":".. program:: router add port"},{"line_number":89,"context_line":".. code:: bash"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    os router add port"},{"line_number":92,"context_line":"        \u003cport\u003e"},{"line_number":93,"context_line":"        \u003crouter\u003e"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":".. option:: \u003cport\u003e"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1af94dfe_9a79b396","line":93,"range":{"start_line":91,"start_character":0,"end_line":93,"end_character":16},"updated":"2016-03-16 07:35:16.000000000","message":"according to the developing doc, the first position argument should be \u003crouter\u003e, like this:\n\n    os router add port \u003crouter\u003e \u003cport\u003e\n\nthe other sample is:\n\n    os aggregate add host \u003caggregate\u003e \u003chost\u003e\n\nhttp://docs.openstack.org/developer/python-openstackclient/commands.html#command-object-s-and-action\n\nplease update the related code and following doc.","commit_id":"2850d70f445c7908c73c608da8d95987af2ac746"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"fa2e77eb38248c6c49834a314fba232e782dae6d","unresolved":false,"context_lines":[{"line_number":88,"context_line":".. program:: router add port"},{"line_number":89,"context_line":".. code:: bash"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    os router add port"},{"line_number":92,"context_line":"        \u003cport\u003e"},{"line_number":93,"context_line":"        \u003crouter\u003e"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":".. option:: \u003cport\u003e"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1af94dfe_8ad12a5a","line":93,"range":{"start_line":91,"start_character":0,"end_line":93,"end_character":16},"in_reply_to":"1af94dfe_9a79b396","updated":"2016-03-17 02:07:21.000000000","message":"Done","commit_id":"2850d70f445c7908c73c608da8d95987af2ac746"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"5aa4cfa3b9e731cdc2a75495189481a007973f88","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        \u003cport\u003e"},{"line_number":93,"context_line":"        \u003crouter\u003e"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":".. option:: \u003cport\u003e"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    Port to be added (name or ID)"},{"line_number":98,"context_line":".. _router_add_port:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1af94dfe_7a914799","line":95,"range":{"start_line":95,"start_character":0,"end_line":95,"end_character":12},"updated":"2016-03-16 07:35:16.000000000","message":"position argument should use .. describe::","commit_id":"2850d70f445c7908c73c608da8d95987af2ac746"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"fa2e77eb38248c6c49834a314fba232e782dae6d","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        \u003cport\u003e"},{"line_number":93,"context_line":"        \u003crouter\u003e"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":".. option:: \u003cport\u003e"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    Port to be added (name or ID)"},{"line_number":98,"context_line":".. _router_add_port:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1af94dfe_2ae45639","line":95,"range":{"start_line":95,"start_character":0,"end_line":95,"end_character":12},"in_reply_to":"1af94dfe_7a914799","updated":"2016-03-17 02:07:21.000000000","message":"Done","commit_id":"2850d70f445c7908c73c608da8d95987af2ac746"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"d31c649f151b372832f0637b7cc3cf8f7b601a96","unresolved":false,"context_lines":[{"line_number":89,"context_line":".. code:: bash"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    os router add port"},{"line_number":92,"context_line":"        \u003cport\u003e"},{"line_number":93,"context_line":"        \u003crouter\u003e"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":".. option:: \u003cport\u003e"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"1af94dfe_f010d350","line":93,"range":{"start_line":92,"start_character":0,"end_line":93,"end_character":16},"updated":"2016-03-16 12:03:51.000000000","message":"Please refer to doc/source/commands.rst\n\nThere is an example there:\n\n    \u003cobject-1\u003e \u003caction\u003e \u003cobject-2\u003e\n\nExamples:\n\n.. code-block:: bash\n\n    $ group add user \u003cgroup\u003e \u003cuser\u003e\n\n\nWe\u0027d better define the command as: \"A add B \u003cA\u003e \u003cB\u003e\".\nSo it should be \"router add port \u003crouter\u003e \u003cport\u003e\" here.","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"8221111907ce2501b1c57efd9fd0e1fd9f731c81","unresolved":false,"context_lines":[{"line_number":89,"context_line":".. code:: bash"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    os router add port"},{"line_number":92,"context_line":"        \u003cport\u003e"},{"line_number":93,"context_line":"        \u003crouter\u003e"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":".. option:: \u003cport\u003e"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"1af94dfe_c1ffb9a8","line":93,"range":{"start_line":92,"start_character":0,"end_line":93,"end_character":16},"in_reply_to":"1af94dfe_f010d350","updated":"2016-03-16 16:34:56.000000000","message":"+1","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"caa58ca669a104483ddf424a6f63ce70601dd9a9","unresolved":false,"context_lines":[{"line_number":89,"context_line":".. code:: bash"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    os router add port"},{"line_number":92,"context_line":"        \u003cport\u003e"},{"line_number":93,"context_line":"        \u003crouter\u003e"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":".. option:: \u003cport\u003e"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"1af94dfe_2a1736ee","line":93,"range":{"start_line":92,"start_character":0,"end_line":93,"end_character":16},"in_reply_to":"1af94dfe_f010d350","updated":"2016-03-17 02:25:41.000000000","message":"Done!","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"d31c649f151b372832f0637b7cc3cf8f7b601a96","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        \u003cport\u003e"},{"line_number":93,"context_line":"        \u003crouter\u003e"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":".. option:: \u003cport\u003e"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    Port to be added (name or ID)"},{"line_number":98,"context_line":".. _router_add_port:"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1af94dfe_3dc21434","line":95,"range":{"start_line":95,"start_character":3,"end_line":95,"end_character":9},"updated":"2016-03-16 12:03:51.000000000","message":"I think this is not an option, right ?\nShould use \"describe\" here. It is a position argument.","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"8221111907ce2501b1c57efd9fd0e1fd9f731c81","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        \u003cport\u003e"},{"line_number":93,"context_line":"        \u003crouter\u003e"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":".. option:: \u003cport\u003e"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    Port to be added (name or ID)"},{"line_number":98,"context_line":".. _router_add_port:"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1af94dfe_6127c564","line":95,"range":{"start_line":95,"start_character":3,"end_line":95,"end_character":9},"in_reply_to":"1af94dfe_3dc21434","updated":"2016-03-16 16:34:56.000000000","message":"+1","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"caa58ca669a104483ddf424a6f63ce70601dd9a9","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        \u003cport\u003e"},{"line_number":93,"context_line":"        \u003crouter\u003e"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":".. option:: \u003cport\u003e"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    Port to be added (name or ID)"},{"line_number":98,"context_line":".. _router_add_port:"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1af94dfe_8ad48a20","line":95,"range":{"start_line":95,"start_character":3,"end_line":95,"end_character":9},"in_reply_to":"1af94dfe_3dc21434","updated":"2016-03-17 02:25:41.000000000","message":"Done","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"d31c649f151b372832f0637b7cc3cf8f7b601a96","unresolved":false,"context_lines":[{"line_number":95,"context_line":".. option:: \u003cport\u003e"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    Port to be added (name or ID)"},{"line_number":98,"context_line":".. _router_add_port:"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":".. describe:: \u003crouter\u003e"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"1af94dfe_70796393","line":98,"range":{"start_line":98,"start_character":3,"end_line":98,"end_character":20},"updated":"2016-03-16 12:03:51.000000000","message":"This is also incorrect, I think. And I\u0027m so sorry that I actually don\u0027t know what it is used for. If we don\u0027t need it, just remove it. I can see many doc files don\u0027t have this line.","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"caa58ca669a104483ddf424a6f63ce70601dd9a9","unresolved":false,"context_lines":[{"line_number":95,"context_line":".. option:: \u003cport\u003e"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    Port to be added (name or ID)"},{"line_number":98,"context_line":".. _router_add_port:"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":".. describe:: \u003crouter\u003e"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"1af94dfe_8abbeae4","line":98,"range":{"start_line":98,"start_character":3,"end_line":98,"end_character":20},"in_reply_to":"1af94dfe_70796393","updated":"2016-03-17 02:25:41.000000000","message":"Lets wait for what others say...","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"361282176b0d058d854977e80da1f9e38b55ae06","unresolved":false,"context_lines":[{"line_number":162,"context_line":".. describe:: \u003cport\u003e"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    Port to be added (name or ID)"},{"line_number":165,"context_line":".. _router_add_port:"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":".. describe:: \u003crouter\u003e"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"1af94dfe_262f20a2","line":165,"range":{"start_line":165,"start_character":0,"end_line":165,"end_character":20},"updated":"2016-03-18 12:55:53.000000000","message":"nit: Need a new line here.","commit_id":"32218672b8407bee2c6fac3e8059be12a4477d6a"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"e9a5a8fe08d189f188c6bba9d79c0f6b7a3483d9","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    Router to display (name or ID)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"router add port"},{"line_number":152,"context_line":"---------------"},{"line_number":153,"context_line":"Add a port to a router"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"1af94dfe_3eb9d3cc","line":151,"updated":"2016-03-18 17:06:25.000000000","message":"these need to be sorted","commit_id":"d1583e52c43f648a241a1a649b4ceee43e88cb88"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"c8aa919f2253994b9eeddad3923c55e4e27a634f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        [--project \u003cproject\u003e [--project-domain \u003cproject-domain\u003e]]"},{"line_number":38,"context_line":"        [--enable | --disable]"},{"line_number":39,"context_line":"        [--distributed]"},{"line_number":40,"context_line":"        [--availability-zone-hint \u003cavailability-zone\u003e]"},{"line_number":41,"context_line":"        \u003cname\u003e"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":".. option:: --project \u003cproject\u003e"}],"source_content_type":"text/x-rst","patch_set":19,"id":"1af94dfe_76f6d28f","line":40,"updated":"2016-03-19 02:29:15.000000000","message":"This is not a change related to this patch, but I thought of doing a good deed for my fellow Samaritans :)","commit_id":"a8b1b2254004f566d01a20b2af33d7f3fb8c2680"}],"openstackclient/network/v2/router.py":[{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"f94d7c4b559a61a63d19c9aeb233572a1b421bae","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        parser.add_argument("},{"line_number":91,"context_line":"            \u0027router\u0027,"},{"line_number":92,"context_line":"            metavar\u003d\u0027\u003crouter\u003e\u0027,"},{"line_number":93,"context_line":"            help\u003d\"Router to which port would be added (name or ID)\","},{"line_number":94,"context_line":"        )"},{"line_number":95,"context_line":"        parser.add_argument("},{"line_number":96,"context_line":"            \u0027port\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa0719c6_a4f12bd0","line":93,"range":{"start_line":93,"start_character":39,"end_line":93,"end_character":44},"updated":"2016-03-21 01:58:07.000000000","message":"nit: would -\u003e will\n\nInconsistent to the rst file.","commit_id":"da5581f2876ef46246ee04696a0969e98e04ac94"}],"openstackclient/network/v2/router_interface.py":[{"author":{"_account_id":18658,"name":"Jas Singh","email":"singhj@us.ibm.com","username":"singhj"},"change_message_id":"ca5fdee3e56a1b31736bd002ce4dd81104ea95ab","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        parser \u003d super(AddPortToRouter, self).get_parser(prog_name)"},{"line_number":25,"context_line":"        parser.add_argument("},{"line_number":26,"context_line":"            \u0027port\u0027,"},{"line_number":27,"context_line":"            metavar\u003d\u0027\u003cPORT\u003e\u0027,"},{"line_number":28,"context_line":"            help\u003d\"Port to be added to the router (name or ID).\","},{"line_number":29,"context_line":"        )"},{"line_number":30,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_1ae44e39","line":27,"range":{"start_line":27,"start_character":20,"end_line":27,"end_character":28},"updated":"2016-03-02 17:02:34.000000000","message":"Might want to use lower case to match docs.","commit_id":"a747255083e5594f03f9632b83a0ad2db287cf60"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"83731c95ae6dd56ce2bf036ff6a79b7d6cb23fb2","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        parser \u003d super(AddPortToRouter, self).get_parser(prog_name)"},{"line_number":25,"context_line":"        parser.add_argument("},{"line_number":26,"context_line":"            \u0027port\u0027,"},{"line_number":27,"context_line":"            metavar\u003d\u0027\u003cPORT\u003e\u0027,"},{"line_number":28,"context_line":"            help\u003d\"Port to be added to the router (name or ID).\","},{"line_number":29,"context_line":"        )"},{"line_number":30,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_c9ae82e5","line":27,"range":{"start_line":27,"start_character":20,"end_line":27,"end_character":28},"in_reply_to":"7af24918_1ae44e39","updated":"2016-03-03 06:19:41.000000000","message":"Done","commit_id":"a747255083e5594f03f9632b83a0ad2db287cf60"},{"author":{"_account_id":18658,"name":"Jas Singh","email":"singhj@us.ibm.com","username":"singhj"},"change_message_id":"ca5fdee3e56a1b31736bd002ce4dd81104ea95ab","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        parser.add_argument("},{"line_number":26,"context_line":"            \u0027port\u0027,"},{"line_number":27,"context_line":"            metavar\u003d\u0027\u003cPORT\u003e\u0027,"},{"line_number":28,"context_line":"            help\u003d\"Port to be added to the router (name or ID).\","},{"line_number":29,"context_line":"        )"},{"line_number":30,"context_line":"        parser.add_argument("},{"line_number":31,"context_line":"            \u0027router\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_1a172eee","line":28,"range":{"start_line":28,"start_character":17,"end_line":28,"end_character":63},"updated":"2016-03-02 17:02:34.000000000","message":"Make this consistent with docs. Periods in single-line help text can be omitted.","commit_id":"a747255083e5594f03f9632b83a0ad2db287cf60"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"83731c95ae6dd56ce2bf036ff6a79b7d6cb23fb2","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        parser.add_argument("},{"line_number":26,"context_line":"            \u0027port\u0027,"},{"line_number":27,"context_line":"            metavar\u003d\u0027\u003cPORT\u003e\u0027,"},{"line_number":28,"context_line":"            help\u003d\"Port to be added to the router (name or ID).\","},{"line_number":29,"context_line":"        )"},{"line_number":30,"context_line":"        parser.add_argument("},{"line_number":31,"context_line":"            \u0027router\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_29b8c629","line":28,"range":{"start_line":28,"start_character":17,"end_line":28,"end_character":63},"in_reply_to":"7af24918_1a172eee","updated":"2016-03-03 06:19:41.000000000","message":"Done","commit_id":"a747255083e5594f03f9632b83a0ad2db287cf60"},{"author":{"_account_id":18658,"name":"Jas Singh","email":"singhj@us.ibm.com","username":"singhj"},"change_message_id":"ca5fdee3e56a1b31736bd002ce4dd81104ea95ab","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            help\u003d\"Router to which interface would be added (name or ID).\","},{"line_number":34,"context_line":"        )"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        identity_common.add_project_domain_option_to_parser(parser)"},{"line_number":37,"context_line":"        return parser"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_15741f66","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":67},"updated":"2016-03-02 17:02:34.000000000","message":"As far as I know, project domain is only applicable when used in conjunction with \u0027project\u0027. It is also not used anywhere below so maybe can be omitted all together?.","commit_id":"a747255083e5594f03f9632b83a0ad2db287cf60"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"83731c95ae6dd56ce2bf036ff6a79b7d6cb23fb2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            help\u003d\"Router to which interface would be added (name or ID).\","},{"line_number":34,"context_line":"        )"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        identity_common.add_project_domain_option_to_parser(parser)"},{"line_number":37,"context_line":"        return parser"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_69848e5d","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":67},"in_reply_to":"7af24918_15741f66","updated":"2016-03-03 06:19:41.000000000","message":"Done","commit_id":"a747255083e5594f03f9632b83a0ad2db287cf60"},{"author":{"_account_id":18658,"name":"Jas Singh","email":"singhj@us.ibm.com","username":"singhj"},"change_message_id":"ca5fdee3e56a1b31736bd002ce4dd81104ea95ab","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":41,"context_line":"        obj \u003d client.find_router(parsed_args.router, ignore_missing\u003dFalse)"},{"line_number":42,"context_line":"        body \u003d {}"},{"line_number":43,"context_line":"        if parsed_args.port and client.find_port(parsed_args.port,"},{"line_number":44,"context_line":"                                                 ignore_missing\u003dFalse):"},{"line_number":45,"context_line":"            body[\u0027port_id\u0027] \u003d str(parsed_args.port)"},{"line_number":46,"context_line":"            client.add_interface_router(obj, **body)"},{"line_number":47,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_909cbdc1","line":45,"range":{"start_line":43,"start_character":32,"end_line":45,"end_character":51},"updated":"2016-03-02 17:02:34.000000000","message":"This assumes that user passed in a \"port_id\" and not just a port name. client.find_port will work fine with port name but body[\u0027port_id\u0027] will expect an actual port_id and should fail when adding interface.","commit_id":"a747255083e5594f03f9632b83a0ad2db287cf60"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"83731c95ae6dd56ce2bf036ff6a79b7d6cb23fb2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":41,"context_line":"        obj \u003d client.find_router(parsed_args.router, ignore_missing\u003dFalse)"},{"line_number":42,"context_line":"        body \u003d {}"},{"line_number":43,"context_line":"        if parsed_args.port and client.find_port(parsed_args.port,"},{"line_number":44,"context_line":"                                                 ignore_missing\u003dFalse):"},{"line_number":45,"context_line":"            body[\u0027port_id\u0027] \u003d str(parsed_args.port)"},{"line_number":46,"context_line":"            client.add_interface_router(obj, **body)"},{"line_number":47,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_89b3dae8","line":45,"range":{"start_line":43,"start_character":32,"end_line":45,"end_character":51},"in_reply_to":"7af24918_909cbdc1","updated":"2016-03-03 06:19:41.000000000","message":"Done","commit_id":"a747255083e5594f03f9632b83a0ad2db287cf60"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"e71f3901f424163c22aee39c167da4a25cebb88b","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def take_action(self, parsed_args):"},{"line_number":37,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":38,"context_line":"        obj \u003d client.find_router(parsed_args.router, ignore_missing\u003dFalse)"},{"line_number":39,"context_line":"        if parsed_args.port:"},{"line_number":40,"context_line":"            port \u003d client.find_port(parsed_args.port, ignore_missing\u003dFalse)"},{"line_number":41,"context_line":"            body \u003d {\u0027port_id\u0027: str(port.id)}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_753fc325","line":38,"range":{"start_line":38,"start_character":33,"end_line":38,"end_character":51},"updated":"2016-03-07 11:58:22.000000000","message":"Why not check if parsed_args.router is None ?","commit_id":"dc30ba530e71dc20239815235b61be34efb8297e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"d18f8b534ba5f76beceb7e5ea90161928d4f32d3","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def take_action(self, parsed_args):"},{"line_number":37,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":38,"context_line":"        obj \u003d client.find_router(parsed_args.router, ignore_missing\u003dFalse)"},{"line_number":39,"context_line":"        if parsed_args.port:"},{"line_number":40,"context_line":"            port \u003d client.find_port(parsed_args.port, ignore_missing\u003dFalse)"},{"line_number":41,"context_line":"            body \u003d {\u0027port_id\u0027: str(port.id)}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_c32b582f","line":38,"range":{"start_line":38,"start_character":33,"end_line":38,"end_character":51},"in_reply_to":"5aef4532_753fc325","updated":"2016-03-08 00:39:30.000000000","message":"If it is none, then wont find_router raise an exception ?\nAnd if so, shouldnt that raise the appropriate exception?\nI mean instead of checking for a None value in different files, if the find_XYZ handles it in a central location, then it would be better, isnt it?\nThis is just an observation from my end","commit_id":"dc30ba530e71dc20239815235b61be34efb8297e"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"e71f3901f424163c22aee39c167da4a25cebb88b","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        if parsed_args.port:"},{"line_number":40,"context_line":"            port \u003d client.find_port(parsed_args.port, ignore_missing\u003dFalse)"},{"line_number":41,"context_line":"            body \u003d {\u0027port_id\u0027: str(port.id)}"},{"line_number":42,"context_line":"            client.router_add_interface(obj, body)"},{"line_number":43,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_9017fdec","line":42,"range":{"start_line":42,"start_character":19,"end_line":42,"end_character":39},"updated":"2016-03-07 11:58:22.000000000","message":"Is this method the one in network _proxy in sdk? I think the prototype is: \n    def router_add_interface(self, router, subnet_id):\n\nThe second parameter is a subnet_id.","commit_id":"dc30ba530e71dc20239815235b61be34efb8297e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"d18f8b534ba5f76beceb7e5ea90161928d4f32d3","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        if parsed_args.port:"},{"line_number":40,"context_line":"            port \u003d client.find_port(parsed_args.port, ignore_missing\u003dFalse)"},{"line_number":41,"context_line":"            body \u003d {\u0027port_id\u0027: str(port.id)}"},{"line_number":42,"context_line":"            client.router_add_interface(obj, body)"},{"line_number":43,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_031ee00b","line":42,"range":{"start_line":42,"start_character":19,"end_line":42,"end_character":39},"in_reply_to":"5aef4532_9017fdec","updated":"2016-03-08 00:39:30.000000000","message":"Actually , you can see the Depends-On patch.\nI am modifying both the SDK and the OSC","commit_id":"dc30ba530e71dc20239815235b61be34efb8297e"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"5aa4cfa3b9e731cdc2a75495189481a007973f88","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def take_action(self, parsed_args):"},{"line_number":37,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":38,"context_line":"        obj \u003d client.find_router(parsed_args.router, ignore_missing\u003dFalse)"},{"line_number":39,"context_line":"        if parsed_args.port:"},{"line_number":40,"context_line":"            port \u003d client.find_port(parsed_args.port, ignore_missing\u003dFalse)"},{"line_number":41,"context_line":"            client.router_add_interface(obj, port_id\u003dport.id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af94dfe_9ac1b3e7","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":11},"updated":"2016-03-16 07:35:16.000000000","message":"nit: I think \"router\" is more clear name than \"obj\", just a suggestion.","commit_id":"2850d70f445c7908c73c608da8d95987af2ac746"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"fa2e77eb38248c6c49834a314fba232e782dae6d","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def take_action(self, parsed_args):"},{"line_number":37,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":38,"context_line":"        obj \u003d client.find_router(parsed_args.router, ignore_missing\u003dFalse)"},{"line_number":39,"context_line":"        if parsed_args.port:"},{"line_number":40,"context_line":"            port \u003d client.find_port(parsed_args.port, ignore_missing\u003dFalse)"},{"line_number":41,"context_line":"            client.router_add_interface(obj, port_id\u003dport.id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af94dfe_cacb32a4","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":11},"in_reply_to":"1af94dfe_9ac1b3e7","updated":"2016-03-17 02:07:21.000000000","message":"Both are ok...\n\nI did a compression here...\nYou would see in the next patch","commit_id":"2850d70f445c7908c73c608da8d95987af2ac746"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"5aa4cfa3b9e731cdc2a75495189481a007973f88","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def take_action(self, parsed_args):"},{"line_number":37,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":38,"context_line":"        obj \u003d client.find_router(parsed_args.router, ignore_missing\u003dFalse)"},{"line_number":39,"context_line":"        if parsed_args.port:"},{"line_number":40,"context_line":"            port \u003d client.find_port(parsed_args.port, ignore_missing\u003dFalse)"},{"line_number":41,"context_line":"            client.router_add_interface(obj, port_id\u003dport.id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af94dfe_5a4c4bc7","line":39,"range":{"start_line":39,"start_character":11,"end_line":39,"end_character":27},"updated":"2016-03-16 07:35:16.000000000","message":"port isn\u0027t optional argument, so \u0027if\u0027 isn\u0027t necessary, right?","commit_id":"2850d70f445c7908c73c608da8d95987af2ac746"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"fa2e77eb38248c6c49834a314fba232e782dae6d","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def take_action(self, parsed_args):"},{"line_number":37,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":38,"context_line":"        obj \u003d client.find_router(parsed_args.router, ignore_missing\u003dFalse)"},{"line_number":39,"context_line":"        if parsed_args.port:"},{"line_number":40,"context_line":"            port \u003d client.find_port(parsed_args.port, ignore_missing\u003dFalse)"},{"line_number":41,"context_line":"            client.router_add_interface(obj, port_id\u003dport.id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af94dfe_6ad49e46","line":39,"range":{"start_line":39,"start_character":11,"end_line":39,"end_character":27},"in_reply_to":"1af94dfe_5a4c4bc7","updated":"2016-03-17 02:07:21.000000000","message":"agreed!","commit_id":"2850d70f445c7908c73c608da8d95987af2ac746"},{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"55bdae98fbc523c85299a506fa6ded2631ce7182","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        parser.add_argument("},{"line_number":30,"context_line":"            \u0027router\u0027,"},{"line_number":31,"context_line":"            metavar\u003d\u0027\u003crouter\u003e\u0027,"},{"line_number":32,"context_line":"            help\u003d\" Router to which port would be added (name or ID)\","},{"line_number":33,"context_line":"        )"},{"line_number":34,"context_line":"        return parser"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_bc4578b4","line":32,"updated":"2016-03-16 14:40:46.000000000","message":"nit: leading space in help string","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"55bdae98fbc523c85299a506fa6ded2631ce7182","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def take_action(self, parsed_args):"},{"line_number":37,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":38,"context_line":"        obj \u003d client.find_router(parsed_args.router, ignore_missing\u003dFalse)"},{"line_number":39,"context_line":"        if parsed_args.port:"},{"line_number":40,"context_line":"            port \u003d client.find_port(parsed_args.port, ignore_missing\u003dFalse)"},{"line_number":41,"context_line":"            client.router_add_interface(obj, port_id\u003dport.id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_3f395a42","line":39,"updated":"2016-03-16 14:40:46.000000000","message":"I agree with Rui Chen\u0027s previous comment, port isn\u0027t optional so this if check isn\u0027t needed.","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"caa58ca669a104483ddf424a6f63ce70601dd9a9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def take_action(self, parsed_args):"},{"line_number":37,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":38,"context_line":"        obj \u003d client.find_router(parsed_args.router, ignore_missing\u003dFalse)"},{"line_number":39,"context_line":"        if parsed_args.port:"},{"line_number":40,"context_line":"            port \u003d client.find_port(parsed_args.port, ignore_missing\u003dFalse)"},{"line_number":41,"context_line":"            client.router_add_interface(obj, port_id\u003dport.id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_6aa5beb3","line":39,"in_reply_to":"1af94dfe_3f395a42","updated":"2016-03-17 02:25:41.000000000","message":"Done","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"361282176b0d058d854977e80da1f9e38b55ae06","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def take_action(self, parsed_args):"},{"line_number":37,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":38,"context_line":"        port \u003d client.find_port(parsed_args.port, ignore_missing\u003dFalse)"},{"line_number":39,"context_line":"        client.router_add_interface(client.find_router("},{"line_number":40,"context_line":"            parsed_args.router, ignore_missing\u003dFalse), port_id\u003dport.id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_49535d17","line":40,"range":{"start_line":39,"start_character":36,"end_line":40,"end_character":53},"updated":"2016-03-18 12:55:53.000000000","message":"nit: But I still like to write it like this:\n\nrouter \u003d client.find_router(parsed_args.router, ignore_missing\u003dFalse)\nclient.router_add_interface(router, port)","commit_id":"32218672b8407bee2c6fac3e8059be12a4477d6a"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"8a8aa8ef3a64f5d74616b8e19be006744c9d1a2e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def take_action(self, parsed_args):"},{"line_number":37,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":38,"context_line":"        port \u003d client.find_port(parsed_args.port, ignore_missing\u003dFalse)"},{"line_number":39,"context_line":"        client.router_add_interface(client.find_router("},{"line_number":40,"context_line":"            parsed_args.router, ignore_missing\u003dFalse), port_id\u003dport.id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_c06f37fa","line":40,"range":{"start_line":39,"start_character":36,"end_line":40,"end_character":53},"in_reply_to":"1af94dfe_49535d17","updated":"2016-03-19 01:59:22.000000000","message":"I dont think it is too complicated... we can use it, IMHO","commit_id":"32218672b8407bee2c6fac3e8059be12a4477d6a"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"e9a5a8fe08d189f188c6bba9d79c0f6b7a3483d9","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from openstackclient.common import command"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class AddPortToRouter(command.Command):"},{"line_number":20,"context_line":"    \"\"\"Add a port to a router\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1af94dfe_5ee93fb6","line":19,"updated":"2016-03-18 17:06:25.000000000","message":"This should be in router.py directly","commit_id":"d1583e52c43f648a241a1a649b4ceee43e88cb88"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"67f595508b5f587e6e1231545810eae07ede2993","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from openstackclient.common import command"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class AddPortToRouter(command.Command):"},{"line_number":20,"context_line":"    \"\"\"Add a port to a router\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1af94dfe_96239e55","line":19,"in_reply_to":"1af94dfe_5ee93fb6","updated":"2016-03-19 01:59:28.000000000","message":"Did not want router.py to grow too much in size.......","commit_id":"d1583e52c43f648a241a1a649b4ceee43e88cb88"}],"openstackclient/tests/network/v2/fakes.py":[{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"5aa4cfa3b9e731cdc2a75495189481a007973f88","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        return mock.MagicMock(side_effect\u003drouters)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    @staticmethod"},{"line_number":418,"context_line":"    def add_port(attrs\u003d{}, methods\u003d{}):"},{"line_number":419,"context_line":"        \"\"\"Add a fake port to a fake router."},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        :param Dictionary attrs:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af94dfe_25fa04be","line":418,"updated":"2016-03-16 07:35:16.000000000","message":"Default argument value is mutable.\n\nIn my mind, we change the usage in recent patch.\n\nhttps://review.openstack.org/#/c/286275/7/openstackclient/tests/network/v2/fakes.py","commit_id":"2850d70f445c7908c73c608da8d95987af2ac746"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"fa2e77eb38248c6c49834a314fba232e782dae6d","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        return mock.MagicMock(side_effect\u003drouters)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    @staticmethod"},{"line_number":418,"context_line":"    def add_port(attrs\u003d{}, methods\u003d{}):"},{"line_number":419,"context_line":"        \"\"\"Add a fake port to a fake router."},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        :param Dictionary attrs:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af94dfe_4a6e0296","line":418,"in_reply_to":"1af94dfe_25fa04be","updated":"2016-03-17 02:07:21.000000000","message":"Oh ok ... agreed","commit_id":"2850d70f445c7908c73c608da8d95987af2ac746"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"d31c649f151b372832f0637b7cc3cf8f7b601a96","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        return mock.MagicMock(side_effect\u003drouters)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    @staticmethod"},{"line_number":418,"context_line":"    def add_port(attrs\u003d{}, methods\u003d{}):"},{"line_number":419,"context_line":"        \"\"\"Add a fake port to a fake router."},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        :param Dictionary attrs:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_f3373de1","line":418,"range":{"start_line":418,"start_character":17,"end_line":418,"end_character":38},"updated":"2016-03-16 12:03:51.000000000","message":"Please specify attrs\u003dNone, methods\u003dNone here.\n\nAnd do something like this below:\n\nif attrs is None:\n    attrs \u003d {}\nif methods is None:\n    methods \u003d {}\n\n\nAnd BTW, methods is firstly added in FakeServer, which are used to test server.xxx(), e.g. server.start().\n\nSo, if you don\u0027t have any need similar to that, you don\u0027t need to add methods. Here, I think we don\u0027t need methods. Just define keys() in the class would be enough.","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"ce181257378cc4461bd1ca475cbd101a2029ca3e","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        return mock.MagicMock(side_effect\u003drouters)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    @staticmethod"},{"line_number":418,"context_line":"    def add_port(attrs\u003d{}, methods\u003d{}):"},{"line_number":419,"context_line":"        \"\"\"Add a fake port to a fake router."},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        :param Dictionary attrs:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_450555ba","line":418,"range":{"start_line":418,"start_character":17,"end_line":418,"end_character":38},"in_reply_to":"1af94dfe_2aef36b1","updated":"2016-03-17 03:12:18.000000000","message":"But, why not call create_one_router() to create a router, and then use the router directly ?","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"caa58ca669a104483ddf424a6f63ce70601dd9a9","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        return mock.MagicMock(side_effect\u003drouters)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    @staticmethod"},{"line_number":418,"context_line":"    def add_port(attrs\u003d{}, methods\u003d{}):"},{"line_number":419,"context_line":"        \"\"\"Add a fake port to a fake router."},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        :param Dictionary attrs:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_2aef36b1","line":418,"range":{"start_line":418,"start_character":17,"end_line":418,"end_character":38},"in_reply_to":"1af94dfe_5451a0d7","updated":"2016-03-17 02:25:41.000000000","message":"create_one_router ( in terms of attributes) is completely different from add_port\n\nWhile create_one_router believes that user wants to create a new router, add_port assumes that the router is already created, and therefore it made sense to me to keep it different from create_one_router","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"8221111907ce2501b1c57efd9fd0e1fd9f731c81","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        return mock.MagicMock(side_effect\u003drouters)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    @staticmethod"},{"line_number":418,"context_line":"    def add_port(attrs\u003d{}, methods\u003d{}):"},{"line_number":419,"context_line":"        \"\"\"Add a fake port to a fake router."},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        :param Dictionary attrs:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_5451a0d7","line":418,"range":{"start_line":418,"start_character":17,"end_line":418,"end_character":38},"in_reply_to":"1af94dfe_f3373de1","updated":"2016-03-16 16:34:56.000000000","message":"More generally, I don\u0027t think this add_port method is needed.  From what I can see, all it does is creating a FakeRouter of sorts, but one with only a few of the attributes.  I think this method can be removed, and the test modified not to call it (and if needed just call create_one_router with the specific attrs).","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"d31c649f151b372832f0637b7cc3cf8f7b601a96","unresolved":false,"context_lines":[{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    @staticmethod"},{"line_number":418,"context_line":"    def add_port(attrs\u003d{}, methods\u003d{}):"},{"line_number":419,"context_line":"        \"\"\"Add a fake port to a fake router."},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        :param Dictionary attrs:"},{"line_number":422,"context_line":"            A dictionary with all attributes"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_566eda96","line":419,"range":{"start_line":419,"start_character":11,"end_line":419,"end_character":44},"updated":"2016-03-16 12:03:51.000000000","message":"Reading the code below, I think you don\u0027t mean \"Add a fake port to a fake router\". The return value is not a router, but a new FakeResource obj with id and port.","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"caa58ca669a104483ddf424a6f63ce70601dd9a9","unresolved":false,"context_lines":[{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    @staticmethod"},{"line_number":418,"context_line":"    def add_port(attrs\u003d{}, methods\u003d{}):"},{"line_number":419,"context_line":"        \"\"\"Add a fake port to a fake router."},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        :param Dictionary attrs:"},{"line_number":422,"context_line":"            A dictionary with all attributes"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_ea226e00","line":419,"range":{"start_line":419,"start_character":11,"end_line":419,"end_character":44},"in_reply_to":"1af94dfe_566eda96","updated":"2016-03-17 02:25:41.000000000","message":"But the FakeResource obj is a router itself...\n\nThis comment is similar to the comments written in create_one_router, createo_one_port etc.","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"ce181257378cc4461bd1ca475cbd101a2029ca3e","unresolved":false,"context_lines":[{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    @staticmethod"},{"line_number":418,"context_line":"    def add_port(attrs\u003d{}, methods\u003d{}):"},{"line_number":419,"context_line":"        \"\"\"Add a fake port to a fake router."},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        :param Dictionary attrs:"},{"line_number":422,"context_line":"            A dictionary with all attributes"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_8590fd44","line":419,"range":{"start_line":419,"start_character":11,"end_line":419,"end_character":44},"in_reply_to":"1af94dfe_ea226e00","updated":"2016-03-17 03:12:18.000000000","message":"Maybe I\u0027m wrong, but I still think since you called FakeResource(), you created a new FakeResource obj. The router-id and port-id are both newly created. So this is a mew obj, not an existing router.\n\nIf you want to use router-id and port-id, why not just create a fake router and a fake port and use the ids ?","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"d31c649f151b372832f0637b7cc3cf8f7b601a96","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        # Overwrite default methods."},{"line_number":442,"context_line":"        router_methods.update(methods)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        router \u003d fakes.FakeResource(info\u003dcopy.deepcopy(router_attrs),"},{"line_number":445,"context_line":"                                    methods\u003dcopy.deepcopy(router_methods),"},{"line_number":446,"context_line":"                                    loaded\u003dTrue)"},{"line_number":447,"context_line":"        return router"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_d9085bdc","line":444,"range":{"start_line":444,"start_character":8,"end_line":444,"end_character":14},"updated":"2016-03-16 12:03:51.000000000","message":"So, don\u0027t name this to router, and router_attrs, router_methods.","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"ce181257378cc4461bd1ca475cbd101a2029ca3e","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        # Overwrite default methods."},{"line_number":442,"context_line":"        router_methods.update(methods)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        router \u003d fakes.FakeResource(info\u003dcopy.deepcopy(router_attrs),"},{"line_number":445,"context_line":"                                    methods\u003dcopy.deepcopy(router_methods),"},{"line_number":446,"context_line":"                                    loaded\u003dTrue)"},{"line_number":447,"context_line":"        return router"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_65c051e1","line":444,"range":{"start_line":444,"start_character":8,"end_line":444,"end_character":14},"in_reply_to":"1af94dfe_0a419aa9","updated":"2016-03-17 03:12:18.000000000","message":"I mean I don\u0027t quite understand what an interface is. See from the SDK code, it is a subnet or a port. But whatever it is, it is not a router. When you call add_port() in the test, you use \"_interface\" to store the return value. But here, you name the variables to router and router_xxx, which confused me.\n\nBut I also agree with Brad, I don\u0027t think we need this add_port() method. In the beginning, I thought it was used to fake the router_add_interface() API.","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"caa58ca669a104483ddf424a6f63ce70601dd9a9","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        # Overwrite default methods."},{"line_number":442,"context_line":"        router_methods.update(methods)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        router \u003d fakes.FakeResource(info\u003dcopy.deepcopy(router_attrs),"},{"line_number":445,"context_line":"                                    methods\u003dcopy.deepcopy(router_methods),"},{"line_number":446,"context_line":"                                    loaded\u003dTrue)"},{"line_number":447,"context_line":"        return router"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_0a419aa9","line":444,"range":{"start_line":444,"start_character":8,"end_line":444,"end_character":14},"in_reply_to":"1af94dfe_d9085bdc","updated":"2016-03-17 02:25:41.000000000","message":"I think the naming here is suitable enough related to the tests.\nCan you explain your comment a bit more?","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"}],"openstackclient/tests/network/v2/test_router_interface.py":[{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"5aa4cfa3b9e731cdc2a75495189481a007973f88","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    _interface \u003d net_fakes.FakeRouter.add_port("},{"line_number":36,"context_line":"        attrs\u003d{\u0027id\u0027: _router.id, \u0027port\u0027: _port.id})"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    columns \u003d ("},{"line_number":39,"context_line":"        \u0027port\u0027,"},{"line_number":40,"context_line":"        \u0027id\u0027,"},{"line_number":41,"context_line":"    )"},{"line_number":42,"context_line":"    data \u003d ("},{"line_number":43,"context_line":"        _interface.port,"},{"line_number":44,"context_line":"        _interface.id,"},{"line_number":45,"context_line":"    )"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def setUp(self):"},{"line_number":48,"context_line":"        super(TestAddPortToRouter, self).setUp()"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af94dfe_e0576a00","line":45,"range":{"start_line":38,"start_character":0,"end_line":45,"end_character":5},"updated":"2016-03-16 07:35:16.000000000","message":"where do we apply these const?","commit_id":"2850d70f445c7908c73c608da8d95987af2ac746"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"fa2e77eb38248c6c49834a314fba232e782dae6d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    _interface \u003d net_fakes.FakeRouter.add_port("},{"line_number":36,"context_line":"        attrs\u003d{\u0027id\u0027: _router.id, \u0027port\u0027: _port.id})"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    columns \u003d ("},{"line_number":39,"context_line":"        \u0027port\u0027,"},{"line_number":40,"context_line":"        \u0027id\u0027,"},{"line_number":41,"context_line":"    )"},{"line_number":42,"context_line":"    data \u003d ("},{"line_number":43,"context_line":"        _interface.port,"},{"line_number":44,"context_line":"        _interface.id,"},{"line_number":45,"context_line":"    )"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def setUp(self):"},{"line_number":48,"context_line":"        super(TestAddPortToRouter, self).setUp()"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af94dfe_6a301e9f","line":45,"range":{"start_line":38,"start_character":0,"end_line":45,"end_character":5},"in_reply_to":"1af94dfe_e0576a00","updated":"2016-03-17 02:07:21.000000000","message":"Left from previous patche sets","commit_id":"2850d70f445c7908c73c608da8d95987af2ac746"},{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"55bdae98fbc523c85299a506fa6ded2631ce7182","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    _router \u003d net_fakes.FakeRouter.create_one_router()"},{"line_number":34,"context_line":"    _port \u003d net_fakes.FakePort.create_one_port()"},{"line_number":35,"context_line":"    _interface \u003d net_fakes.FakeRouter.add_port("},{"line_number":36,"context_line":"        attrs\u003d{\u0027id\u0027: _router.id, \u0027port\u0027: _port.id})"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    columns \u003d ("}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_b0de396b","line":35,"updated":"2016-03-16 14:40:46.000000000","message":"This _interface and the method \"add.port()\" were confusing to me at first.  I think I figured it out, but I thing renaming _interface to _router_with_port_added, and add_port() to create_router_with_port() or something like that would make it easier to understand.","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"caa58ca669a104483ddf424a6f63ce70601dd9a9","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    _router \u003d net_fakes.FakeRouter.create_one_router()"},{"line_number":34,"context_line":"    _port \u003d net_fakes.FakePort.create_one_port()"},{"line_number":35,"context_line":"    _interface \u003d net_fakes.FakeRouter.add_port("},{"line_number":36,"context_line":"        attrs\u003d{\u0027id\u0027: _router.id, \u0027port\u0027: _port.id})"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    columns \u003d ("}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_aaa3464e","line":35,"in_reply_to":"1af94dfe_74c93c78","updated":"2016-03-17 02:25:41.000000000","message":"Actually the interface acts as a wrapper for the ID and Port information which is accessed later on.","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"8221111907ce2501b1c57efd9fd0e1fd9f731c81","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    _router \u003d net_fakes.FakeRouter.create_one_router()"},{"line_number":34,"context_line":"    _port \u003d net_fakes.FakePort.create_one_port()"},{"line_number":35,"context_line":"    _interface \u003d net_fakes.FakeRouter.add_port("},{"line_number":36,"context_line":"        attrs\u003d{\u0027id\u0027: _router.id, \u0027port\u0027: _port.id})"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    columns \u003d ("}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_74c93c78","line":35,"in_reply_to":"1af94dfe_b0de396b","updated":"2016-03-16 16:34:56.000000000","message":"On second thought, I don\u0027t think this _interface object or the .add_port() method is needed at all.  See comment below in setUp(self).","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"55bdae98fbc523c85299a506fa6ded2631ce7182","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    data \u003d ("},{"line_number":43,"context_line":"        _interface.port,"},{"line_number":44,"context_line":"        _interface.id,"},{"line_number":45,"context_line":"    )"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def setUp(self):"},{"line_number":48,"context_line":"        super(TestAddPortToRouter, self).setUp()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_b078f9c5","line":45,"updated":"2016-03-16 14:40:46.000000000","message":"I agree with Rui Chen, I don\u0027t think we need the columns and data, since the sdk call to router_add_interface just returns None","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"caa58ca669a104483ddf424a6f63ce70601dd9a9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    data \u003d ("},{"line_number":43,"context_line":"        _interface.port,"},{"line_number":44,"context_line":"        _interface.id,"},{"line_number":45,"context_line":"    )"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def setUp(self):"},{"line_number":48,"context_line":"        super(TestAddPortToRouter, self).setUp()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_aa87c6d5","line":45,"in_reply_to":"1af94dfe_b078f9c5","updated":"2016-03-17 02:25:41.000000000","message":"Done","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"8221111907ce2501b1c57efd9fd0e1fd9f731c81","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def setUp(self):"},{"line_number":48,"context_line":"        super(TestAddPortToRouter, self).setUp()"},{"line_number":49,"context_line":"        self.network.router_add_interface \u003d mock.Mock("},{"line_number":50,"context_line":"            return_value\u003dself._interface)"},{"line_number":51,"context_line":"        self.cmd \u003d router.AddPortToRouter(self.app, self.namespace)"},{"line_number":52,"context_line":"        self.network.find_router \u003d mock.Mock(return_value\u003dself._router)"},{"line_number":53,"context_line":"        self.network.find_port \u003d mock.Mock(return_value\u003dself._port)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_14e39806","line":50,"updated":"2016-03-16 16:34:56.000000000","message":"I suggest not creating _interfaces, and just returning _router from this mock, since the take_action method doesn\u0027t look at the return value from this call anyway.","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"ce181257378cc4461bd1ca475cbd101a2029ca3e","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def setUp(self):"},{"line_number":48,"context_line":"        super(TestAddPortToRouter, self).setUp()"},{"line_number":49,"context_line":"        self.network.router_add_interface \u003d mock.Mock("},{"line_number":50,"context_line":"            return_value\u003dself._interface)"},{"line_number":51,"context_line":"        self.cmd \u003d router.AddPortToRouter(self.app, self.namespace)"},{"line_number":52,"context_line":"        self.network.find_router \u003d mock.Mock(return_value\u003dself._router)"},{"line_number":53,"context_line":"        self.network.find_port \u003d mock.Mock(return_value\u003dself._port)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_4579d5f5","line":50,"in_reply_to":"1af94dfe_14e39806","updated":"2016-03-17 03:12:18.000000000","message":"I see that router_add_interface() in SDK returns a set of json data. So, set the return value to _interface is not good, I think. \n\nWe should fake json data to simulate the SDK APIs.","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"ed08ac43007c9bd2af357dee340048f515038226","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def setUp(self):"},{"line_number":48,"context_line":"        super(TestAddPortToRouter, self).setUp()"},{"line_number":49,"context_line":"        self.network.router_add_interface \u003d mock.Mock("},{"line_number":50,"context_line":"            return_value\u003dself._interface)"},{"line_number":51,"context_line":"        self.cmd \u003d router.AddPortToRouter(self.app, self.namespace)"},{"line_number":52,"context_line":"        self.network.find_router \u003d mock.Mock(return_value\u003dself._router)"},{"line_number":53,"context_line":"        self.network.find_port \u003d mock.Mock(return_value\u003dself._port)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_0c0095a9","line":50,"in_reply_to":"1af94dfe_4579d5f5","updated":"2016-03-17 04:59:06.000000000","message":"Okay, you are right in that sense","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"55bdae98fbc523c85299a506fa6ded2631ce7182","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        ]"},{"line_number":72,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        result \u003d self.cmd.take_action(parsed_args)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.assertIsNone(result)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_30dea911","line":74,"updated":"2016-03-16 14:40:46.000000000","message":"Should probably add the following (filling in the parameters expected) to make sure the OSC code makes the call to the SDK with the right parameters.\n\nself.network.router_add_interface.assert_called_with(**{\n        ...\n        })","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"ce181257378cc4461bd1ca475cbd101a2029ca3e","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        ]"},{"line_number":72,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        result \u003d self.cmd.take_action(parsed_args)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.assertIsNone(result)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_e56e2195","line":74,"in_reply_to":"1af94dfe_30dea911","updated":"2016-03-17 03:12:18.000000000","message":"+1","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"ed08ac43007c9bd2af357dee340048f515038226","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        ]"},{"line_number":72,"context_line":"        parsed_args \u003d self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        result \u003d self.cmd.take_action(parsed_args)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.assertIsNone(result)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_ecfa89bc","line":74,"in_reply_to":"1af94dfe_30dea911","updated":"2016-03-17 04:59:06.000000000","message":"Done","commit_id":"85232b3c50bf640184c3bb81b51eb363c869711e"}],"setup.cfg":[{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"e71f3901f424163c22aee39c167da4a25cebb88b","unresolved":false,"context_lines":[{"line_number":339,"context_line":"    router_list \u003d openstackclient.network.v2.router:ListRouter"},{"line_number":340,"context_line":"    router_set \u003d openstackclient.network.v2.router:SetRouter"},{"line_number":341,"context_line":"    router_show \u003d openstackclient.network.v2.router:ShowRouter"},{"line_number":342,"context_line":"    router_port_add \u003d openstackclient.network.v2.router_interface:AddPortToRouter"},{"line_number":343,"context_line":"    security_group_delete \u003d openstackclient.network.v2.security_group:DeleteSecurityGroup"},{"line_number":344,"context_line":"    security_group_list \u003d openstackclient.network.v2.security_group:ListSecurityGroup"},{"line_number":345,"context_line":"    security_group_set \u003d openstackclient.network.v2.security_group:SetSecurityGroup"}],"source_content_type":"text/x-ttcn-cfg","patch_set":4,"id":"5aef4532_b5adcb8a","line":342,"range":{"start_line":342,"start_character":4,"end_line":342,"end_character":19},"updated":"2016-03-07 11:58:22.000000000","message":"Is the command \"router add port\" or \"router port add\" ? Here, it is router_port_add, but in the doc file, it is \"router add port\".","commit_id":"dc30ba530e71dc20239815235b61be34efb8297e"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"e9a5a8fe08d189f188c6bba9d79c0f6b7a3483d9","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    router_list \u003d openstackclient.network.v2.router:ListRouter"},{"line_number":344,"context_line":"    router_set \u003d openstackclient.network.v2.router:SetRouter"},{"line_number":345,"context_line":"    router_show \u003d openstackclient.network.v2.router:ShowRouter"},{"line_number":346,"context_line":"    router_add_port \u003d openstackclient.network.v2.router_interface:AddPortToRouter"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    security_group_delete \u003d openstackclient.network.v2.security_group:DeleteSecurityGroup"},{"line_number":349,"context_line":"    security_group_list \u003d openstackclient.network.v2.security_group:ListSecurityGroup"}],"source_content_type":"text/x-ttcn-cfg","patch_set":16,"id":"1af94dfe_5e5c9f7c","line":346,"updated":"2016-03-18 17:06:25.000000000","message":"sort","commit_id":"d1583e52c43f648a241a1a649b4ceee43e88cb88"}]}
