)]}'
{"quantumclient/quantum/v2_0/__init__.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"def update_dict(obj, dict, attributes):"},{"line_number":216,"context_line":"    for attribute in attributes:"},{"line_number":217,"context_line":"        if getattr(obj, attribute):"},{"line_number":218,"context_line":"            dict.update({attribute: getattr(obj, attribute)})"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlGM%3D","line":217,"updated":"2013-01-15 08:52:07.000000000","message":"Consider hasattr() here as getattr raises error if an attr does not exist","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"def update_dict(obj, dict, attributes):"},{"line_number":216,"context_line":"    for attribute in attributes:"},{"line_number":217,"context_line":"        if getattr(obj, attribute):"},{"line_number":218,"context_line":"            dict.update({attribute: getattr(obj, attribute)})"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjV4%3D","line":217,"in_reply_to":"AAAAM3%2F%2FlGM%3D","updated":"2013-01-16 12:33:16.000000000","message":"Here I need to check that attribute exists and not empty, so will replace by \nhasattr(obj, attribute) and getattr(obj, attribute)","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":215,"context_line":"def update_dict(obj, dict, attributes):"},{"line_number":216,"context_line":"    for attribute in attributes:"},{"line_number":217,"context_line":"        if getattr(obj, attribute):"},{"line_number":218,"context_line":"            dict.update({attribute: getattr(obj, attribute)})"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"class QuantumCommand(command.OpenStackCommand):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlGE%3D","line":218,"updated":"2013-01-15 08:52:07.000000000","message":"Why not just dict[attribute] \u003d obj.attribute?","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":282,"context_line":"        return {}"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def extra2body(self, extra_values):"},{"line_number":285,"context_line":"        \"\"\" Process positional arguments \"\"\""},{"line_number":286,"context_line":"        return extra_values"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def get_data(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlVA%3D","line":285,"updated":"2013-01-15 01:16:06.000000000","message":"what do u mean by this comment?","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":282,"context_line":"        return {}"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def extra2body(self, extra_values):"},{"line_number":285,"context_line":"        \"\"\" Process positional arguments \"\"\""},{"line_number":286,"context_line":"        return extra_values"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def get_data(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjVY%3D","line":285,"in_reply_to":"AAAAM3%2F%2FlVA%3D","updated":"2013-01-16 12:33:16.000000000","message":"just wanted to add a note what this function do; that it processes positional arguments and not optional (in terms of cliff library positional go at the end of the command)","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":325,"context_line":"        return parser"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def extra2body(self, values):"},{"line_number":328,"context_line":"        \"\"\" Process positional arguments \"\"\""},{"line_number":329,"context_line":"        return values"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def run(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlU8%3D","line":328,"updated":"2013-01-15 01:16:06.000000000","message":"ditto.","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def extra2body(self, values):"},{"line_number":328,"context_line":"        \"\"\" Process positional arguments \"\"\""},{"line_number":329,"context_line":"        return values"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def run(self, parsed_args):"},{"line_number":332,"context_line":"        self.log.debug(\u0027run(%s)\u0027 % parsed_args)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FfxY%3D","line":329,"updated":"2013-01-18 14:38:28.000000000","message":"override not needed for extra2body","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def extra2body(self, values):"},{"line_number":328,"context_line":"        \"\"\" Process positional arguments \"\"\""},{"line_number":329,"context_line":"        return values"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def run(self, parsed_args):"},{"line_number":332,"context_line":"        self.log.debug(\u0027run(%s)\u0027 % parsed_args)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Fev0%3D","line":329,"in_reply_to":"AAAAM3%2F%2Ffpk%3D","updated":"2013-01-19 17:48:15.000000000","message":"It would be better to keep consistency in argument name  between CreateCommand and UpdateCommand: extra_values in CreateCommand and values in UpdateCommnad.\n\nQuantumCommand does not define extra2body so it is not a override.","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def extra2body(self, values):"},{"line_number":328,"context_line":"        \"\"\" Process positional arguments \"\"\""},{"line_number":329,"context_line":"        return values"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def run(self, parsed_args):"},{"line_number":332,"context_line":"        self.log.debug(\u0027run(%s)\u0027 % parsed_args)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Fehg%3D","line":329,"in_reply_to":"AAAAM3%2F%2Ffpk%3D","updated":"2013-01-20 10:46:16.000000000","message":"My bad, I thought you defined it in QuantumCommand as well.","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def extra2body(self, values):"},{"line_number":328,"context_line":"        \"\"\" Process positional arguments \"\"\""},{"line_number":329,"context_line":"        return values"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def run(self, parsed_args):"},{"line_number":332,"context_line":"        self.log.debug(\u0027run(%s)\u0027 % parsed_args)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Ffpk%3D","line":329,"in_reply_to":"AAAAM3%2F%2FfxY%3D","updated":"2013-01-18 16:23:35.000000000","message":"What do you mean? This method is from UpdateCommand and does the same as in CreateCommand, it handles positional args and in particular used to group session-persistence params into sub-dictionary.","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"}],"quantumclient/quantum/v2_0/lb/healthmonitor.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"929c73d79590df68e6834c58a4ba830516949164","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                 \u0027beginning with a / (forward slash)\u0027)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def args2body(self, parsed_args):"},{"line_number":89,"context_line":"        body \u003d {\u0027health_monitor\u0027: {"},{"line_number":90,"context_line":"            \u0027admin_state_up\u0027: parsed_args.admin_state_down,"},{"line_number":91,"context_line":"            \u0027delay\u0027: parsed_args.delay,"},{"line_number":92,"context_line":"            \u0027max_retries\u0027: parsed_args.max_retries,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6Rw%3D","line":89,"updated":"2012-12-21 11:37:16.000000000","message":"self.resource instead of \u0027health_monitor\u0027 here and below","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":86,"context_line":"                 \u0027beginning with a / (forward slash)\u0027)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def args2body(self, parsed_args):"},{"line_number":89,"context_line":"        body \u003d {\u0027health_monitor\u0027: {"},{"line_number":90,"context_line":"            \u0027admin_state_up\u0027: parsed_args.admin_state_down,"},{"line_number":91,"context_line":"            \u0027delay\u0027: parsed_args.delay,"},{"line_number":92,"context_line":"            \u0027max_retries\u0027: parsed_args.max_retries,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FqdI%3D","line":89,"in_reply_to":"AAAAM3%2F%2F6Rw%3D","updated":"2013-01-14 11:23:48.000000000","message":"Done","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":20,"context_line":"import logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from quantumclient.quantum import v2_0 as quantumv20"},{"line_number":23,"context_line":"from quantumclient.quantum.v2_0 import QuantumCommand, update_dict"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ListHealthMonitor(quantumv20.ListCommand):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlYQ%3D","line":23,"updated":"2013-01-15 01:16:06.000000000","message":"delete the direct import class or method. above import is enough.","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":20,"context_line":"import logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from quantumclient.quantum import v2_0 as quantumv20"},{"line_number":23,"context_line":"from quantumclient.quantum.v2_0 import QuantumCommand, update_dict"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ListHealthMonitor(quantumv20.ListCommand):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjVQ%3D","line":23,"in_reply_to":"AAAAM3%2F%2FlYQ%3D","updated":"2013-01-16 12:33:16.000000000","message":"Done","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":97,"context_line":"                \u0027type\u0027: parsed_args.type,"},{"line_number":98,"context_line":"            },"},{"line_number":99,"context_line":"        }"},{"line_number":100,"context_line":"        update_dict(parsed_args, body[self.resource],"},{"line_number":101,"context_line":"                    [\u0027expected_codes\u0027, \u0027http_method\u0027, \u0027url_path\u0027, \u0027tenant_id\u0027])"},{"line_number":102,"context_line":"        return body"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlYI%3D","line":100,"updated":"2013-01-15 01:16:06.000000000","message":"quantumV20.update_dict","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":97,"context_line":"                \u0027type\u0027: parsed_args.type,"},{"line_number":98,"context_line":"            },"},{"line_number":99,"context_line":"        }"},{"line_number":100,"context_line":"        update_dict(parsed_args, body[self.resource],"},{"line_number":101,"context_line":"                    [\u0027expected_codes\u0027, \u0027http_method\u0027, \u0027url_path\u0027, \u0027tenant_id\u0027])"},{"line_number":102,"context_line":"        return body"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjVM%3D","line":100,"in_reply_to":"AAAAM3%2F%2FlYI%3D","updated":"2013-01-16 12:33:16.000000000","message":"Done","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":115,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DeleteHealthMonitor\u0027)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class AssociateHealthMonitor(QuantumCommand):"},{"line_number":119,"context_line":"    \"\"\"Create a mapping between a health monitor and a pool.\"\"\""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.AssociateHealthMonitor\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlYM%3D","line":118,"updated":"2013-01-15 01:16:06.000000000","message":"quantumv20.QuantumCommand","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":115,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DeleteHealthMonitor\u0027)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class AssociateHealthMonitor(QuantumCommand):"},{"line_number":119,"context_line":"    \"\"\"Create a mapping between a health monitor and a pool.\"\"\""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.AssociateHealthMonitor\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjVI%3D","line":118,"in_reply_to":"AAAAM3%2F%2FlYM%3D","updated":"2013-01-16 12:33:16.000000000","message":"Done","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":139,"context_line":"        quantum_client.format \u003d parsed_args.request_format"},{"line_number":140,"context_line":"        body \u003d {\u0027health_monitor\u0027: {\u0027id\u0027: parsed_args.health_monitor_id,"},{"line_number":141,"context_line":"                                   \u0027tenant_id\u0027: parsed_args.tenant_id}}"},{"line_number":142,"context_line":"        quantum_client.associate_health_monitor(parsed_args.pool_id, body)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class DisassociateHealthMonitor(QuantumCommand):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlX0%3D","line":142,"updated":"2013-01-15 01:16:06.000000000","message":"Other commands all use get_parser() and run() pattern, can u use it too? We print out something to represent success at the end of run() too.","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":139,"context_line":"        quantum_client.format \u003d parsed_args.request_format"},{"line_number":140,"context_line":"        body \u003d {\u0027health_monitor\u0027: {\u0027id\u0027: parsed_args.health_monitor_id,"},{"line_number":141,"context_line":"                                   \u0027tenant_id\u0027: parsed_args.tenant_id}}"},{"line_number":142,"context_line":"        quantum_client.associate_health_monitor(parsed_args.pool_id, body)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class DisassociateHealthMonitor(QuantumCommand):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjUg%3D","line":142,"in_reply_to":"AAAAM3%2F%2FlX0%3D","updated":"2013-01-16 12:33:16.000000000","message":"Done","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":142,"context_line":"        quantum_client.associate_health_monitor(parsed_args.pool_id, body)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class DisassociateHealthMonitor(QuantumCommand):"},{"line_number":146,"context_line":"    \"\"\"Remove a mapping from a health monitor to a pool.\"\"\""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DisassociateHealthMonitor\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlXg%3D","line":145,"updated":"2013-01-15 01:16:06.000000000","message":"quantumV20","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":142,"context_line":"        quantum_client.associate_health_monitor(parsed_args.pool_id, body)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class DisassociateHealthMonitor(QuantumCommand):"},{"line_number":146,"context_line":"    \"\"\"Remove a mapping from a health monitor to a pool.\"\"\""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DisassociateHealthMonitor\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjVE%3D","line":145,"in_reply_to":"AAAAM3%2F%2FlXg%3D","updated":"2013-01-16 12:33:16.000000000","message":"Done","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":161,"context_line":"    def get_data(self, parsed_args):"},{"line_number":162,"context_line":"        quantum_client \u003d self.get_client()"},{"line_number":163,"context_line":"        quantum_client.format \u003d parsed_args.request_format"},{"line_number":164,"context_line":"        quantum_client.disassociate_health_monitor(parsed_args.pool_id,"},{"line_number":165,"context_line":"                                                   parsed_args"},{"line_number":166,"context_line":"                                                   .health_monitor_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlXw%3D","line":164,"updated":"2013-01-15 01:16:06.000000000","message":"ditto","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":161,"context_line":"    def get_data(self, parsed_args):"},{"line_number":162,"context_line":"        quantum_client \u003d self.get_client()"},{"line_number":163,"context_line":"        quantum_client.format \u003d parsed_args.request_format"},{"line_number":164,"context_line":"        quantum_client.disassociate_health_monitor(parsed_args.pool_id,"},{"line_number":165,"context_line":"                                                   parsed_args"},{"line_number":166,"context_line":"                                                   .health_monitor_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjUc%3D","line":164,"in_reply_to":"AAAAM3%2F%2FlXw%3D","updated":"2013-01-16 12:33:16.000000000","message":"Done","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":69,"context_line":"            \u0027--max-retries\u0027,"},{"line_number":70,"context_line":"            required\u003dTrue,"},{"line_number":71,"context_line":"            help\u003d\u0027number of permissible connection failures before changing \u0027"},{"line_number":72,"context_line":"                 \u0027the member\\\u0027s status to INACTIVE.\u0027)"},{"line_number":73,"context_line":"        parser.add_argument("},{"line_number":74,"context_line":"            \u0027--timeout\u0027,"},{"line_number":75,"context_line":"            required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FfxQ%3D","line":72,"updated":"2013-01-18 14:38:28.000000000","message":"not sure about our convention on use of backslashes.\n\nAlternatively, wrap with double quotes.\nNo need to address - I\u0027m happy to approve with the backslash","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":69,"context_line":"            \u0027--max-retries\u0027,"},{"line_number":70,"context_line":"            required\u003dTrue,"},{"line_number":71,"context_line":"            help\u003d\u0027number of permissible connection failures before changing \u0027"},{"line_number":72,"context_line":"                 \u0027the member\\\u0027s status to INACTIVE.\u0027)"},{"line_number":73,"context_line":"        parser.add_argument("},{"line_number":74,"context_line":"            \u0027--timeout\u0027,"},{"line_number":75,"context_line":"            required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Fev8%3D","line":72,"in_reply_to":"AAAAM3%2F%2FfpM%3D","updated":"2013-01-19 17:48:15.000000000","message":"+1 to quota double quotes and remove backslashes","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":69,"context_line":"            \u0027--max-retries\u0027,"},{"line_number":70,"context_line":"            required\u003dTrue,"},{"line_number":71,"context_line":"            help\u003d\u0027number of permissible connection failures before changing \u0027"},{"line_number":72,"context_line":"                 \u0027the member\\\u0027s status to INACTIVE.\u0027)"},{"line_number":73,"context_line":"        parser.add_argument("},{"line_number":74,"context_line":"            \u0027--timeout\u0027,"},{"line_number":75,"context_line":"            required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FfpM%3D","line":72,"in_reply_to":"AAAAM3%2F%2FfxQ%3D","updated":"2013-01-18 16:23:35.000000000","message":"Well, I\u0027m not always sure what form is correct \"member\u0027s status\" or \"member status\". But I grep\u0027d over the project and found \\\u0027 only in my code. Will remove slash and quote.","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":125,"context_line":"        parser \u003d super(AssociateHealthMonitor, self).get_parser(prog_name)"},{"line_number":126,"context_line":"        parser.add_argument("},{"line_number":127,"context_line":"            \u0027--tenant-id\u0027, metavar\u003d\u0027tenant-id\u0027,"},{"line_number":128,"context_line":"            help\u003d_(\u0027the owner tenant ID\u0027), )"},{"line_number":129,"context_line":"        parser.add_argument("},{"line_number":130,"context_line":"            \u0027health_monitor_id\u0027,"},{"line_number":131,"context_line":"            help\u003d\u0027Health monitor to associate\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FfxA%3D","line":128,"updated":"2013-01-18 14:38:28.000000000","message":"What is the purpose of the tenant_id parameter?\nCan the association have an owner different from the owner of the monitor and the pool?\n\nThe plugin interface does not give away details, but the db implementation creates a PoolMonitorAssociation without using the tenant_id.","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":125,"context_line":"        parser \u003d super(AssociateHealthMonitor, self).get_parser(prog_name)"},{"line_number":126,"context_line":"        parser.add_argument("},{"line_number":127,"context_line":"            \u0027--tenant-id\u0027, metavar\u003d\u0027tenant-id\u0027,"},{"line_number":128,"context_line":"            help\u003d_(\u0027the owner tenant ID\u0027), )"},{"line_number":129,"context_line":"        parser.add_argument("},{"line_number":130,"context_line":"            \u0027health_monitor_id\u0027,"},{"line_number":131,"context_line":"            help\u003d\u0027Health monitor to associate\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Ffos%3D","line":128,"in_reply_to":"AAAAM3%2F%2FfxA%3D","updated":"2013-01-18 16:23:35.000000000","message":"Agree, \u0027tenant-id\u0027 is not needed since both objects already belong to some tenant.","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"}],"quantumclient/quantum/v2_0/lb/member.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"929c73d79590df68e6834c58a4ba830516949164","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    def args2body(self, parsed_args):"},{"line_number":66,"context_line":"        _pool_id \u003d quantumv20.find_resourceid_by_name_or_id("},{"line_number":67,"context_line":"            self.get_client(), \u0027pool\u0027, parsed_args.pool_id)"},{"line_number":68,"context_line":"        body \u003d {\u0027member\u0027: {"},{"line_number":69,"context_line":"            \u0027pool_id\u0027: _pool_id,"},{"line_number":70,"context_line":"            \u0027admin_state_up\u0027: parsed_args.admin_state_down}}"},{"line_number":71,"context_line":"        if parsed_args.address:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6Rg%3D","line":68,"updated":"2012-12-21 11:37:16.000000000","message":"self.resource","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":65,"context_line":"    def args2body(self, parsed_args):"},{"line_number":66,"context_line":"        _pool_id \u003d quantumv20.find_resourceid_by_name_or_id("},{"line_number":67,"context_line":"            self.get_client(), \u0027pool\u0027, parsed_args.pool_id)"},{"line_number":68,"context_line":"        body \u003d {\u0027member\u0027: {"},{"line_number":69,"context_line":"            \u0027pool_id\u0027: _pool_id,"},{"line_number":70,"context_line":"            \u0027admin_state_up\u0027: parsed_args.admin_state_down}}"},{"line_number":71,"context_line":"        if parsed_args.address:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FqdA%3D","line":68,"in_reply_to":"AAAAM3%2F%2F6Rg%3D","updated":"2013-01-14 11:23:48.000000000","message":"Done","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":20,"context_line":"import logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from quantumclient.quantum import v2_0 as quantumv20"},{"line_number":23,"context_line":"from quantumclient.quantum.v2_0 import update_dict"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ListMember(quantumv20.ListCommand):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlWc%3D","line":23,"updated":"2013-01-15 01:16:06.000000000","message":"we can use quantumV20.update_dict to access it. no need to import the method directly.","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":20,"context_line":"import logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from quantumclient.quantum import v2_0 as quantumv20"},{"line_number":23,"context_line":"from quantumclient.quantum.v2_0 import update_dict"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ListMember(quantumv20.ListCommand):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjUY%3D","line":23,"in_reply_to":"AAAAM3%2F%2FlWc%3D","updated":"2013-01-16 12:33:16.000000000","message":"Done","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"}],"quantumclient/quantum/v2_0/lb/pool.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"dbdb1fb1f6d72b3f11582a5990cb4d61f5502b32","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    resource \u003d \u0027pool\u0027"},{"line_number":43,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.CreatePool\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def add_known_arguments(self, parser):"},{"line_number":46,"context_line":"        parser.add_argument("},{"line_number":47,"context_line":"            \u0027--admin-state-down\u0027,"},{"line_number":48,"context_line":"            default\u003dTrue, action\u003d\u0027store_false\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F7bA%3D","line":45,"updated":"2012-12-20 10:39:02.000000000","message":"Please add \"health_monitors\" argument to let user create/update the whole list of health monitors of a pool","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":42,"context_line":"    resource \u003d \u0027pool\u0027"},{"line_number":43,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.CreatePool\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def add_known_arguments(self, parser):"},{"line_number":46,"context_line":"        parser.add_argument("},{"line_number":47,"context_line":"            \u0027--admin-state-down\u0027,"},{"line_number":48,"context_line":"            default\u003dTrue, action\u003d\u0027store_false\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FmsU%3D","line":45,"in_reply_to":"AAAAM3%2F%2F7bA%3D","updated":"2013-01-14 11:23:48.000000000","message":"This can be achieved by specifying positional argument \u0027--health_monitors\u0027, ex: \u0027lb-pool-create (mandatory args) -- --health_monitors \u003cid1\u003e \u003cid2\u003e...\u0027 Note that the list can be sent only via positional argument, not via optional.","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"929c73d79590df68e6834c58a4ba830516949164","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        parser.add_argument("},{"line_number":67,"context_line":"            \u0027--subnet-id\u0027,"},{"line_number":68,"context_line":"            required\u003dTrue,"},{"line_number":69,"context_line":"            help\u003d\u0027the subnet on which to allocate the pool\\\u0027s address\u0027)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def args2body(self, parsed_args):"},{"line_number":72,"context_line":"        body \u003d {\u0027pool\u0027: {\u0027admin_state_up\u0027: parsed_args.admin_state_down}}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6Qw%3D","line":69,"updated":"2012-12-21 11:37:16.000000000","message":"this message needs to be aligned with vip\u0027s subnet-id.\nFor ex: \u0027the subnet which the pool belongs to\u0027","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":66,"context_line":"        parser.add_argument("},{"line_number":67,"context_line":"            \u0027--subnet-id\u0027,"},{"line_number":68,"context_line":"            required\u003dTrue,"},{"line_number":69,"context_line":"            help\u003d\u0027the subnet on which to allocate the pool\\\u0027s address\u0027)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def args2body(self, parsed_args):"},{"line_number":72,"context_line":"        body \u003d {\u0027pool\u0027: {\u0027admin_state_up\u0027: parsed_args.admin_state_down}}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FmuE%3D","line":69,"in_reply_to":"AAAAM3%2F%2F6Qw%3D","updated":"2013-01-14 11:23:48.000000000","message":"Done","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"929c73d79590df68e6834c58a4ba830516949164","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            help\u003d\u0027the subnet on which to allocate the pool\\\u0027s address\u0027)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def args2body(self, parsed_args):"},{"line_number":72,"context_line":"        body \u003d {\u0027pool\u0027: {\u0027admin_state_up\u0027: parsed_args.admin_state_down}}"},{"line_number":73,"context_line":"        if parsed_args.description:"},{"line_number":74,"context_line":"            body[\u0027pool\u0027].update({\u0027description\u0027: parsed_args.description})"},{"line_number":75,"context_line":"        if parsed_args.lb_method:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6Q8%3D","line":72,"updated":"2012-12-21 11:37:16.000000000","message":"self.resource","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":69,"context_line":"            help\u003d\u0027the subnet on which to allocate the pool\\\u0027s address\u0027)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def args2body(self, parsed_args):"},{"line_number":72,"context_line":"        body \u003d {\u0027pool\u0027: {\u0027admin_state_up\u0027: parsed_args.admin_state_down}}"},{"line_number":73,"context_line":"        if parsed_args.description:"},{"line_number":74,"context_line":"            body[\u0027pool\u0027].update({\u0027description\u0027: parsed_args.description})"},{"line_number":75,"context_line":"        if parsed_args.lb_method:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fqc4%3D","line":72,"in_reply_to":"AAAAM3%2F%2F6Q8%3D","updated":"2013-01-14 11:23:48.000000000","message":"Done","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":20,"context_line":"import logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from quantumclient.quantum import v2_0 as quantumv20"},{"line_number":23,"context_line":"from quantumclient.quantum.v2_0 import update_dict"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ListPool(quantumv20.ListCommand):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlWM%3D","line":23,"updated":"2013-01-15 01:16:06.000000000","message":"remove this import","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":20,"context_line":"import logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from quantumclient.quantum import v2_0 as quantumv20"},{"line_number":23,"context_line":"from quantumclient.quantum.v2_0 import update_dict"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ListPool(quantumv20.ListCommand):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjUU%3D","line":23,"in_reply_to":"AAAAM3%2F%2FlWM%3D","updated":"2013-01-16 12:33:16.000000000","message":"Done","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":"        }"},{"line_number":81,"context_line":"        quantumv20.update_dict(parsed_args, body[self.resource],"},{"line_number":82,"context_line":"                               [\u0027description\u0027, \u0027lb_method\u0027, \u0027name\u0027,"},{"line_number":83,"context_line":"                                \u0027subnet_id\u0027, \u0027protocol\u0027, \u0027tenant_id\u0027])"},{"line_number":84,"context_line":"        return body"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FfwY%3D","line":83,"updated":"2013-01-18 14:38:28.000000000","message":"perhaps replace the above literal with \u0027self.args\u0027 defined at line 45 or remove args","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":"        }"},{"line_number":81,"context_line":"        quantumv20.update_dict(parsed_args, body[self.resource],"},{"line_number":82,"context_line":"                               [\u0027description\u0027, \u0027lb_method\u0027, \u0027name\u0027,"},{"line_number":83,"context_line":"                                \u0027subnet_id\u0027, \u0027protocol\u0027, \u0027tenant_id\u0027])"},{"line_number":84,"context_line":"        return body"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FehU%3D","line":83,"in_reply_to":"AAAAM3%2F%2Ffs8%3D","updated":"2013-01-20 10:46:16.000000000","message":"Yes, that\u0027s equivalently good for me.","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":"        }"},{"line_number":81,"context_line":"        quantumv20.update_dict(parsed_args, body[self.resource],"},{"line_number":82,"context_line":"                               [\u0027description\u0027, \u0027lb_method\u0027, \u0027name\u0027,"},{"line_number":83,"context_line":"                                \u0027subnet_id\u0027, \u0027protocol\u0027, \u0027tenant_id\u0027])"},{"line_number":84,"context_line":"        return body"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Ffs8%3D","line":83,"in_reply_to":"AAAAM3%2F%2FfwY%3D","updated":"2013-01-18 16:23:35.000000000","message":"Good catch! At some point I planned to add similar \u0027args\u0027 lists to all CreateN classes, but forgot. It would be more readable if I keep parameters here and remove variable.","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"}],"quantumclient/quantum/v2_0/lb/vip.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"929c73d79590df68e6834c58a4ba830516949164","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    def args2body(self, parsed_args):"},{"line_number":82,"context_line":"        _pool_id \u003d quantumv20.find_resourceid_by_name_or_id("},{"line_number":83,"context_line":"            self.get_client(), \u0027pool\u0027, parsed_args.pool_id)"},{"line_number":84,"context_line":"        body \u003d {\u0027vip\u0027: {"},{"line_number":85,"context_line":"            \u0027pool_id\u0027: _pool_id,"},{"line_number":86,"context_line":"            \u0027admin_state_up\u0027: parsed_args.admin_state_down}}"},{"line_number":87,"context_line":"        if parsed_args.connection_limit:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6Qs%3D","line":84,"updated":"2012-12-21 11:37:16.000000000","message":"self.resource","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"    def args2body(self, parsed_args):"},{"line_number":82,"context_line":"        _pool_id \u003d quantumv20.find_resourceid_by_name_or_id("},{"line_number":83,"context_line":"            self.get_client(), \u0027pool\u0027, parsed_args.pool_id)"},{"line_number":84,"context_line":"        body \u003d {\u0027vip\u0027: {"},{"line_number":85,"context_line":"            \u0027pool_id\u0027: _pool_id,"},{"line_number":86,"context_line":"            \u0027admin_state_up\u0027: parsed_args.admin_state_down}}"},{"line_number":87,"context_line":"        if parsed_args.connection_limit:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FqXw%3D","line":84,"in_reply_to":"AAAAM3%2F%2F6Qs%3D","updated":"2013-01-14 11:23:48.000000000","message":"Done","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"929c73d79590df68e6834c58a4ba830516949164","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        body \u003d {\u0027vip\u0027: {"},{"line_number":85,"context_line":"            \u0027pool_id\u0027: _pool_id,"},{"line_number":86,"context_line":"            \u0027admin_state_up\u0027: parsed_args.admin_state_down}}"},{"line_number":87,"context_line":"        if parsed_args.connection_limit:"},{"line_number":88,"context_line":"            body[\u0027vip\u0027].update("},{"line_number":89,"context_line":"                {\u0027connection_limit\u0027: parsed_args.connection_limit})"},{"line_number":90,"context_line":"        if parsed_args.description:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6Qk%3D","line":87,"updated":"2012-12-21 11:37:16.000000000","message":"looks like this and other similar pieces of code are subject to refactoring to some \"make_dict(parsed_args, filter)\" which will iterate over fields of parsed_args except those in filters.","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":84,"context_line":"        body \u003d {\u0027vip\u0027: {"},{"line_number":85,"context_line":"            \u0027pool_id\u0027: _pool_id,"},{"line_number":86,"context_line":"            \u0027admin_state_up\u0027: parsed_args.admin_state_down}}"},{"line_number":87,"context_line":"        if parsed_args.connection_limit:"},{"line_number":88,"context_line":"            body[\u0027vip\u0027].update("},{"line_number":89,"context_line":"                {\u0027connection_limit\u0027: parsed_args.connection_limit})"},{"line_number":90,"context_line":"        if parsed_args.description:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FmsQ%3D","line":87,"in_reply_to":"AAAAM3%2F%2F6Qk%3D","updated":"2013-01-14 11:23:48.000000000","message":"Done","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":115,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DeleteVip\u0027)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"def process_session_persistence(values):"},{"line_number":119,"context_line":"    body \u003d {}"},{"line_number":120,"context_line":"    session_persistence \u003d {}"},{"line_number":121,"context_line":"    other \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FfvM%3D","line":118,"updated":"2013-01-18 14:38:28.000000000","message":"It seems you can avoid using session_persistence and other local variables, but operate directly on body (or maybe even values).\n\nFor instance in values.iteritems() cycle you could always set a key in \u0027body\u0027:\n\n       if attr.startswith(\u0027session_persistence\u0027):\n             attr \u003d attr[20:].replace(\u0027-\u0027, \u0027_\u0027)\n       body.update({attr: value})","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":115,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DeleteVip\u0027)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"def process_session_persistence(values):"},{"line_number":119,"context_line":"    body \u003d {}"},{"line_number":120,"context_line":"    session_persistence \u003d {}"},{"line_number":121,"context_line":"    other \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Ffog%3D","line":118,"in_reply_to":"AAAAM3%2F%2FfvM%3D","updated":"2013-01-18 16:23:35.000000000","message":"Good point. \u0027other\u0027 is not needed, since it collects attributes that go directly into \u0027body\u0027, but \u0027session-persistence\u0027 collects for sub-dictionary and needs to be set only if has some items.","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":121,"context_line":"    other \u003d {}"},{"line_number":122,"context_line":"    for attr, value in values.iteritems():"},{"line_number":123,"context_line":"        if attr.startswith(\u0027session_persistence\u0027):"},{"line_number":124,"context_line":"            attr_replaced \u003d attr[20:].replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":125,"context_line":"            session_persistence.update({attr_replaced: value})"},{"line_number":126,"context_line":"        else:"},{"line_number":127,"context_line":"            other.update({attr: value})"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FfvU%3D","line":124,"updated":"2013-01-18 14:38:28.000000000","message":"maintanability nit. Create a const with for \u0027session_persistence\u0027 and use its len instead of literal \u002720\u0027","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":121,"context_line":"    other \u003d {}"},{"line_number":122,"context_line":"    for attr, value in values.iteritems():"},{"line_number":123,"context_line":"        if attr.startswith(\u0027session_persistence\u0027):"},{"line_number":124,"context_line":"            attr_replaced \u003d attr[20:].replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":125,"context_line":"            session_persistence.update({attr_replaced: value})"},{"line_number":126,"context_line":"        else:"},{"line_number":127,"context_line":"            other.update({attr: value})"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FftM%3D","line":124,"in_reply_to":"AAAAM3%2F%2FfvU%3D","updated":"2013-01-18 16:23:35.000000000","message":"Done","commit_id":"8d3909fec4f333be06997d45ab3efc5b44acc805"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":105,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.UpdateVip\u0027)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def extra2body(self, extra_values):"},{"line_number":108,"context_line":"        return process_session_persistence(extra_values)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class DeleteVip(quantumv20.DeleteCommand):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2FeGo%3D","line":108,"updated":"2013-01-21 09:52:43.000000000","message":"IMO, u are moving attr with session_persistence to \u0027session_persistence\u0027:\nso if I run quantum updateVip vip_id --session_persistence_x 3, the body should not contain the  session_persistence:x any more. right?\n\nwhy not use updateVip vip_id --sersion-persistence type\u003dy,xx\u003dz? I think quantum client should have supported it already.","commit_id":"19f02d93e6f5eb55fda9005a8778d7daad3f91d9"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":105,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.UpdateVip\u0027)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def extra2body(self, extra_values):"},{"line_number":108,"context_line":"        return process_session_persistence(extra_values)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class DeleteVip(quantumv20.DeleteCommand):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2FeCM%3D","line":108,"in_reply_to":"AAAAM3%2F%2FeGo%3D","updated":"2013-01-21 11:34:17.000000000","message":"Initially I tried to implement the processing using type specification, but it didn\u0027t work. Now it\u0027s ok and I will use it. \n\nJust to verify that I understand correctly, in order to get { \"session-persistence\": { \"type\": \"cookie\", \"cookie_name\": \"test\"} } we can call \"lb-vip-update --session-persistence type\u003ddict cookie_name\u003dFoo,type\u003dcookie\". \n\nThe only issue here is when we need an attribute with name \"type\" - in that case parse_args_to_dict threats it as type specification, not an argument. I will check how this can be fixed.","commit_id":"19f02d93e6f5eb55fda9005a8778d7daad3f91d9"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return body"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def process_body(self, body):"},{"line_number":100,"context_line":"        process_session_persistence(body[self.resource])"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"class UpdateVip(quantumv20.UpdateCommand):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2Fcak%3D","line":100,"updated":"2013-01-22 11:15:47.000000000","message":"Session persistence is set by argument \u0027session-persistence\u0027, ex: \u0027--session-persistence type\u003ddict persistence_type\u003dcookie,cookie_name\u003dpie\u0027. In API the type of persistence is set by attribute \u0027type\u0027, however for the client word \u0027type\u0027 is reserved. That\u0027s why we need to process the whole body and map session_persistence.persistence_type into session_persistence.type.","commit_id":"414786db87d939a3cdfff289a3d085e3a82be35f"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return body"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def process_body(self, body):"},{"line_number":100,"context_line":"        process_session_persistence(body[self.resource])"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"class UpdateVip(quantumv20.UpdateCommand):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FaFA%3D","line":100,"in_reply_to":"AAAAM3%2F%2FbEI%3D","updated":"2013-01-23 18:26:37.000000000","message":"i tried this approach, but decided that the command like \u0027--session-persistence type\u003ddict type\u003dcookie\u0027 looks a bit tangled.\nhowever, if you are ok with that, i will re-implement via parse_args_to_dict","commit_id":"414786db87d939a3cdfff289a3d085e3a82be35f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return body"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def process_body(self, body):"},{"line_number":100,"context_line":"        process_session_persistence(body[self.resource])"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"class UpdateVip(quantumv20.UpdateCommand):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FbEI%3D","line":100,"in_reply_to":"AAAAM3%2F%2Fcak%3D","updated":"2013-01-23 03:08:35.000000000","message":"1. u can modify def parse_args_to_dict(values_specs): so that it will deal with the first type\u003ddict as type, and the nexts are value.\n2. u can remove process_body() method after that.","commit_id":"414786db87d939a3cdfff289a3d085e3a82be35f"}],"quantumclient/tests/unit/lb/test_cli20_healthmonitor.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import sys"},{"line_number":19,"context_line":"from mox import ContainsKeyValue"},{"line_number":20,"context_line":"from quantumclient.quantum.v2_0.lb import healthmonitor"},{"line_number":21,"context_line":"from quantumclient.tests.unit import test_cli20"},{"line_number":22,"context_line":"from quantumclient.tests.unit.test_cli20 import end_url, MyComparator,\\"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlVU%3D","line":19,"updated":"2013-01-15 01:16:06.000000000","message":"add a blank line before and after line 19.","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import sys"},{"line_number":19,"context_line":"from mox import ContainsKeyValue"},{"line_number":20,"context_line":"from quantumclient.quantum.v2_0.lb import healthmonitor"},{"line_number":21,"context_line":"from quantumclient.tests.unit import test_cli20"},{"line_number":22,"context_line":"from quantumclient.tests.unit.test_cli20 import end_url, MyComparator,\\"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjUQ%3D","line":19,"in_reply_to":"AAAAM3%2F%2FlVU%3D","updated":"2013-01-16 12:33:16.000000000","message":"Done","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":20,"context_line":"from quantumclient.quantum.v2_0.lb import healthmonitor"},{"line_number":21,"context_line":"from quantumclient.tests.unit import test_cli20"},{"line_number":22,"context_line":"from quantumclient.tests.unit.test_cli20 import end_url, MyComparator,\\"},{"line_number":23,"context_line":"    TOKEN, MyResp"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class CLITestV20LbHealthmonitor(test_cli20.CLITestV20Base):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlVs%3D","line":23,"updated":"2013-01-15 01:16:06.000000000","message":"can we use the module level import?","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":20,"context_line":"from quantumclient.quantum.v2_0.lb import healthmonitor"},{"line_number":21,"context_line":"from quantumclient.tests.unit import test_cli20"},{"line_number":22,"context_line":"from quantumclient.tests.unit.test_cli20 import end_url, MyComparator,\\"},{"line_number":23,"context_line":"    TOKEN, MyResp"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class CLITestV20LbHealthmonitor(test_cli20.CLITestV20Base):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjUM%3D","line":23,"in_reply_to":"AAAAM3%2F%2FlVs%3D","updated":"2013-01-16 12:33:16.000000000","message":"Done","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"}],"quantumclient/tests/unit/lb/test_cli20_member.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import sys"},{"line_number":19,"context_line":"from quantumclient.quantum.v2_0.lb import member"},{"line_number":20,"context_line":"from quantumclient.tests.unit import test_cli20"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlVg%3D","line":18,"updated":"2013-01-15 01:16:06.000000000","message":"leave a line after line 18.","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import sys"},{"line_number":19,"context_line":"from quantumclient.quantum.v2_0.lb import member"},{"line_number":20,"context_line":"from quantumclient.tests.unit import test_cli20"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjUA%3D","line":18,"in_reply_to":"AAAAM3%2F%2FlVg%3D","updated":"2013-01-16 12:33:16.000000000","message":"Done","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"}],"quantumclient/tests/unit/lb/test_cli20_pool.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import sys"},{"line_number":19,"context_line":"from mox import ContainsKeyValue"},{"line_number":20,"context_line":"from quantumclient.quantum.v2_0.lb import pool"},{"line_number":21,"context_line":"from quantumclient.tests.unit import test_cli20"},{"line_number":22,"context_line":"from quantumclient.tests.unit.test_cli20 import end_url, TOKEN, MyResp"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlVk%3D","line":19,"updated":"2013-01-15 01:16:06.000000000","message":"add bland line before line 19 and after line 19. third party lib should be in its own section.","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import sys"},{"line_number":19,"context_line":"from mox import ContainsKeyValue"},{"line_number":20,"context_line":"from quantumclient.quantum.v2_0.lb import pool"},{"line_number":21,"context_line":"from quantumclient.tests.unit import test_cli20"},{"line_number":22,"context_line":"from quantumclient.tests.unit.test_cli20 import end_url, TOKEN, MyResp"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjT4%3D","line":19,"in_reply_to":"AAAAM3%2F%2FlVk%3D","updated":"2013-01-16 12:33:16.000000000","message":"Done","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"from mox import ContainsKeyValue"},{"line_number":20,"context_line":"from quantumclient.quantum.v2_0.lb import pool"},{"line_number":21,"context_line":"from quantumclient.tests.unit import test_cli20"},{"line_number":22,"context_line":"from quantumclient.tests.unit.test_cli20 import end_url, TOKEN, MyResp"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class CLITestV20LbPool(test_cli20.CLITestV20Base):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlVo%3D","line":22,"updated":"2013-01-15 01:16:06.000000000","message":"use module level import.","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"from mox import ContainsKeyValue"},{"line_number":20,"context_line":"from quantumclient.quantum.v2_0.lb import pool"},{"line_number":21,"context_line":"from quantumclient.tests.unit import test_cli20"},{"line_number":22,"context_line":"from quantumclient.tests.unit.test_cli20 import end_url, TOKEN, MyResp"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class CLITestV20LbPool(test_cli20.CLITestV20Base):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FjT8%3D","line":22,"in_reply_to":"AAAAM3%2F%2FlVo%3D","updated":"2013-01-16 12:33:16.000000000","message":"Done","commit_id":"5f8c8eb6d254e9842a71838aa115840f08ba6a10"}],"quantumclient/tests/unit/lb/test_cli20_vip.py":[{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"9b468a5dc4987729825d69d5918d3485f8cfb7b7","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        protocol \u003d \u0027tcp\u0027"},{"line_number":65,"context_line":"        tenant_id \u003d \u0027my-tenant\u0027"},{"line_number":66,"context_line":"        my_id \u003d \u0027my-id\u0027"},{"line_number":67,"context_line":"        args \u003d [\u0027--name\u0027, name,"},{"line_number":68,"context_line":"                \u0027--description\u0027, description,"},{"line_number":69,"context_line":"                \u0027--address\u0027, address,"},{"line_number":70,"context_line":"                \u0027--admin-state-down\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FVxo%3D","line":67,"updated":"2013-01-28 10:41:50.000000000","message":"Wouldn\u0027t it be shorter to define args as a dict. and later assign the keys to the \u0027position_names\u0027 and the values to \u0027position_values\u0027\n...\nargs \u003d {}\nargs[\"name\"] \u003d \"my name\"\n\nI think we can have the same effect with less code.","commit_id":"2bca8ee4407aee03a83592395d3191f097c459a5"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"9b468a5dc4987729825d69d5918d3485f8cfb7b7","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        protocol \u003d \u0027tcp\u0027"},{"line_number":65,"context_line":"        tenant_id \u003d \u0027my-tenant\u0027"},{"line_number":66,"context_line":"        my_id \u003d \u0027my-id\u0027"},{"line_number":67,"context_line":"        args \u003d [\u0027--name\u0027, name,"},{"line_number":68,"context_line":"                \u0027--description\u0027, description,"},{"line_number":69,"context_line":"                \u0027--address\u0027, address,"},{"line_number":70,"context_line":"                \u0027--admin-state-down\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FVq0%3D","line":67,"in_reply_to":"AAAAM3%2F%2FVxE%3D","updated":"2013-01-28 12:44:51.000000000","message":"A working example below.\ndef create_args(args):\n    position_names \u003d args.keys()\n    position_values \u003d args.values()\n    args_list \u003d []\n    for k,v in args.iteritems():\n        args_list.append(\"--\" + k)\n        args_list.append(v)\n    return position_names, position_values, args_list\n\ndef main():\n    args \u003d {}\n    args[\"name\"] \u003d \"my-name\"\n    args[\"description\"] \u003d \"my-description\"\n    args[\"address\"] \u003d \"10.0.0.2\"\n    args[\"admin_state\"] \u003d False\n    args[\"connection_limit\"] \u003d 1000\n    args[\"port\"] \u003d 80    \n    args[\"subnet_id\"] \u003d \"subnet_id\"\n    args[\"tenant_id\"] \u003d \"my-tenant\"\n    position_names, position_values, args_list  \u003d create_args(args)\n    print position_names\n    print position_values\n    print args_list    \nif __name__ \u003d\u003d \"__main__\":\n    main()","commit_id":"2bca8ee4407aee03a83592395d3191f097c459a5"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"9b468a5dc4987729825d69d5918d3485f8cfb7b7","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        protocol \u003d \u0027tcp\u0027"},{"line_number":65,"context_line":"        tenant_id \u003d \u0027my-tenant\u0027"},{"line_number":66,"context_line":"        my_id \u003d \u0027my-id\u0027"},{"line_number":67,"context_line":"        args \u003d [\u0027--name\u0027, name,"},{"line_number":68,"context_line":"                \u0027--description\u0027, description,"},{"line_number":69,"context_line":"                \u0027--address\u0027, address,"},{"line_number":70,"context_line":"                \u0027--admin-state-down\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FVxE%3D","line":67,"in_reply_to":"AAAAM3%2F%2FVxo%3D","updated":"2013-01-28 10:47:24.000000000","message":"I know args should be a list but we can compose it from the dict","commit_id":"2bca8ee4407aee03a83592395d3191f097c459a5"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"9b468a5dc4987729825d69d5918d3485f8cfb7b7","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        tenant_id \u003d \u0027my-tenant\u0027"},{"line_number":66,"context_line":"        my_id \u003d \u0027my-id\u0027"},{"line_number":67,"context_line":"        args \u003d [\u0027--name\u0027, name,"},{"line_number":68,"context_line":"                \u0027--description\u0027, description,"},{"line_number":69,"context_line":"                \u0027--address\u0027, address,"},{"line_number":70,"context_line":"                \u0027--admin-state-down\u0027,"},{"line_number":71,"context_line":"                \u0027--connection-limit\u0027, connection_limit,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FVoU%3D","line":68,"updated":"2013-01-28 13:20:27.000000000","message":"why cant we pass a dict to \u0027_test_create_resource\u0027 and let this method handle it?","commit_id":"2bca8ee4407aee03a83592395d3191f097c459a5"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":65,"context_line":"        tenant_id \u003d \u0027my-tenant\u0027"},{"line_number":66,"context_line":"        my_id \u003d \u0027my-id\u0027"},{"line_number":67,"context_line":"        args \u003d [\u0027--name\u0027, name,"},{"line_number":68,"context_line":"                \u0027--description\u0027, description,"},{"line_number":69,"context_line":"                \u0027--address\u0027, address,"},{"line_number":70,"context_line":"                \u0027--admin-state-down\u0027,"},{"line_number":71,"context_line":"                \u0027--connection-limit\u0027, connection_limit,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FVhc%3D","line":68,"in_reply_to":"AAAAM3%2F%2FVi0%3D","updated":"2013-01-28 15:20:08.000000000","message":"I prefer not to make big change in this patch. If u feel interested in it, we can refactor it later.","commit_id":"2bca8ee4407aee03a83592395d3191f097c459a5"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"9b468a5dc4987729825d69d5918d3485f8cfb7b7","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        tenant_id \u003d \u0027my-tenant\u0027"},{"line_number":66,"context_line":"        my_id \u003d \u0027my-id\u0027"},{"line_number":67,"context_line":"        args \u003d [\u0027--name\u0027, name,"},{"line_number":68,"context_line":"                \u0027--description\u0027, description,"},{"line_number":69,"context_line":"                \u0027--address\u0027, address,"},{"line_number":70,"context_line":"                \u0027--admin-state-down\u0027,"},{"line_number":71,"context_line":"                \u0027--connection-limit\u0027, connection_limit,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FVi0%3D","line":68,"in_reply_to":"AAAAM3%2F%2FVj8%3D","updated":"2013-01-28 15:10:19.000000000","message":"In my eyes the dict is readable enough and should be used as much as we can in order to avoid DRY. I understand that are special cases that can not be covered by the dict and I would give special treatment for those cases.","commit_id":"2bca8ee4407aee03a83592395d3191f097c459a5"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":65,"context_line":"        tenant_id \u003d \u0027my-tenant\u0027"},{"line_number":66,"context_line":"        my_id \u003d \u0027my-id\u0027"},{"line_number":67,"context_line":"        args \u003d [\u0027--name\u0027, name,"},{"line_number":68,"context_line":"                \u0027--description\u0027, description,"},{"line_number":69,"context_line":"                \u0027--address\u0027, address,"},{"line_number":70,"context_line":"                \u0027--admin-state-down\u0027,"},{"line_number":71,"context_line":"                \u0027--connection-limit\u0027, connection_limit,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FVj8%3D","line":68,"in_reply_to":"AAAAM3%2F%2FVoU%3D","updated":"2013-01-28 14:37:31.000000000","message":"I\u0027d prefer the argument list to look as close as possible to the real CLI. This makes tests more readable.\n\nLists in \u0027positional_names\" and \u0027positional_values\u0027 describe the body of request (sure they can be replaced by dict, but this will require changes in all tests, which is out of scope) The mapping between cli arguments and body is not direct, for example --admin-state-down turns into admin_state_up\u003dfalse and this requires additional code to process. More complex case is in dealing with positional arguments and values e.g. with line like this \"lb-vip-create --name test pool-id --session-persistence type\u003ddict type\u003dsource\".","commit_id":"2bca8ee4407aee03a83592395d3191f097c459a5"}],"quantumclient/v2_0/client.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":178,"context_line":"    associate_pool_health_monitors_path \u003d \"/lb/pools/%s/health_monitors\""},{"line_number":179,"context_line":"    disassociate_pool_health_monitors_path \u003d \"/lb/pools/%(\"\\"},{"line_number":180,"context_line":"                                             \"pool)s/health_monitors/%(\" \\"},{"line_number":181,"context_line":"                                             \"health_monitor)s\""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    @APIParamsCall"},{"line_number":184,"context_line":"    def get_quotas_tenant(self, **_params):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F4n0%3D","line":181,"updated":"2012-12-26 11:55:07.000000000","message":"use () for wrapping:\ndisassociate_pool_health_monitors_path \u003d (\n   \"/lb/pools/%(pool)s/health_monitors/%(health_monitor)s\")","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":178,"context_line":"    associate_pool_health_monitors_path \u003d \"/lb/pools/%s/health_monitors\""},{"line_number":179,"context_line":"    disassociate_pool_health_monitors_path \u003d \"/lb/pools/%(\"\\"},{"line_number":180,"context_line":"                                             \"pool)s/health_monitors/%(\" \\"},{"line_number":181,"context_line":"                                             \"health_monitor)s\""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    @APIParamsCall"},{"line_number":184,"context_line":"    def get_quotas_tenant(self, **_params):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fqdk%3D","line":181,"in_reply_to":"AAAAM3%2F%2F4n0%3D","updated":"2013-01-14 11:23:48.000000000","message":"Done","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":652,"context_line":"        Disassociate specified load balancer health monitor and pool"},{"line_number":653,"context_line":"        \"\"\""},{"line_number":654,"context_line":"        path \u003d self.disassociate_pool_health_monitors_path % \\"},{"line_number":655,"context_line":"            {\u0027pool\u0027: pool, \u0027health_monitor\u0027: health_monitor}"},{"line_number":656,"context_line":"        return self.delete(path)"},{"line_number":657,"context_line":""},{"line_number":658,"context_line":"    def __init__(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F4n4%3D","line":655,"updated":"2012-12-26 11:55:07.000000000","message":"we use () for wrapping.\npath \u003d (self.disassociate_pool_health_monitors_path %\n           {\u0027pool\u0027: pool, \u0027health_monitor\u0027: health_monitor})","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":652,"context_line":"        Disassociate specified load balancer health monitor and pool"},{"line_number":653,"context_line":"        \"\"\""},{"line_number":654,"context_line":"        path \u003d self.disassociate_pool_health_monitors_path % \\"},{"line_number":655,"context_line":"            {\u0027pool\u0027: pool, \u0027health_monitor\u0027: health_monitor}"},{"line_number":656,"context_line":"        return self.delete(path)"},{"line_number":657,"context_line":""},{"line_number":658,"context_line":"    def __init__(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fqdc%3D","line":655,"in_reply_to":"AAAAM3%2F%2F4n4%3D","updated":"2013-01-14 11:23:48.000000000","message":"Done","commit_id":"5e7a1c80d6cdf21d3e81775a0cbade049ad9b117"}]}
