)]}'
{".gitignore":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c7a977786078f837273d6c0e2ebff20c9de56f79","unresolved":false,"context_lines":[{"line_number":19,"context_line":"# Development environment files"},{"line_number":20,"context_line":".project"},{"line_number":21,"context_line":".pydevproject"},{"line_number":22,"context_line":".idea"},{"line_number":23,"context_line":"cover"},{"line_number":24,"context_line":"# Files created by releasenotes build"},{"line_number":25,"context_line":"releasenotes/build"}],"source_content_type":"application/octet-stream","patch_set":22,"id":"9a68dd71_85a15e48","line":22,"updated":"2016-01-25 01:02:31.000000000","message":"unrelated","commit_id":"f8beb59e88391d1d0adda33a1e22fee7b3ef8c6f"}],"/COMMIT_MSG":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"ee546c090221359f06df09de759081aaa5bdabb1","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Subnet list command"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I3c0748074a6511ff92500516b3129886d2476eed"},{"line_number":12,"context_line":"Implements: blueprint neutron-client"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"9a68dd71_a305d17a","line":12,"updated":"2016-01-22 03:08:31.000000000","message":"This also addresses bug/1523258.","commit_id":"4edefc9d1d81503d0f6939195213cb5fbb8a2632"}],"doc/source/command-objects/subnet.rst":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"72c8785f7b1a2a477a65519a7237820bf66747ce","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"subnet"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Network v2"}],"source_content_type":"text/x-rst","patch_set":16,"id":"5a710552_835432ff","line":2,"updated":"2015-12-16 16:18:12.000000000","message":"I think this should be added to the list of command objects as well.","commit_id":"4358a33c0a17682c3a712ced105f3e7de07c0008"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"eae20aede1ed2ffdcd252adc6ed190ecf260c7eb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"subnet"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Network v2"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3a7e1126_50ed108a","line":2,"in_reply_to":"5a710552_835432ff","updated":"2015-12-17 08:01:04.000000000","message":"++","commit_id":"4358a33c0a17682c3a712ced105f3e7de07c0008"}],"doc/source/commands.rst":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"ee546c090221359f06df09de759081aaa5bdabb1","unresolved":false,"context_lines":[{"line_number":116,"context_line":"* ``service``: (**Identity**) a cloud service"},{"line_number":117,"context_line":"* ``service provider``: (**Identity**) a resource that consumes assertions from an ``identity provider``"},{"line_number":118,"context_line":"* ``snapshot``: (**Volume**) a point-in-time copy of a volume"},{"line_number":119,"context_line":"* ``subnet``: (**Subnet**) - an IP address block that can be used for assigning IP addresses to virtual instances"},{"line_number":120,"context_line":"* ``token``: (**Identity**) a bearer token managed by Identity service"},{"line_number":121,"context_line":"* ``usage``: (**Compute**) display host resources being consumed"},{"line_number":122,"context_line":"* ``user``: (**Identity**) individual cloud resources users"}],"source_content_type":"text/x-rst","patch_set":18,"id":"9a68dd71_a3b711d7","line":119,"updated":"2016-01-22 03:08:31.000000000","message":"An IP address can be assigned to more than virtual instances.  It can be assigned to servers and other resources when ports are created on a network.\n\nAlso **Subnet** should be **Network**.","commit_id":"4edefc9d1d81503d0f6939195213cb5fbb8a2632"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"afccfa36bc49e745fd54f39c80e33f4a343ae32c","unresolved":false,"context_lines":[{"line_number":116,"context_line":"* ``service``: (**Identity**) a cloud service"},{"line_number":117,"context_line":"* ``service provider``: (**Identity**) a resource that consumes assertions from an ``identity provider``"},{"line_number":118,"context_line":"* ``snapshot``: (**Volume**) a point-in-time copy of a volume"},{"line_number":119,"context_line":"* ``subnet``: (**Network**) - a pool of private IP addresses that can be assigned to instances or other resources"},{"line_number":120,"context_line":"* ``token``: (**Identity**) a bearer token managed by Identity service"},{"line_number":121,"context_line":"* ``usage``: (**Compute**) display host resources being consumed"},{"line_number":122,"context_line":"* ``user``: (**Identity**) individual cloud resources users"}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a68dd71_d7e1e89b","line":119,"updated":"2016-01-26 17:39:52.000000000","message":"nit...I don\u0027t think \u0027private\u0027 is needed.  Also neutron supports subnet pools so maybe \u0027pool\u0027 should be replaced by \u0027block\u0027.","commit_id":"ffcfff6f3eda2cc9022b7924aa1d08739d63aaa1"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"50d08a6b3ca961d5a232f78158577a33dbb3f26b","unresolved":false,"context_lines":[{"line_number":116,"context_line":"* ``service``: (**Identity**) a cloud service"},{"line_number":117,"context_line":"* ``service provider``: (**Identity**) a resource that consumes assertions from an ``identity provider``"},{"line_number":118,"context_line":"* ``snapshot``: (**Volume**) a point-in-time copy of a volume"},{"line_number":119,"context_line":"* ``subnet``: (**Network**) - a pool of private IP addresses that can be assigned to instances or other resources"},{"line_number":120,"context_line":"* ``token``: (**Identity**) a bearer token managed by Identity service"},{"line_number":121,"context_line":"* ``usage``: (**Compute**) display host resources being consumed"},{"line_number":122,"context_line":"* ``user``: (**Identity**) individual cloud resources users"}],"source_content_type":"text/x-rst","patch_set":23,"id":"9a68dd71_bbdc5119","line":119,"in_reply_to":"9a68dd71_d7e1e89b","updated":"2016-01-26 23:33:00.000000000","message":"As usual, OpenStack usage of networking terms is often at odds with actual networking usage...\n\nIf IP addresses must be used in the context of a subnet definition here, something along the lines of \"contiguous range of IP addresses\" would be more correct.","commit_id":"ffcfff6f3eda2cc9022b7924aa1d08739d63aaa1"}],"openstackclient/common/parseractions.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2fbd90a90e2472533ca212aadb60847d1f664ab4","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __call__(self, parser, namespace, values, option_string\u003dNone):"},{"line_number":46,"context_line":"        # Make sure we have an empty dict rather than None"},{"line_number":47,"context_line":"        if getattr(namespace, self.dest, None) is None:"},{"line_number":48,"context_line":"            setattr(namespace, self.dest, [])"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_29f77bd4","line":46,"updated":"2015-02-11 19:52:54.000000000","message":"NIT: \"empty dict\" should be \"empty list\"?","commit_id":"1b721dbedeba72c90cc9b55c3c2bd3fb52ca8738"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"3b679ca7bd2f4718e95c8019db827f281bdf67c0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __call__(self, parser, namespace, values, option_string\u003dNone):"},{"line_number":46,"context_line":"        # Make sure we have an empty dict rather than None"},{"line_number":47,"context_line":"        if getattr(namespace, self.dest, None) is None:"},{"line_number":48,"context_line":"            setattr(namespace, self.dest, [])"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_cc80adc1","line":46,"in_reply_to":"da86d52c_29f77bd4","updated":"2015-02-11 20:57:35.000000000","message":"Done","commit_id":"1b721dbedeba72c90cc9b55c3c2bd3fb52ca8738"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2fbd90a90e2472533ca212aadb60847d1f664ab4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        # Make sure we have an empty dict rather than None"},{"line_number":47,"context_line":"        if getattr(namespace, self.dest, None) is None:"},{"line_number":48,"context_line":"            setattr(namespace, self.dest, [])"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        value_dict \u003d dict(kvp.split(\"\u003d\") for kvp in values.split(\",\"))"},{"line_number":51,"context_line":"        if self.const:"},{"line_number":52,"context_line":"            for key in value_dict.keys():"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_29ccdb88","line":49,"updated":"2015-02-11 19:52:54.000000000","message":"Should we add a check that values is not None here, in case the user didn\u0027t set any value.","commit_id":"1b721dbedeba72c90cc9b55c3c2bd3fb52ca8738"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"3b679ca7bd2f4718e95c8019db827f281bdf67c0","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        # Make sure we have an empty dict rather than None"},{"line_number":47,"context_line":"        if getattr(namespace, self.dest, None) is None:"},{"line_number":48,"context_line":"            setattr(namespace, self.dest, [])"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        value_dict \u003d dict(kvp.split(\"\u003d\") for kvp in values.split(\",\"))"},{"line_number":51,"context_line":"        if self.const:"},{"line_number":52,"context_line":"            for key in value_dict.keys():"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_4c74bdfd","line":49,"in_reply_to":"da86d52c_29ccdb88","updated":"2015-02-11 20:57:35.000000000","message":"Done","commit_id":"1b721dbedeba72c90cc9b55c3c2bd3fb52ca8738"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"3a4d95ff63e915d944545ea748c629339804d22d","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class KeyValueAppendAction(argparse.Action):"},{"line_number":40,"context_line":"    \"\"\"A custom action to parse arguments as key\u003dvalue pairs"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    Ensures that ``dest`` is a list of dicts"},{"line_number":43,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_d245f8b3","line":40,"updated":"2015-02-23 20:13:58.000000000","message":"A bit of description on how this differs from KeyValueAction would be useful.  Why choose one or the other?","commit_id":"66832ebeedfc78e64a1e0efb421701903dacba88"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5c3cfb2c9455a26417a46460f6e085062f53425b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        if not values:"},{"line_number":51,"context_line":"            msg \u003d \"Empty argument is not allowed\""},{"line_number":52,"context_line":"            raise argparse.ArgumentError(self, msg)"},{"line_number":53,"context_line":"        value_ray \u003d []"},{"line_number":54,"context_line":"        for kvp in values.split(\",\"):"},{"line_number":55,"context_line":"            split_value \u003d kvp.split(\"\u003d\")"},{"line_number":56,"context_line":"            if len(split_value) is not 2:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_6aaa9a72","line":53,"updated":"2015-09-24 18:35:33.000000000","message":"Does \"ray\" have any significance in OSC? It seems like a strange variable name.","commit_id":"66832ebeedfc78e64a1e0efb421701903dacba88"}],"openstackclient/network/v2/subnet.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"6248e7efcb3572aeae070921e206d4146d2a0624","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def get_body(parsed_args, network_id):"},{"line_number":29,"context_line":"    body \u003d {}"},{"line_number":30,"context_line":"    if parsed_args.name is not None:"},{"line_number":31,"context_line":"        body[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":32,"context_line":"    if network_id is not None:"},{"line_number":33,"context_line":"        body[\u0027network_id\u0027] \u003d network_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_bb903a44","line":30,"updated":"2015-02-11 02:41:08.000000000","message":"I think \"is not None\" is required for the condition","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"915a52b2817599f14bf424aebda1c18f2f202601","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def get_body(parsed_args, network_id):"},{"line_number":29,"context_line":"    body \u003d {}"},{"line_number":30,"context_line":"    if parsed_args.name is not None:"},{"line_number":31,"context_line":"        body[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":32,"context_line":"    if network_id is not None:"},{"line_number":33,"context_line":"        body[\u0027network_id\u0027] \u003d network_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_0c69e5bd","line":30,"in_reply_to":"da86d52c_89ef8786","updated":"2015-02-11 19:46:41.000000000","message":"well, that wouldn\u0027t work for the case where someone wants to blank out the name that was previously set for an update.","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"814735542964d433e01f3668cb474aa95f449d21","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def get_body(parsed_args, network_id):"},{"line_number":29,"context_line":"    body \u003d {}"},{"line_number":30,"context_line":"    if parsed_args.name is not None:"},{"line_number":31,"context_line":"        body[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":32,"context_line":"    if network_id is not None:"},{"line_number":33,"context_line":"        body[\u0027network_id\u0027] \u003d network_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_89ef8786","line":30,"in_reply_to":"da86d52c_980b6523","updated":"2015-02-11 19:37:44.000000000","message":"I mean you can just do a check of \"if parsed_args.name:\" rather than \"if parsed_args.name is not None\".  This already checks the value is not none and not empty","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"8405991e3055a1f7570abf9dec0657b5f996eeff","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def get_body(parsed_args, network_id):"},{"line_number":29,"context_line":"    body \u003d {}"},{"line_number":30,"context_line":"    if parsed_args.name is not None:"},{"line_number":31,"context_line":"        body[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":32,"context_line":"    if network_id is not None:"},{"line_number":33,"context_line":"        body[\u0027network_id\u0027] \u003d network_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_980b6523","line":30,"in_reply_to":"da86d52c_bb903a44","updated":"2015-02-11 14:27:20.000000000","message":"I\u0027m not entirely sure I follow, but I don\u0027t think a name is required for a subnet.  If it is, we should enforce in argparse.","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"19759da40af3cb8dce06c2b69a03db393da99602","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        body[\u0027ip_version\u0027] \u003d parsed_args.ip_version"},{"line_number":50,"context_line":"    return {\u0027subnet\u0027: body}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"def allocation_pool_parse(param):"},{"line_number":54,"context_line":"    \"\"\"Convert min-max range into dictionary.\"\"\""},{"line_number":55,"context_line":"    dict \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_eecfd0ae","line":52,"updated":"2014-08-27 14:10:56.000000000","message":"I\u0027d sooner replace these two methods with https://review.openstack.org/#/c/114643/1/openstackclient/common/parseractions.py\nif you guys are okay with that new action.","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":14485,"name":"Igor Bolotin","email":"igor_bolotin@symantec.com","username":"ibolotin"},"change_message_id":"f07ea75997fda75283c071b1859a8b6461fcc48c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        parser \u003d super(CreateSubnet, self).get_parser(prog_name)"},{"line_number":88,"context_line":"        parser.add_argument("},{"line_number":89,"context_line":"            \u0027network\u0027,"},{"line_number":90,"context_line":"            help\u003d\u0027Name or identifier of the network\u0027)"},{"line_number":91,"context_line":"        parser.add_argument("},{"line_number":92,"context_line":"            \u0027cidr\u0027,"},{"line_number":93,"context_line":"            help\u003d\u0027CIDR of the subnet\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_dd247d10","line":90,"updated":"2015-02-07 08:00:28.000000000","message":"Maybe change to \"Network this subnet belongs to (name or ID)\"","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"8405991e3055a1f7570abf9dec0657b5f996eeff","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        parser \u003d super(CreateSubnet, self).get_parser(prog_name)"},{"line_number":88,"context_line":"        parser.add_argument("},{"line_number":89,"context_line":"            \u0027network\u0027,"},{"line_number":90,"context_line":"            help\u003d\u0027Name or identifier of the network\u0027)"},{"line_number":91,"context_line":"        parser.add_argument("},{"line_number":92,"context_line":"            \u0027cidr\u0027,"},{"line_number":93,"context_line":"            help\u003d\u0027CIDR of the subnet\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_95a17196","line":90,"in_reply_to":"da86d52c_dd247d10","updated":"2015-02-11 14:27:20.000000000","message":"Done","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":14485,"name":"Igor Bolotin","email":"igor_bolotin@symantec.com","username":"ibolotin"},"change_message_id":"f07ea75997fda75283c071b1859a8b6461fcc48c","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        return zip(*sorted(six.iteritems(data)))"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"class DeleteSubnet(command.Command):"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DeleteSubnet\u0027)"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_bdeb49af","line":146,"updated":"2015-02-07 08:00:28.000000000","message":"Missing docstring","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"8405991e3055a1f7570abf9dec0657b5f996eeff","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        return zip(*sorted(six.iteritems(data)))"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"class DeleteSubnet(command.Command):"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DeleteSubnet\u0027)"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_d5be89ad","line":146,"in_reply_to":"da86d52c_bdeb49af","updated":"2015-02-11 14:27:20.000000000","message":"Done","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":14485,"name":"Igor Bolotin","email":"igor_bolotin@symantec.com","username":"ibolotin"},"change_message_id":"f07ea75997fda75283c071b1859a8b6461fcc48c","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        parser \u003d super(DeleteSubnet, self).get_parser(prog_name)"},{"line_number":152,"context_line":"        parser.add_argument("},{"line_number":153,"context_line":"            \u0027identifier\u0027,"},{"line_number":154,"context_line":"            metavar\u003d\"\u003csubnet\u003e\","},{"line_number":155,"context_line":"            help\u003d(\"Name or identifier of subnet to delete\")"},{"line_number":156,"context_line":"        )"},{"line_number":157,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_7d08f191","line":154,"updated":"2015-02-07 08:00:28.000000000","message":"it would be good to take list of subnets to delete - similar to how delete networks implemented","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":14485,"name":"Igor Bolotin","email":"igor_bolotin@symantec.com","username":"ibolotin"},"change_message_id":"f07ea75997fda75283c071b1859a8b6461fcc48c","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        parser.add_argument("},{"line_number":153,"context_line":"            \u0027identifier\u0027,"},{"line_number":154,"context_line":"            metavar\u003d\"\u003csubnet\u003e\","},{"line_number":155,"context_line":"            help\u003d(\"Name or identifier of subnet to delete\")"},{"line_number":156,"context_line":"        )"},{"line_number":157,"context_line":"        return parser"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_fdf3019d","line":155,"updated":"2015-02-07 08:00:28.000000000","message":"more common form would be - \"Subnet to delete (name or ID)\"","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"8405991e3055a1f7570abf9dec0657b5f996eeff","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        parser.add_argument("},{"line_number":153,"context_line":"            \u0027identifier\u0027,"},{"line_number":154,"context_line":"            metavar\u003d\"\u003csubnet\u003e\","},{"line_number":155,"context_line":"            help\u003d(\"Name or identifier of subnet to delete\")"},{"line_number":156,"context_line":"        )"},{"line_number":157,"context_line":"        return parser"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_751ddc61","line":155,"in_reply_to":"da86d52c_fdf3019d","updated":"2015-02-11 14:27:20.000000000","message":"Done","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":14485,"name":"Igor Bolotin","email":"igor_bolotin@symantec.com","username":"ibolotin"},"change_message_id":"f07ea75997fda75283c071b1859a8b6461fcc48c","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            \u0027--long\u0027,"},{"line_number":178,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":179,"context_line":"            default\u003dFalse,"},{"line_number":180,"context_line":"            help\u003d\u0027Long listing\u0027,"},{"line_number":181,"context_line":"        )"},{"line_number":182,"context_line":"        return parser"},{"line_number":183,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_fd3a2133","line":180,"updated":"2015-02-07 08:00:28.000000000","message":"\"List additional fields in output\"","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"8405991e3055a1f7570abf9dec0657b5f996eeff","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            \u0027--long\u0027,"},{"line_number":178,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":179,"context_line":"            default\u003dFalse,"},{"line_number":180,"context_line":"            help\u003d\u0027Long listing\u0027,"},{"line_number":181,"context_line":"        )"},{"line_number":182,"context_line":"        return parser"},{"line_number":183,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_1571000c","line":180,"in_reply_to":"da86d52c_fd3a2133","updated":"2015-02-11 14:27:20.000000000","message":"Done","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":14485,"name":"Igor Bolotin","email":"igor_bolotin@symantec.com","username":"ibolotin"},"change_message_id":"f07ea75997fda75283c071b1859a8b6461fcc48c","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                 for s in data))"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"class SetSubnet(command.Command):"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.SetSubnet\u0027)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_5d2a4de8","line":202,"updated":"2015-02-07 08:00:28.000000000","message":"Missing docstring","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"8405991e3055a1f7570abf9dec0657b5f996eeff","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                 for s in data))"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"class SetSubnet(command.Command):"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.SetSubnet\u0027)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_3561a439","line":202,"in_reply_to":"da86d52c_5d2a4de8","updated":"2015-02-11 14:27:20.000000000","message":"Done","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"6248e7efcb3572aeae070921e206d4146d2a0624","unresolved":false,"context_lines":[{"line_number":206,"context_line":"    def get_parser(self, prog_name):"},{"line_number":207,"context_line":"        parser \u003d super(SetSubnet, self).get_parser(prog_name)"},{"line_number":208,"context_line":"        parser.add_argument("},{"line_number":209,"context_line":"            \u0027identifier\u0027,"},{"line_number":210,"context_line":"            metavar\u003d\"\u003csubnet\u003e\","},{"line_number":211,"context_line":"            help\u003d(\"Name or identifier of subnet to set\")"},{"line_number":212,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_db188ed5","line":209,"updated":"2015-02-11 02:41:08.000000000","message":"NIT: Use \u0027subnet\u0027 here, for consistency with other CLI","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"8405991e3055a1f7570abf9dec0657b5f996eeff","unresolved":false,"context_lines":[{"line_number":206,"context_line":"    def get_parser(self, prog_name):"},{"line_number":207,"context_line":"        parser \u003d super(SetSubnet, self).get_parser(prog_name)"},{"line_number":208,"context_line":"        parser.add_argument("},{"line_number":209,"context_line":"            \u0027identifier\u0027,"},{"line_number":210,"context_line":"            metavar\u003d\"\u003csubnet\u003e\","},{"line_number":211,"context_line":"            help\u003d(\"Name or identifier of subnet to set\")"},{"line_number":212,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_d52208b8","line":209,"in_reply_to":"da86d52c_db188ed5","updated":"2015-02-11 14:27:20.000000000","message":"Done","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":14485,"name":"Igor Bolotin","email":"igor_bolotin@symantec.com","username":"ibolotin"},"change_message_id":"f07ea75997fda75283c071b1859a8b6461fcc48c","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        return"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"class ShowSubnet(show.ShowOne):"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.ShowSubnet\u0027)"},{"line_number":280,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_fd686123","line":277,"updated":"2015-02-07 08:00:28.000000000","message":"Missing docstring","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"8405991e3055a1f7570abf9dec0657b5f996eeff","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        return"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"class ShowSubnet(show.ShowOne):"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.ShowSubnet\u0027)"},{"line_number":280,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_d5512863","line":277,"in_reply_to":"da86d52c_fd686123","updated":"2015-02-11 14:27:20.000000000","message":"Done","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"6248e7efcb3572aeae070921e206d4146d2a0624","unresolved":false,"context_lines":[{"line_number":281,"context_line":"    def get_parser(self, prog_name):"},{"line_number":282,"context_line":"        parser \u003d super(ShowSubnet, self).get_parser(prog_name)"},{"line_number":283,"context_line":"        parser.add_argument("},{"line_number":284,"context_line":"            \u0027identifier\u0027,"},{"line_number":285,"context_line":"            metavar\u003d\"\u003csubnet\u003e\","},{"line_number":286,"context_line":"            help\u003d(\"Name or identifier of subnet to show\")"},{"line_number":287,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_dbbc0ebe","line":284,"updated":"2015-02-11 02:41:08.000000000","message":"Use \u0027subnet\u0027 here, for consistency with other CLI","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"8405991e3055a1f7570abf9dec0657b5f996eeff","unresolved":false,"context_lines":[{"line_number":281,"context_line":"    def get_parser(self, prog_name):"},{"line_number":282,"context_line":"        parser \u003d super(ShowSubnet, self).get_parser(prog_name)"},{"line_number":283,"context_line":"        parser.add_argument("},{"line_number":284,"context_line":"            \u0027identifier\u0027,"},{"line_number":285,"context_line":"            metavar\u003d\"\u003csubnet\u003e\","},{"line_number":286,"context_line":"            help\u003d(\"Name or identifier of subnet to show\")"},{"line_number":287,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_b52594c3","line":284,"in_reply_to":"da86d52c_dbbc0ebe","updated":"2015-02-11 14:27:20.000000000","message":"Done","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":14485,"name":"Igor Bolotin","email":"igor_bolotin@symantec.com","username":"ibolotin"},"change_message_id":"f07ea75997fda75283c071b1859a8b6461fcc48c","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        parser.add_argument("},{"line_number":284,"context_line":"            \u0027identifier\u0027,"},{"line_number":285,"context_line":"            metavar\u003d\"\u003csubnet\u003e\","},{"line_number":286,"context_line":"            help\u003d(\"Name or identifier of subnet to show\")"},{"line_number":287,"context_line":"        )"},{"line_number":288,"context_line":"        return parser"},{"line_number":289,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_dd3d5d2e","line":286,"updated":"2015-02-07 08:00:28.000000000","message":"More common form would be - \"Subnet to display (name or ID)\"","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"6248e7efcb3572aeae070921e206d4146d2a0624","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        parser.add_argument("},{"line_number":284,"context_line":"            \u0027identifier\u0027,"},{"line_number":285,"context_line":"            metavar\u003d\"\u003csubnet\u003e\","},{"line_number":286,"context_line":"            help\u003d(\"Name or identifier of subnet to show\")"},{"line_number":287,"context_line":"        )"},{"line_number":288,"context_line":"        return parser"},{"line_number":289,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_5ba1fe92","line":286,"in_reply_to":"da86d52c_dd3d5d2e","updated":"2015-02-11 02:41:08.000000000","message":"+1","commit_id":"53221c06bf56f2aa13a3cc97cabbd4ca95cc18d7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"09f37ba291b6f35cc452dcfb257c77fdf29c56f7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    return {\u0027subnet\u0027: body}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"def allocation_pool_parse(param):"},{"line_number":54,"context_line":"    \"\"\"Convert min-max range into dictionary.\"\"\""},{"line_number":55,"context_line":"    dict \u003d {}"},{"line_number":56,"context_line":"    if \u0027,\u0027 in param:"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_f789c76f","line":53,"updated":"2015-02-11 16:52:23.000000000","message":"this function is nearly identicical to the one at like 68-78, why not add 2 more parameters to the signature, so it\u0027s (param, key, value)\n\nthen:\n  dict[key] \u003d ray[0]\n  dict[value] \u003d ray[1]\n\nyou could rename the function something generic and place it in utils","commit_id":"ced584d2ece4899f71dfee46fa3458ea663f7422"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"60886984201e4cc419dac4716b14855b2ba5de9a","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"def allocation_pool_parse(param):"},{"line_number":54,"context_line":"    \"\"\"Convert min-max range into dictionary.\"\"\""},{"line_number":55,"context_line":"    dict \u003d {}"},{"line_number":56,"context_line":"    if \u0027,\u0027 in param:"},{"line_number":57,"context_line":"        for kv_str in param.split(\",\"):"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_88286634","line":54,"updated":"2015-02-11 17:54:50.000000000","message":"my comment on ps5 still applies","commit_id":"14726e673b2feeeeb67e35daf7bee07a7fea2887"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2fbd90a90e2472533ca212aadb60847d1f664ab4","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        return parser"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def take_action(self, parsed_args):"},{"line_number":113,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027 % parsed_args)"},{"line_number":114,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":115,"context_line":"        neti \u003d common.find(client, \u0027network\u0027, \u0027networks\u0027, parsed_args.network)"},{"line_number":116,"context_line":"        body \u003d get_body(parsed_args, neti)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_6c8a6165","line":113,"updated":"2015-02-11 19:52:54.000000000","message":"Check if network and CIDR are required, seems like these two fields are the only two required fields\n\nhttp://docs.openstack.org/user-guide/content/cli_subnets.html","commit_id":"1b721dbedeba72c90cc9b55c3c2bd3fb52ca8738"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"3b679ca7bd2f4718e95c8019db827f281bdf67c0","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        return parser"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def take_action(self, parsed_args):"},{"line_number":113,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027 % parsed_args)"},{"line_number":114,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":115,"context_line":"        neti \u003d common.find(client, \u0027network\u0027, \u0027networks\u0027, parsed_args.network)"},{"line_number":116,"context_line":"        body \u003d get_body(parsed_args, neti)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_0c272513","line":113,"in_reply_to":"da86d52c_6c8a6165","updated":"2015-02-11 20:57:35.000000000","message":"argparse handles this","commit_id":"1b721dbedeba72c90cc9b55c3c2bd3fb52ca8738"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2fbd90a90e2472533ca212aadb60847d1f664ab4","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.SetSubnet\u0027)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def get_parser(self, prog_name):"},{"line_number":185,"context_line":"        parser \u003d super(SetSubnet, self).get_parser(prog_name)"},{"line_number":186,"context_line":"        parser.add_argument("},{"line_number":187,"context_line":"            \u0027subnet\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_2c114952","line":184,"updated":"2015-02-11 19:52:54.000000000","message":"The general format for the help in the Set command is usually \"Set \u003cfield\u003e\"\n\nSee: https://github.com/openstack/python-openstackclient/blob/master/openstackclient/identity/v3/user.py#L295","commit_id":"1b721dbedeba72c90cc9b55c3c2bd3fb52ca8738"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"3b679ca7bd2f4718e95c8019db827f281bdf67c0","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.SetSubnet\u0027)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def get_parser(self, prog_name):"},{"line_number":185,"context_line":"        parser \u003d super(SetSubnet, self).get_parser(prog_name)"},{"line_number":186,"context_line":"        parser.add_argument("},{"line_number":187,"context_line":"            \u0027subnet\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_b2411465","line":184,"in_reply_to":"da86d52c_2c114952","updated":"2015-02-11 20:57:35.000000000","message":"Done","commit_id":"1b721dbedeba72c90cc9b55c3c2bd3fb52ca8738"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2fbd90a90e2472533ca212aadb60847d1f664ab4","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        parser.add_argument("},{"line_number":187,"context_line":"            \u0027subnet\u0027,"},{"line_number":188,"context_line":"            metavar\u003d\"\u003csubnet\u003e\","},{"line_number":189,"context_line":"            help\u003d(\"Name or identifier of subnet to set\")"},{"line_number":190,"context_line":"        )"},{"line_number":191,"context_line":"        parser.add_argument("},{"line_number":192,"context_line":"            \u0027--network\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_49a74f50","line":189,"updated":"2015-02-11 19:52:54.000000000","message":"Should be: Subnet to change (name or ID)","commit_id":"1b721dbedeba72c90cc9b55c3c2bd3fb52ca8738"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"3b679ca7bd2f4718e95c8019db827f281bdf67c0","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        parser.add_argument("},{"line_number":187,"context_line":"            \u0027subnet\u0027,"},{"line_number":188,"context_line":"            metavar\u003d\"\u003csubnet\u003e\","},{"line_number":189,"context_line":"            help\u003d(\"Name or identifier of subnet to set\")"},{"line_number":190,"context_line":"        )"},{"line_number":191,"context_line":"        parser.add_argument("},{"line_number":192,"context_line":"            \u0027--network\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_d246887a","line":189,"in_reply_to":"da86d52c_49a74f50","updated":"2015-02-11 20:57:35.000000000","message":"Done","commit_id":"1b721dbedeba72c90cc9b55c3c2bd3fb52ca8738"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2fbd90a90e2472533ca212aadb60847d1f664ab4","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        )"},{"line_number":191,"context_line":"        parser.add_argument("},{"line_number":192,"context_line":"            \u0027--network\u0027,"},{"line_number":193,"context_line":"            help\u003d\u0027Name or identifier of the network\u0027)"},{"line_number":194,"context_line":"        parser.add_argument("},{"line_number":195,"context_line":"            \u0027--cidr\u0027,"},{"line_number":196,"context_line":"            help\u003d\u0027CIDR of the subnet\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_2923fbbd","line":193,"updated":"2015-02-11 19:52:54.000000000","message":"Should be: Set network this subnet belongs to (name or ID)","commit_id":"1b721dbedeba72c90cc9b55c3c2bd3fb52ca8738"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"3b679ca7bd2f4718e95c8019db827f281bdf67c0","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        )"},{"line_number":191,"context_line":"        parser.add_argument("},{"line_number":192,"context_line":"            \u0027--network\u0027,"},{"line_number":193,"context_line":"            help\u003d\u0027Name or identifier of the network\u0027)"},{"line_number":194,"context_line":"        parser.add_argument("},{"line_number":195,"context_line":"            \u0027--cidr\u0027,"},{"line_number":196,"context_line":"            help\u003d\u0027CIDR of the subnet\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_f25e2c44","line":193,"in_reply_to":"da86d52c_2923fbbd","updated":"2015-02-11 20:57:35.000000000","message":"Done","commit_id":"1b721dbedeba72c90cc9b55c3c2bd3fb52ca8738"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5c3cfb2c9455a26417a46460f6e085062f53425b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"\"\"\"Subnet action implementations\"\"\""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import logging"},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from cliff import command"},{"line_number":20,"context_line":"from cliff import lister"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_6a737a4e","line":17,"updated":"2015-09-24 18:35:33.000000000","message":"six is not a part of the stdlib so it should be in the next section.","commit_id":"66832ebeedfc78e64a1e0efb421701903dacba88"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"3a4d95ff63e915d944545ea748c629339804d22d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            \u0027name\u0027,"},{"line_number":69,"context_line":"            help\u003d\u0027Name of subnet\u0027)"},{"line_number":70,"context_line":"        parser.add_argument("},{"line_number":71,"context_line":"            \u0027--allocation-pool\u0027, metavar\u003d\u0027start\u003dlow,end\u003dhigh\u0027,"},{"line_number":72,"context_line":"            dest\u003d\u0027allocation_pools\u0027,"},{"line_number":73,"context_line":"            action\u003dparseractions.KeyValueAppendAction,"},{"line_number":74,"context_line":"            const\u003d[\u0027start\u0027, \u0027end\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_3214944d","line":71,"updated":"2015-02-23 20:13:58.000000000","message":"I\u0027d really prefer to not avps here, we don\u0027t to this anywhere else.  In other places where we need start/end, we already have a pair of options or we have a single option without the attribute names.  Why is a third way to do this important?","commit_id":"66832ebeedfc78e64a1e0efb421701903dacba88"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5c3cfb2c9455a26417a46460f6e085062f53425b","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        return parser"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def take_action(self, parsed_args):"},{"line_number":115,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027 % parsed_args)"},{"line_number":116,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":117,"context_line":"        neti \u003d common.find(client, \u0027network\u0027, \u0027networks\u0027, parsed_args.network)"},{"line_number":118,"context_line":"        body \u003d get_body(parsed_args, neti)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_ca6c060b","line":115,"updated":"2015-09-24 18:35:33.000000000","message":"I\u0027m really not a fan of using % in log statements.","commit_id":"66832ebeedfc78e64a1e0efb421701903dacba88"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"eba399b515dc0f98f6d4c3a127a8e7a700242e4f","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from openstackclient.network import common"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def get_body(parsed_args, network_id):"},{"line_number":31,"context_line":"    body \u003d {}"},{"line_number":32,"context_line":"    if parsed_args.name is not None:"},{"line_number":33,"context_line":"        body[\u0027name\u0027] \u003d parsed_args.name"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_8a5ba385","line":30,"updated":"2015-12-14 03:19:10.000000000","message":"This function will be used in other commands. So I suggest we define it in each file in the same prototype.\n\ndef _get_arrts(client_manager, parsed_args):\n\n1. The name, in sdk, the parameter passed to proxy is named \"attrs\". And it is a private method. So let\u0027s call it _get_attrs(), shall we ?\n\n2. The parameters, besides parsed_args, when we deal with project and project_domain, we have to make use of identity_client. So shall we pass the client_manager so that we can get any client outside a class ?\n\nI\u0027m thinking, we need some principle in the very beginning of our network development, and then we apply the principle into other components in osc in the future.","commit_id":"a952a9f3269989d2c0bb1354a9db2af73b4a73e1"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"eba399b515dc0f98f6d4c3a127a8e7a700242e4f","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def get_body(parsed_args, network_id):"},{"line_number":31,"context_line":"    body \u003d {}"},{"line_number":32,"context_line":"    if parsed_args.name is not None:"},{"line_number":33,"context_line":"        body[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":34,"context_line":"    if network_id is not None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_6acf5729","line":31,"updated":"2015-12-14 03:19:10.000000000","message":"The same with above, shall we call it attrs ?","commit_id":"a952a9f3269989d2c0bb1354a9db2af73b4a73e1"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"eba399b515dc0f98f6d4c3a127a8e7a700242e4f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    if parsed_args.name is not None:"},{"line_number":33,"context_line":"        body[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":34,"context_line":"    if network_id is not None:"},{"line_number":35,"context_line":"        body[\u0027network_id\u0027] \u003d network_id"},{"line_number":36,"context_line":"    if parsed_args.cidr is not None:"},{"line_number":37,"context_line":"        body[\u0027cidr\u0027] \u003d parsed_args.cidr"},{"line_number":38,"context_line":"    if parsed_args.allocation_pools is not None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_656b08f2","line":35,"updated":"2015-12-14 03:19:10.000000000","message":"I think it is better to find the network id inside this function.","commit_id":"a952a9f3269989d2c0bb1354a9db2af73b4a73e1"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"eba399b515dc0f98f6d4c3a127a8e7a700242e4f","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            \u0027(repeat option to set multiple properties)\u0027)"},{"line_number":79,"context_line":"        dhcp_enable_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":80,"context_line":"        dhcp_enable_group.add_argument("},{"line_number":81,"context_line":"            \u0027--dhcp-enable\u0027,"},{"line_number":82,"context_line":"            default\u003dNone,"},{"line_number":83,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":84,"context_line":"            help\u003d\u0027Enable DHCP\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_ea1ee7b9","line":81,"updated":"2015-12-14 03:19:10.000000000","message":"About the option name, is there any principle that we can follow ?  For example, it should be called \"--dhcp-enable\" or \"--enable-dhcp\" ? \n\nI think we should decide in the beginning, and then follow this rule in the up coming development.","commit_id":"a952a9f3269989d2c0bb1354a9db2af73b4a73e1"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"eba399b515dc0f98f6d4c3a127a8e7a700242e4f","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    def take_action(self, parsed_args):"},{"line_number":116,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027 % parsed_args)"},{"line_number":117,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":118,"context_line":"        neti \u003d common.find(client, \u0027network\u0027, \u0027networks\u0027, parsed_args.network)"},{"line_number":119,"context_line":"        body \u003d get_body(parsed_args, neti)"},{"line_number":120,"context_line":"        create_method \u003d getattr(client, \"create_subnet\")"},{"line_number":121,"context_line":"        data \u003d create_method(body)[\u0027subnet\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_6539c8f1","line":118,"updated":"2015-12-14 03:19:10.000000000","message":"It is better to use client.find_network() here. And the same below, use client.find_xxx().\n\nBTW, haven\u0027t common.py been removed ?","commit_id":"a952a9f3269989d2c0bb1354a9db2af73b4a73e1"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"eba399b515dc0f98f6d4c3a127a8e7a700242e4f","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        body \u003d get_body(parsed_args, neti)"},{"line_number":120,"context_line":"        create_method \u003d getattr(client, \"create_subnet\")"},{"line_number":121,"context_line":"        data \u003d create_method(body)[\u0027subnet\u0027]"},{"line_number":122,"context_line":"        return zip(*sorted(six.iteritems(data)))"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"class DeleteSubnet(command.Command):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_e504d818","line":122,"updated":"2015-12-14 03:19:10.000000000","message":"And about the return value, it is the principle thing again.\n\nCan we unify the return value here ?  Return columns and data.","commit_id":"a952a9f3269989d2c0bb1354a9db2af73b4a73e1"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"eba399b515dc0f98f6d4c3a127a8e7a700242e4f","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    def get_parser(self, prog_name):"},{"line_number":131,"context_line":"        parser \u003d super(DeleteSubnet, self).get_parser(prog_name)"},{"line_number":132,"context_line":"        parser.add_argument("},{"line_number":133,"context_line":"            \u0027subnets\u0027,"},{"line_number":134,"context_line":"            metavar\u003d\"\u003csubnet\u003e\","},{"line_number":135,"context_line":"            nargs\u003d\"+\","},{"line_number":136,"context_line":"            help\u003d(\"Subnet to delete (name or ID)\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_5011ec50","line":133,"updated":"2015-12-14 03:19:10.000000000","message":"Do not use the plural format for parameter.","commit_id":"a952a9f3269989d2c0bb1354a9db2af73b4a73e1"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"eba399b515dc0f98f6d4c3a127a8e7a700242e4f","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            \u0027subnets\u0027,"},{"line_number":134,"context_line":"            metavar\u003d\"\u003csubnet\u003e\","},{"line_number":135,"context_line":"            nargs\u003d\"+\","},{"line_number":136,"context_line":"            help\u003d(\"Subnet to delete (name or ID)\")"},{"line_number":137,"context_line":"        )"},{"line_number":138,"context_line":"        return parser"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_1017e445","line":136,"updated":"2015-12-14 03:19:10.000000000","message":"Subnet --\u003e Subnet(s)","commit_id":"a952a9f3269989d2c0bb1354a9db2af73b4a73e1"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"eba399b515dc0f98f6d4c3a127a8e7a700242e4f","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":143,"context_line":"        delete_method \u003d getattr(client, \"delete_subnet\")"},{"line_number":144,"context_line":"        for subnet in parsed_args.subnets:"},{"line_number":145,"context_line":"            _id \u003d common.find(client, \u0027subnet\u0027, \u0027subnets\u0027, subnet)"},{"line_number":146,"context_line":"            delete_method(_id)"},{"line_number":147,"context_line":"        return"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_d02b9c80","line":145,"updated":"2015-12-14 03:19:10.000000000","message":"common.py has been removed.","commit_id":"a952a9f3269989d2c0bb1354a9db2af73b4a73e1"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"0e7c7646a7eefa2e37e8e1679e39e4a911f8880b","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def get_parser(self, prog_name):"},{"line_number":156,"context_line":"        parser \u003d super(ListSubnet, self).get_parser(prog_name)"},{"line_number":157,"context_line":"        parser.add_argument("},{"line_number":158,"context_line":"            \u0027--long\u0027,"},{"line_number":159,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":160,"context_line":"            default\u003dFalse,"},{"line_number":161,"context_line":"            help\u003d\u0027List additional fields in output\"\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_f06a5880","line":158,"updated":"2015-12-14 03:28:24.000000000","message":"And the --long option, do we need some rules that which properties should be displayed by default and which ones should be displayed by --long option ?\n\nMaybe, name, id, project, status, should be default.","commit_id":"a952a9f3269989d2c0bb1354a9db2af73b4a73e1"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"eba399b515dc0f98f6d4c3a127a8e7a700242e4f","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    def take_action(self, parsed_args):"},{"line_number":247,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027 % parsed_args)"},{"line_number":248,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":249,"context_line":"        _id \u003d common.find(client, \u0027subnet\u0027, \u0027subnets\u0027,"},{"line_number":250,"context_line":"                          parsed_args.subnet)"},{"line_number":251,"context_line":"        network_id \u003d None"},{"line_number":252,"context_line":"        if parsed_args.network:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_705508f8","line":249,"updated":"2015-12-14 03:19:10.000000000","message":"common.py has been removed.","commit_id":"a952a9f3269989d2c0bb1354a9db2af73b4a73e1"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"eba399b515dc0f98f6d4c3a127a8e7a700242e4f","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                          parsed_args.subnet)"},{"line_number":251,"context_line":"        network_id \u003d None"},{"line_number":252,"context_line":"        if parsed_args.network:"},{"line_number":253,"context_line":"            network_id \u003d common.find(client, \u0027network\u0027, \u0027networks\u0027,"},{"line_number":254,"context_line":"                                     parsed_args.network)"},{"line_number":255,"context_line":"        body \u003d get_body(parsed_args, network_id)"},{"line_number":256,"context_line":"        if body[\u0027subnet\u0027] \u003d\u003d {}:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_d052bc12","line":253,"updated":"2015-12-14 03:19:10.000000000","message":"common.py has been removed.","commit_id":"a952a9f3269989d2c0bb1354a9db2af73b4a73e1"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"eba399b515dc0f98f6d4c3a127a8e7a700242e4f","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    def take_action(self, parsed_args):"},{"line_number":278,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027 % parsed_args)"},{"line_number":279,"context_line":"        client \u003d self.app.client_manager.network"},{"line_number":280,"context_line":"        _id \u003d common.find(client, \u0027subnet\u0027, \u0027subnets\u0027,"},{"line_number":281,"context_line":"                          parsed_args.subnet)"},{"line_number":282,"context_line":"        show_method \u003d getattr(client, \"show_subnet\")"},{"line_number":283,"context_line":"        data \u003d show_method(_id)[\u0027subnet\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_9058b432","line":280,"updated":"2015-12-14 03:19:10.000000000","message":"common.py has been removed.","commit_id":"a952a9f3269989d2c0bb1354a9db2af73b4a73e1"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"72c8785f7b1a2a477a65519a7237820bf66747ce","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            \u0027--long\u0027,"},{"line_number":48,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":49,"context_line":"            default\u003dFalse,"},{"line_number":50,"context_line":"            help\u003d\u0027List additional fields in output\"\u0027,"},{"line_number":51,"context_line":"        )"},{"line_number":52,"context_line":"        return parser"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"5a710552_408640dc","line":50,"updated":"2015-12-16 16:18:12.000000000","message":"Looks like an extra double quote in the help text.","commit_id":"4358a33c0a17682c3a712ced105f3e7de07c0008"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"eae20aede1ed2ffdcd252adc6ed190ecf260c7eb","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            \u0027--long\u0027,"},{"line_number":48,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":49,"context_line":"            default\u003dFalse,"},{"line_number":50,"context_line":"            help\u003d\u0027List additional fields in output\"\u0027,"},{"line_number":51,"context_line":"        )"},{"line_number":52,"context_line":"        return parser"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3a7e1126_50a43056","line":50,"in_reply_to":"5a710552_408640dc","updated":"2015-12-17 08:01:04.000000000","message":"++","commit_id":"4358a33c0a17682c3a712ced105f3e7de07c0008"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c7a977786078f837273d6c0e2ebff20c9de56f79","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        if formatted:"},{"line_number":27,"context_line":"            formatted +\u003d \u0027,\u0027"},{"line_number":28,"context_line":"        formatted +\u003d pool.get(\u0027start\u0027, \u0027\u0027) + \u0027-\u0027 + pool.get(\u0027end\u0027, \u0027\u0027)"},{"line_number":29,"context_line":"    return formatted"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"_formatters \u003d {"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a68dd71_a8023708","line":29,"updated":"2016-01-25 01:02:31.000000000","message":"Could you consider using join?\nThe method can be simpler.\n\n   pool_formatted \u003d [\u0027%s-%s\u0027 % (pool.get(\u0027start\u0027, \u0027\u0027), pool.get(\u0027end\u0027, \u0027\u0027))\n                     for pool in data]\n   return \u0027,\u0027.join(pool_formatted)","commit_id":"f8beb59e88391d1d0adda33a1e22fee7b3ef8c6f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c7a977786078f837273d6c0e2ebff20c9de56f79","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        headers \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Network\u0027, \u0027CIDR\u0027)"},{"line_number":60,"context_line":"        columns \u003d (\u0027id\u0027, \u0027name\u0027, \u0027network_id\u0027, \u0027cidr\u0027)"},{"line_number":61,"context_line":"        if parsed_args.long:"},{"line_number":62,"context_line":"            headers +\u003d (\u0027Project\u0027, \u0027DHCP\u0027, \u0027DNS Nameservers\u0027,"},{"line_number":63,"context_line":"                        \u0027Allocation Pools\u0027, \u0027Host Routes\u0027, \u0027IP Version\u0027,"},{"line_number":64,"context_line":"                        \u0027Gateway\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a68dd71_656c6a08","line":61,"updated":"2016-01-25 01:02:31.000000000","message":"Do we really need to specify shown fields explicitly in case of long option? Instead, I think it is better to show all fields.","commit_id":"f8beb59e88391d1d0adda33a1e22fee7b3ef8c6f"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"09fcf373934e94db3cafd16cc8a849e2dee39f46","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        headers \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Network\u0027, \u0027CIDR\u0027)"},{"line_number":60,"context_line":"        columns \u003d (\u0027id\u0027, \u0027name\u0027, \u0027network_id\u0027, \u0027cidr\u0027)"},{"line_number":61,"context_line":"        if parsed_args.long:"},{"line_number":62,"context_line":"            headers +\u003d (\u0027Project\u0027, \u0027DHCP\u0027, \u0027DNS Nameservers\u0027,"},{"line_number":63,"context_line":"                        \u0027Allocation Pools\u0027, \u0027Host Routes\u0027, \u0027IP Version\u0027,"},{"line_number":64,"context_line":"                        \u0027Gateway\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a68dd71_c47f3813","line":61,"in_reply_to":"9a68dd71_656c6a08","updated":"2016-01-25 16:01:16.000000000","message":"That is generally how it is done in OSC","commit_id":"f8beb59e88391d1d0adda33a1e22fee7b3ef8c6f"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"50d08a6b3ca961d5a232f78158577a33dbb3f26b","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        data \u003d self.app.client_manager.network.subnets()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        headers \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Network\u0027, \u0027CIDR\u0027)"},{"line_number":57,"context_line":"        columns \u003d (\u0027id\u0027, \u0027name\u0027, \u0027network_id\u0027, \u0027cidr\u0027)"},{"line_number":58,"context_line":"        if parsed_args.long:"},{"line_number":59,"context_line":"            headers +\u003d (\u0027Project\u0027, \u0027DHCP\u0027, \u0027DNS Nameservers\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a68dd71_de9fb3b2","line":56,"updated":"2016-01-26 23:33:00.000000000","message":"Please can we not perpetuate the incorrect usage of \u0027CIDR\u0027 in this fashion?  That column is actually the network address in CIDR notation.","commit_id":"ffcfff6f3eda2cc9022b7924aa1d08739d63aaa1"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"afccfa36bc49e745fd54f39c80e33f4a343ae32c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        headers \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Network\u0027, \u0027CIDR\u0027)"},{"line_number":57,"context_line":"        columns \u003d (\u0027id\u0027, \u0027name\u0027, \u0027network_id\u0027, \u0027cidr\u0027)"},{"line_number":58,"context_line":"        if parsed_args.long:"},{"line_number":59,"context_line":"            headers +\u003d (\u0027Project\u0027, \u0027DHCP\u0027, \u0027DNS Nameservers\u0027,"},{"line_number":60,"context_line":"                        \u0027Allocation Pools\u0027, \u0027Host Routes\u0027, \u0027IP Version\u0027,"},{"line_number":61,"context_line":"                        \u0027Gateway\u0027)"},{"line_number":62,"context_line":"            columns +\u003d (\u0027tenant_id\u0027, \u0027enable_dhcp\u0027, \u0027dns_nameservers\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a68dd71_32d092c9","line":59,"updated":"2016-01-26 17:39:52.000000000","message":"Should \"Nameservers\" be 2 words \"Name Servers\"?","commit_id":"ffcfff6f3eda2cc9022b7924aa1d08739d63aaa1"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"50d08a6b3ca961d5a232f78158577a33dbb3f26b","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        headers \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Network\u0027, \u0027CIDR\u0027)"},{"line_number":57,"context_line":"        columns \u003d (\u0027id\u0027, \u0027name\u0027, \u0027network_id\u0027, \u0027cidr\u0027)"},{"line_number":58,"context_line":"        if parsed_args.long:"},{"line_number":59,"context_line":"            headers +\u003d (\u0027Project\u0027, \u0027DHCP\u0027, \u0027DNS Nameservers\u0027,"},{"line_number":60,"context_line":"                        \u0027Allocation Pools\u0027, \u0027Host Routes\u0027, \u0027IP Version\u0027,"},{"line_number":61,"context_line":"                        \u0027Gateway\u0027)"},{"line_number":62,"context_line":"            columns +\u003d (\u0027tenant_id\u0027, \u0027enable_dhcp\u0027, \u0027dns_nameservers\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a68dd71_9b0dcd39","line":59,"in_reply_to":"9a68dd71_32d092c9","updated":"2016-01-26 23:33:00.000000000","message":"Informal usage is very mixed, but I didn\u0027t find \u0027nameserver\u0027 in any RFC FWIW...  Additionally, I\u0027d prefer to just see \u0027Name Servers\u0027 here (no \u0027DNS\u0027)","commit_id":"ffcfff6f3eda2cc9022b7924aa1d08739d63aaa1"}],"openstackclient/tests/common/test_parseractions.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2fbd90a90e2472533ca212aadb60847d1f664ab4","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def test_invalid_value(self):"},{"line_number":140,"context_line":"        self.assertRaises(SystemExit, self.parser.parse_args,"},{"line_number":141,"context_line":"                          [\u0027--property\u0027, \u0027purple\u003d50%\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_e9000368","line":141,"updated":"2015-02-11 19:52:54.000000000","message":"Should we also test the following values:\n- None\n- empty string\n- \u0027red,yellow\u0027\n\nDon\u0027t the two test be raising an ArgumentError instead?","commit_id":"1b721dbedeba72c90cc9b55c3c2bd3fb52ca8738"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"3b679ca7bd2f4718e95c8019db827f281bdf67c0","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def test_invalid_value(self):"},{"line_number":140,"context_line":"        self.assertRaises(SystemExit, self.parser.parse_args,"},{"line_number":141,"context_line":"                          [\u0027--property\u0027, \u0027purple\u003d50%\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_527b78bd","line":141,"in_reply_to":"da86d52c_e9000368","updated":"2015-02-11 20:57:35.000000000","message":"Done.  I think it is argparse or cliff that exits on ArguementError, so we look for SystemExit.","commit_id":"1b721dbedeba72c90cc9b55c3c2bd3fb52ca8738"}],"openstackclient/tests/network/v2/test_subnet.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5c3cfb2c9455a26417a46460f6e085062f53425b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import copy"},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from openstackclient.common import exceptions"},{"line_number":18,"context_line":"from openstackclient.network.v2 import subnet"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_8a0cce43","line":15,"updated":"2015-09-24 18:35:33.000000000","message":"mock isn\u0027t a part of the stdlib so it should be in it\u0027s own section.","commit_id":"66832ebeedfc78e64a1e0efb421701903dacba88"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"72c8785f7b1a2a477a65519a7237820bf66747ce","unresolved":false,"context_lines":[{"line_number":25,"context_line":"FAKE_GATEWAY \u003d \u002710.10.10.1\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def make_subnet():"},{"line_number":29,"context_line":"    fake_sub \u003d mock.Mock(id\u003dFAKE_ID)"},{"line_number":30,"context_line":"    fake_sub.name \u003d FAKE_NAME"},{"line_number":31,"context_line":"    fake_sub.cidr \u003d FAKE_CIDR"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a710552_4015e046","line":28,"updated":"2015-12-16 16:18:12.000000000","message":"How about adding a new FakeSubnet class to the network fakes?","commit_id":"4358a33c0a17682c3a712ced105f3e7de07c0008"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"7e2ddd55fec7f51b27898af55850c78765a8c348","unresolved":false,"context_lines":[{"line_number":25,"context_line":"FAKE_GATEWAY \u003d \u002710.10.10.1\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def make_subnet():"},{"line_number":29,"context_line":"    fake_sub \u003d mock.Mock(id\u003dFAKE_ID)"},{"line_number":30,"context_line":"    fake_sub.name \u003d FAKE_NAME"},{"line_number":31,"context_line":"    fake_sub.cidr \u003d FAKE_CIDR"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a7e1126_d8861a13","line":28,"in_reply_to":"5a710552_4015e046","updated":"2015-12-17 04:35:35.000000000","message":"+1.\n\nBut one thing to say. In the very beginning, I added a FakeServer to fake one or more servers because of the following two reason:\n1. We need a way to set a mock to emulate method in Server object so that we can test server.xxx() function.\n2. We need to fake more than one servers in server tests.\n\nThese are necessary for server tests. But it seems that in other tests, we don\u0027t need to do so. So maybe a simpler FakeSubnet class is fine.","commit_id":"4358a33c0a17682c3a712ced105f3e7de07c0008"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"ee546c090221359f06df09de759081aaa5bdabb1","unresolved":false,"context_lines":[{"line_number":25,"context_line":"FAKE_GATEWAY \u003d \u002710.10.10.1\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def make_subnet():"},{"line_number":29,"context_line":"    fake_sub \u003d mock.Mock(id\u003dFAKE_ID)"},{"line_number":30,"context_line":"    fake_sub.name \u003d FAKE_NAME"},{"line_number":31,"context_line":"    fake_sub.cidr \u003d FAKE_CIDR"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a68dd71_23224153","line":28,"updated":"2016-01-22 03:08:31.000000000","message":"For consistency, I think this should be reworked to be a FakeSubnet object in network_fakes.  Please see network and router tests.","commit_id":"4edefc9d1d81503d0f6939195213cb5fbb8a2632"}]}
