)]}'
{"octaviaclient/osc/v2/l7policy.py":[{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        rows \u003d const.L7POLICY_ROWS"},{"line_number":90,"context_line":"        attrs \u003d v2_utils.get_l7policy_attrs(self.app.client_manager,"},{"line_number":91,"context_line":"                                            parsed_args)"},{"line_number":92,"context_line":"        validate.check_l7policy_attrs(attrs)"},{"line_number":93,"context_line":"        body \u003d {\"l7policy\": attrs}"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        data \u003d self.app.client_manager.load_balancer.l7policy_create("}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_1ca7e9a9","line":92,"updated":"2017-11-15 14:35:00.000000000","message":"read comment on validate.py","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"d3749b1970f409c24b0170c0e57d141ea98c10b6","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        rows \u003d const.L7POLICY_ROWS"},{"line_number":90,"context_line":"        attrs \u003d v2_utils.get_l7policy_attrs(self.app.client_manager,"},{"line_number":91,"context_line":"                                            parsed_args)"},{"line_number":92,"context_line":"        validate.check_l7policy_attrs(attrs)"},{"line_number":93,"context_line":"        body \u003d {\"l7policy\": attrs}"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        data \u003d self.app.client_manager.load_balancer.l7policy_create("}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_ed3d798f","line":92,"in_reply_to":"1f485f77_1ca7e9a9","updated":"2017-11-15 16:11:30.000000000","message":"still valid","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"1caf726119e50d5edd0b264c418343e19159e22e","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                                            parsed_args)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        l7policy_id \u003d attrs.pop(\u0027l7policy_id\u0027)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        body \u003d {\u0027l7policy\u0027: attrs}"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        self.app.client_manager.load_balancer.l7policy_set("}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_66cd6d5c","line":242,"updated":"2017-11-21 01:16:46.000000000","message":"validate.check_l7policy_attrs(attrs)\nThis should do this validation as well. Mind adding it?","commit_id":"8b50fe25cbc30d1a2437a0fe57f9bacb486c9485"},{"author":{"_account_id":27303,"name":"Bar Elharar","email":"elhararb@gmail.com","username":"elhararb"},"change_message_id":"cffeb8e69ebd84c26e711d97c65a46926aa57f42","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                                            parsed_args)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        l7policy_id \u003d attrs.pop(\u0027l7policy_id\u0027)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        body \u003d {\u0027l7policy\u0027: attrs}"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        self.app.client_manager.load_balancer.l7policy_set("}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_64ed62ee","line":242,"in_reply_to":"ff82abbf_66cd6d5c","updated":"2017-11-21 06:39:41.000000000","message":"Done. I grouped the redirect-url/pool arguments for better visibility.","commit_id":"8b50fe25cbc30d1a2437a0fe57f9bacb486c9485"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"879969ee59b4052f7e295737368af74a1b61055c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            choices\u003dACTION_CHOICES,"},{"line_number":55,"context_line":"            help\u003d\"Set the action of the policy.\""},{"line_number":56,"context_line":"        )"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        redirect_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":59,"context_line":"        redirect_group.add_argument("},{"line_number":60,"context_line":"            \u0027--redirect-pool\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_dad99783","line":57,"updated":"2017-12-04 17:12:08.000000000","message":"might have been better two split into two patches: one for L7 and one for VIP","commit_id":"6b5ed3788bc1def86d066153fcf903c62f5fb70a"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"1528227da5cf4047c9bd05d24ac4c9ea7f90a863","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            choices\u003dACTION_CHOICES,"},{"line_number":55,"context_line":"            help\u003d\"Set the action of the policy.\""},{"line_number":56,"context_line":"        )"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        redirect_group \u003d parser.add_mutually_exclusive_group()"},{"line_number":59,"context_line":"        redirect_group.add_argument("},{"line_number":60,"context_line":"            \u0027--redirect-pool\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_68219cfb","line":57,"in_reply_to":"df87a7cf_dad99783","updated":"2017-12-04 22:58:14.000000000","message":"+1\nThis is correct and I don\u0027t want you to split it out now, but in future patches it would be best to break these out to separate topic based patches.  When multiple topics are bundled in one patch it is hard to track down which patch had a problem and/or revert a patch.","commit_id":"6b5ed3788bc1def86d066153fcf903c62f5fb70a"}],"octaviaclient/osc/v2/l7rule.py":[{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        rows \u003d const.L7RULE_ROWS"},{"line_number":88,"context_line":"        attrs \u003d v2_utils.get_l7rule_attrs(self.app.client_manager,"},{"line_number":89,"context_line":"                                          parsed_args)"},{"line_number":90,"context_line":"        validate.check_l7rule_attrs(attrs)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        l7policy_id \u003d attrs.pop(\u0027l7policy_id\u0027)"},{"line_number":93,"context_line":"        body \u003d {\"rule\": attrs}"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_fcb9adcb","line":90,"updated":"2017-11-15 14:35:00.000000000","message":"read comment on validate.py","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def take_action(self, parsed_args):"},{"line_number":251,"context_line":"        attrs \u003d v2_utils.get_l7rule_attrs(self.app.client_manager, parsed_args)"},{"line_number":252,"context_line":"        validate.check_l7rule_attrs(attrs)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        l7policy_id \u003d attrs.pop(\u0027l7policy_id\u0027)"},{"line_number":255,"context_line":"        l7rule_id \u003d attrs.pop(\u0027l7rule_id\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_dcbef1b2","line":252,"updated":"2017-11-15 14:35:00.000000000","message":"read comment on validate.py","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"}],"octaviaclient/osc/v2/load_balancer.py":[{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        rows \u003d const.LOAD_BALANCER_ROWS"},{"line_number":91,"context_line":"        attrs \u003d v2_utils.get_loadbalancer_attrs(self.app.client_manager,"},{"line_number":92,"context_line":"                                                parsed_args)"},{"line_number":93,"context_line":"        validate.check_loadbalancer_attrs(attrs)"},{"line_number":94,"context_line":"        body \u003d {\u0027loadbalancer\u0027: attrs}"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        data \u003d self.app.client_manager.load_balancer.load_balancer_create("}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_bcafb57b","line":93,"updated":"2017-11-15 14:35:00.000000000","message":"read comment on validate.py","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"876a3befcaf5c6f14a3a0f3bb04d74accb39b848","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        vip_group \u003d parser.add_argument_group("},{"line_number":61,"context_line":"            \"VIP Network\","},{"line_number":62,"context_line":"            description\u003d\"it is required to specify at least 1 argument\""},{"line_number":63,"context_line":"        )"},{"line_number":64,"context_line":"        vip_group.add_argument("},{"line_number":65,"context_line":"            \u0027--vip-port-id\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_6fbbc871","line":62,"updated":"2017-11-23 13:20:29.000000000","message":"Nit: consider changing the description to: \"At least one of the following arguments is required.\"\n\nVIP Network:\n    At least one of the following arguments is required.\n\n    --vip-subnet-id \u003cvip_subnet_id\u003e\n\n  [...]","commit_id":"92556d6250be1337860d3e5e3b12de6cb32ec4aa"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"18ca21626678786755c1007eb4d43801a70887b8","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        rows \u003d const.LOAD_BALANCER_ROWS"},{"line_number":103,"context_line":"        attrs \u003d v2_utils.get_loadbalancer_attrs(self.app.client_manager,"},{"line_number":104,"context_line":"                                                parsed_args)"},{"line_number":105,"context_line":"        self.__class__._check_attrs(attrs)"},{"line_number":106,"context_line":"        body \u003d {\u0027loadbalancer\u0027: attrs}"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        data \u003d self.app.client_manager.load_balancer.load_balancer_create("}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_b5860fdb","line":105,"range":{"start_line":105,"start_character":8,"end_line":105,"end_character":22},"updated":"2017-11-23 07:35:30.000000000","message":"This is inherently incorrect. You need to do self._check_attrs","commit_id":"92556d6250be1337860d3e5e3b12de6cb32ec4aa"}],"octaviaclient/osc/v2/utils.py":[{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"520de788c1f72409f77d5485a19e32b2657ff747","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"def check_loadbalancer_attrs(attrs):"},{"line_number":120,"context_line":"    verify_args \u003d [\u0027vip_subnet_id\u0027, \u0027vip_network_id\u0027, \u0027vip_port_id\u0027]"},{"line_number":121,"context_line":"    if not any(i in attrs.keys() for i in verify_args):"},{"line_number":122,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""},{"line_number":123,"context_line":"               \"--vip-network-id or --vip-port-id\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_4f5b6a53","line":120,"range":{"start_line":120,"start_character":19,"end_line":120,"end_character":67},"updated":"2017-11-15 12:26:12.000000000","message":"all of them are repeated in several places, it\u0027s better to put them in constants and use those constants.","commit_id":"942b2729ba6785fc83467b8f1970872a844c654c"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"d1570c2dfc808110f26ce5625c0faccd4eb1d300","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"def check_loadbalancer_attrs(attrs):"},{"line_number":120,"context_line":"    verify_args \u003d [\u0027vip_subnet_id\u0027, \u0027vip_network_id\u0027, \u0027vip_port_id\u0027]"},{"line_number":121,"context_line":"    if not any(i in attrs.keys() for i in verify_args):"},{"line_number":122,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""},{"line_number":123,"context_line":"               \"--vip-network-id or --vip-port-id\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_b996a73d","line":120,"range":{"start_line":120,"start_character":19,"end_line":120,"end_character":67},"in_reply_to":"1f485f77_4f5b6a53","updated":"2017-11-15 13:51:40.000000000","message":"para-para","commit_id":"942b2729ba6785fc83467b8f1970872a844c654c"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"d3749b1970f409c24b0170c0e57d141ea98c10b6","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"def check_loadbalancer_attrs(attrs):"},{"line_number":120,"context_line":"    verify_args \u003d [\u0027vip_subnet_id\u0027, \u0027vip_network_id\u0027, \u0027vip_port_id\u0027]"},{"line_number":121,"context_line":"    if not any(i in attrs.keys() for i in verify_args):"},{"line_number":122,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""},{"line_number":123,"context_line":"               \"--vip-network-id or --vip-port-id\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_cda87d8d","line":120,"range":{"start_line":120,"start_character":19,"end_line":120,"end_character":67},"in_reply_to":"1f485f77_7c149d44","updated":"2017-11-15 16:11:30.000000000","message":"still valid","commit_id":"942b2729ba6785fc83467b8f1970872a844c654c"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"def check_loadbalancer_attrs(attrs):"},{"line_number":120,"context_line":"    verify_args \u003d [\u0027vip_subnet_id\u0027, \u0027vip_network_id\u0027, \u0027vip_port_id\u0027]"},{"line_number":121,"context_line":"    if not any(i in attrs.keys() for i in verify_args):"},{"line_number":122,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""},{"line_number":123,"context_line":"               \"--vip-network-id or --vip-port-id\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_7c149d44","line":120,"range":{"start_line":120,"start_character":19,"end_line":120,"end_character":67},"in_reply_to":"1f485f77_b996a73d","updated":"2017-11-15 14:35:00.000000000","message":"This is technical debt that needs to be addressed, either now or leaving a TODO comment. \n\nI prefer to -1 so other reviewers will notice this comment and can decide for themselves. After that a core reviewer can just overturn my vote, that\u0027s alright.","commit_id":"942b2729ba6785fc83467b8f1970872a844c654c"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"520de788c1f72409f77d5485a19e32b2657ff747","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""},{"line_number":123,"context_line":"               \"--vip-network-id or --vip-port-id\")"},{"line_number":124,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":125,"context_line":"    if all(i in attrs.keys() for i in (\u0027vip_network_id\u0027, \u0027vip_port_id\u0027)):"},{"line_number":126,"context_line":"        msg \u003d (\"Argument error: --port-id can not be used with \""},{"line_number":127,"context_line":"               \"--vip-network-id\")"},{"line_number":128,"context_line":"        raise exceptions.CommandError(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_4fadaa2f","line":125,"range":{"start_line":125,"start_character":33,"end_line":125,"end_character":34},"updated":"2017-11-15 12:26:12.000000000","message":"`i` is a non descriptive variable name","commit_id":"942b2729ba6785fc83467b8f1970872a844c654c"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"520de788c1f72409f77d5485a19e32b2657ff747","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""},{"line_number":123,"context_line":"               \"--vip-network-id or --vip-port-id\")"},{"line_number":124,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":125,"context_line":"    if all(i in attrs.keys() for i in (\u0027vip_network_id\u0027, \u0027vip_port_id\u0027)):"},{"line_number":126,"context_line":"        msg \u003d (\"Argument error: --port-id can not be used with \""},{"line_number":127,"context_line":"               \"--vip-network-id\")"},{"line_number":128,"context_line":"        raise exceptions.CommandError(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_8f38423d","line":125,"range":{"start_line":125,"start_character":21,"end_line":125,"end_character":28},"updated":"2017-11-15 12:26:12.000000000","message":"just use `attrs` the function `keys()` exists only for historical reasons.\n\nReference: https://www.python.org/dev/peps/pep-0234/","commit_id":"942b2729ba6785fc83467b8f1970872a844c654c"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"d1570c2dfc808110f26ce5625c0faccd4eb1d300","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""},{"line_number":123,"context_line":"               \"--vip-network-id or --vip-port-id\")"},{"line_number":124,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":125,"context_line":"    if all(i in attrs.keys() for i in (\u0027vip_network_id\u0027, \u0027vip_port_id\u0027)):"},{"line_number":126,"context_line":"        msg \u003d (\"Argument error: --port-id can not be used with \""},{"line_number":127,"context_line":"               \"--vip-network-id\")"},{"line_number":128,"context_line":"        raise exceptions.CommandError(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_597c531e","line":125,"range":{"start_line":125,"start_character":21,"end_line":125,"end_character":28},"in_reply_to":"1f485f77_8f38423d","updated":"2017-11-15 13:51:40.000000000","message":"Done","commit_id":"942b2729ba6785fc83467b8f1970872a844c654c"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"c93716a69d7dbc8d49bbe410317bbd991ea2f045","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""},{"line_number":123,"context_line":"               \"--vip-network-id or --vip-port-id\")"},{"line_number":124,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":125,"context_line":"    if all(i in attrs.keys() for i in (\u0027vip_network_id\u0027, \u0027vip_port_id\u0027)):"},{"line_number":126,"context_line":"        msg \u003d (\"Argument error: --port-id can not be used with \""},{"line_number":127,"context_line":"               \"--vip-network-id\")"},{"line_number":128,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"def get_listener_attrs(client_manager, parsed_args):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_13a7dca9","line":128,"range":{"start_line":125,"start_character":4,"end_line":128,"end_character":42},"updated":"2017-11-15 12:26:58.000000000","message":"There are no unit tests that justify this change","commit_id":"942b2729ba6785fc83467b8f1970872a844c654c"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"d1570c2dfc808110f26ce5625c0faccd4eb1d300","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""},{"line_number":123,"context_line":"               \"--vip-network-id or --vip-port-id\")"},{"line_number":124,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":125,"context_line":"    if all(i in attrs.keys() for i in (\u0027vip_network_id\u0027, \u0027vip_port_id\u0027)):"},{"line_number":126,"context_line":"        msg \u003d (\"Argument error: --port-id can not be used with \""},{"line_number":127,"context_line":"               \"--vip-network-id\")"},{"line_number":128,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"def get_listener_attrs(client_manager, parsed_args):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_797f0f15","line":128,"range":{"start_line":125,"start_character":4,"end_line":128,"end_character":42},"in_reply_to":"1f485f77_13a7dca9","updated":"2017-11-15 13:51:40.000000000","message":"Done","commit_id":"942b2729ba6785fc83467b8f1970872a844c654c"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    return attrs"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"def check_loadbalancer_attrs(attrs):"},{"line_number":120,"context_line":"    verify_args \u003d [\u0027vip_subnet_id\u0027, \u0027vip_network_id\u0027, \u0027vip_port_id\u0027]"},{"line_number":121,"context_line":"    if not any(i in attrs.keys() for i in verify_args):"},{"line_number":122,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_7c7ffd14","line":119,"range":{"start_line":119,"start_character":4,"end_line":119,"end_character":28},"updated":"2017-11-15 14:35:00.000000000","message":"why you created a file for validators and yet this one is here?\n\nPlus they are exactly the same code?!?","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"631825fba532f7955f2a88965e722d43c219ad63","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    return attrs"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"def check_loadbalancer_attrs(attrs):"},{"line_number":120,"context_line":"    verify_args \u003d [\u0027vip_subnet_id\u0027, \u0027vip_network_id\u0027, \u0027vip_port_id\u0027]"},{"line_number":121,"context_line":"    if not any(i in attrs.keys() for i in verify_args):"},{"line_number":122,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_c7f05e00","line":119,"range":{"start_line":119,"start_character":4,"end_line":119,"end_character":28},"in_reply_to":"1f485f77_7c7ffd14","updated":"2017-11-15 16:38:01.000000000","message":"thanks! forgot to remove that.","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""},{"line_number":123,"context_line":"               \"--vip-network-id or --vip-port-id\")"},{"line_number":124,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":125,"context_line":"    if all(i in attrs.keys() for i in (\u0027vip_network_id\u0027, \u0027vip_port_id\u0027)):"},{"line_number":126,"context_line":"        msg \u003d (\"Argument error: --port-id can not be used with \""},{"line_number":127,"context_line":"               \"--vip-network-id\")"},{"line_number":128,"context_line":"        raise exceptions.CommandError(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_bc81f5fd","line":125,"range":{"start_line":125,"start_character":22,"end_line":125,"end_character":28},"updated":"2017-11-15 14:35:00.000000000","message":"no need for this.","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"}],"octaviaclient/osc/v2/validate.py":[{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def check_l7policy_attrs(attrs):"},{"line_number":30,"context_line":"    msg \u003d None"},{"line_number":31,"context_line":"    if attrs[\u0027action\u0027] \u003d\u003d \u0027REDIRECT_TO_POOL\u0027:"},{"line_number":32,"context_line":"        if \u0027redirect_pool_id\u0027 not in attrs:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_5cca014e","line":29,"updated":"2017-11-15 14:35:00.000000000","message":"Not covered by UT","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"d3749b1970f409c24b0170c0e57d141ea98c10b6","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def check_l7policy_attrs(attrs):"},{"line_number":30,"context_line":"    msg \u003d None"},{"line_number":31,"context_line":"    if attrs[\u0027action\u0027] \u003d\u003d \u0027REDIRECT_TO_POOL\u0027:"},{"line_number":32,"context_line":"        if \u0027redirect_pool_id\u0027 not in attrs:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_8d23a556","line":29,"in_reply_to":"1f485f77_5cca014e","updated":"2017-11-15 16:11:30.000000000","message":"still valid","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def check_l7rule_attrs(attrs):"},{"line_number":42,"context_line":"    msg \u003d None"},{"line_number":43,"context_line":"    if \u0027type\u0027 in attrs and attrs[\u0027type\u0027] \u003d\u003d \u0027COOKIE\u0027:"},{"line_number":44,"context_line":"        if \u0027key\u0027 not in attrs:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_3cc3c53a","line":41,"updated":"2017-11-15 14:35:00.000000000","message":"Not covered by UT","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"d3749b1970f409c24b0170c0e57d141ea98c10b6","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def check_l7rule_attrs(attrs):"},{"line_number":42,"context_line":"    msg \u003d None"},{"line_number":43,"context_line":"    if \u0027type\u0027 in attrs and attrs[\u0027type\u0027] \u003d\u003d \u0027COOKIE\u0027:"},{"line_number":44,"context_line":"        if \u0027key\u0027 not in attrs:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_6d206949","line":41,"in_reply_to":"1f485f77_3cc3c53a","updated":"2017-11-15 16:11:30.000000000","message":"still valid","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from osc_lib import exceptions"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"def check_loadbalancer_attrs(attrs):"},{"line_number":18,"context_line":"    verify_args \u003d [\u0027vip_subnet_id\u0027, \u0027vip_network_id\u0027, \u0027vip_port_id\u0027]"},{"line_number":19,"context_line":"    if not any(i in attrs for i in verify_args):"},{"line_number":20,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""},{"line_number":21,"context_line":"               \"--vip-network-id or --vip-port-id\")"},{"line_number":22,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":23,"context_line":"    if all(i in attrs for i in (\u0027vip_network_id\u0027, \u0027vip_port_id\u0027)):"},{"line_number":24,"context_line":"        msg \u003d (\"Argument error: --vip-port-id can not be used with \""},{"line_number":25,"context_line":"               \"--vip-network-id\")"},{"line_number":26,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def check_l7policy_attrs(attrs):"},{"line_number":30,"context_line":"    msg \u003d None"},{"line_number":31,"context_line":"    if attrs[\u0027action\u0027] \u003d\u003d \u0027REDIRECT_TO_POOL\u0027:"},{"line_number":32,"context_line":"        if \u0027redirect_pool_id\u0027 not in attrs:"},{"line_number":33,"context_line":"            msg \u003d \u0027Missing argument: --redirect-pool\u0027"},{"line_number":34,"context_line":"    elif attrs[\u0027action\u0027] \u003d\u003d \u0027REDIRECT_TO_URL\u0027:"},{"line_number":35,"context_line":"        if \u0027redirect_url\u0027 not in attrs:"},{"line_number":36,"context_line":"            msg \u003d \u0027Missing argument: --redirect-url\u0027"},{"line_number":37,"context_line":"    if msg is not None:"},{"line_number":38,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def check_l7rule_attrs(attrs):"},{"line_number":42,"context_line":"    msg \u003d None"},{"line_number":43,"context_line":"    if \u0027type\u0027 in attrs and attrs[\u0027type\u0027] \u003d\u003d \u0027COOKIE\u0027:"},{"line_number":44,"context_line":"        if \u0027key\u0027 not in attrs:"},{"line_number":45,"context_line":"            msg \u003d \u0027Missing argument: --type COOKIE requires --key \u003ckey\u003e\u0027"},{"line_number":46,"context_line":"    elif \u0027type\u0027 in attrs and attrs[\u0027type\u0027] \u003d\u003d \u0027HEADER\u0027:"},{"line_number":47,"context_line":"        if \u0027key\u0027 not in attrs:"},{"line_number":48,"context_line":"            msg \u003d \u0027Missing argument: --type HEADER requires --key \u003ckey\u003e\u0027"},{"line_number":49,"context_line":"    if msg is not None:"},{"line_number":50,"context_line":"        raise exceptions.CommandError(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_bca215fb","line":50,"range":{"start_line":17,"start_character":0,"end_line":50,"end_character":42},"updated":"2017-11-15 14:35:00.000000000","message":"IMHO it makes much more sense to make them methods of the classes that encapsulate this behavior. You are already setting those options for argparse there, so the validation being there also makes sense.","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"d3749b1970f409c24b0170c0e57d141ea98c10b6","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from osc_lib import exceptions"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"def check_loadbalancer_attrs(attrs):"},{"line_number":18,"context_line":"    verify_args \u003d [\u0027vip_subnet_id\u0027, \u0027vip_network_id\u0027, \u0027vip_port_id\u0027]"},{"line_number":19,"context_line":"    if not any(i in attrs for i in verify_args):"},{"line_number":20,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""},{"line_number":21,"context_line":"               \"--vip-network-id or --vip-port-id\")"},{"line_number":22,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":23,"context_line":"    if all(i in attrs for i in (\u0027vip_network_id\u0027, \u0027vip_port_id\u0027)):"},{"line_number":24,"context_line":"        msg \u003d (\"Argument error: --vip-port-id can not be used with \""},{"line_number":25,"context_line":"               \"--vip-network-id\")"},{"line_number":26,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def check_l7policy_attrs(attrs):"},{"line_number":30,"context_line":"    msg \u003d None"},{"line_number":31,"context_line":"    if attrs[\u0027action\u0027] \u003d\u003d \u0027REDIRECT_TO_POOL\u0027:"},{"line_number":32,"context_line":"        if \u0027redirect_pool_id\u0027 not in attrs:"},{"line_number":33,"context_line":"            msg \u003d \u0027Missing argument: --redirect-pool\u0027"},{"line_number":34,"context_line":"    elif attrs[\u0027action\u0027] \u003d\u003d \u0027REDIRECT_TO_URL\u0027:"},{"line_number":35,"context_line":"        if \u0027redirect_url\u0027 not in attrs:"},{"line_number":36,"context_line":"            msg \u003d \u0027Missing argument: --redirect-url\u0027"},{"line_number":37,"context_line":"    if msg is not None:"},{"line_number":38,"context_line":"        raise exceptions.CommandError(msg)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def check_l7rule_attrs(attrs):"},{"line_number":42,"context_line":"    msg \u003d None"},{"line_number":43,"context_line":"    if \u0027type\u0027 in attrs and attrs[\u0027type\u0027] \u003d\u003d \u0027COOKIE\u0027:"},{"line_number":44,"context_line":"        if \u0027key\u0027 not in attrs:"},{"line_number":45,"context_line":"            msg \u003d \u0027Missing argument: --type COOKIE requires --key \u003ckey\u003e\u0027"},{"line_number":46,"context_line":"    elif \u0027type\u0027 in attrs and attrs[\u0027type\u0027] \u003d\u003d \u0027HEADER\u0027:"},{"line_number":47,"context_line":"        if \u0027key\u0027 not in attrs:"},{"line_number":48,"context_line":"            msg \u003d \u0027Missing argument: --type HEADER requires --key \u003ckey\u003e\u0027"},{"line_number":49,"context_line":"    if msg is not None:"},{"line_number":50,"context_line":"        raise exceptions.CommandError(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_edd9f956","line":50,"range":{"start_line":17,"start_character":0,"end_line":50,"end_character":42},"in_reply_to":"1f485f77_bca215fb","updated":"2017-11-15 16:11:30.000000000","message":"still valid","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"1caf726119e50d5edd0b264c418343e19159e22e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from osc_lib import exceptions"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"def check_loadbalancer_attrs(attrs):"},{"line_number":18,"context_line":"    verify_args \u003d [\u0027vip_subnet_id\u0027, \u0027vip_network_id\u0027, \u0027vip_port_id\u0027]"},{"line_number":19,"context_line":"    if not any(i in attrs for i in verify_args):"},{"line_number":20,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_a6b615d9","line":17,"updated":"2017-11-21 01:16:46.000000000","message":"Isn\u0027t this specific to the create load balancer class? Why don\u0027t you just move them in the class as a private method?","commit_id":"8b50fe25cbc30d1a2437a0fe57f9bacb486c9485"},{"author":{"_account_id":27303,"name":"Bar Elharar","email":"elhararb@gmail.com","username":"elhararb"},"change_message_id":"cffeb8e69ebd84c26e711d97c65a46926aa57f42","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from osc_lib import exceptions"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"def check_loadbalancer_attrs(attrs):"},{"line_number":18,"context_line":"    verify_args \u003d [\u0027vip_subnet_id\u0027, \u0027vip_network_id\u0027, \u0027vip_port_id\u0027]"},{"line_number":19,"context_line":"    if not any(i in attrs for i in verify_args):"},{"line_number":20,"context_line":"        msg \u003d (\"Missing required argument: Requires one of --vip-subnet-id, \""}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_84218650","line":17,"in_reply_to":"ff82abbf_a6b615d9","updated":"2017-11-21 06:39:41.000000000","message":"Done","commit_id":"8b50fe25cbc30d1a2437a0fe57f9bacb486c9485"}],"octaviaclient/tests/unit/osc/v2/test_validations.py":[{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import itertools"},{"line_number":15,"context_line":"from octaviaclient.osc.v2 import validate"},{"line_number":16,"context_line":"from osc_lib import exceptions"},{"line_number":17,"context_line":"from osc_lib.tests import utils"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_fcbd2dd8","line":15,"updated":"2017-11-15 14:35:00.000000000","message":"missing empty line between L14 and L15","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"631825fba532f7955f2a88965e722d43c219ad63","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import itertools"},{"line_number":15,"context_line":"from octaviaclient.osc.v2 import validate"},{"line_number":16,"context_line":"from osc_lib import exceptions"},{"line_number":17,"context_line":"from osc_lib.tests import utils"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_0730b69e","line":15,"in_reply_to":"1f485f77_fcbd2dd8","updated":"2017-11-15 16:38:01.000000000","message":"Done","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    def setUp(self):"},{"line_number":22,"context_line":"        super(TestValidations, self).setUp()"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def test_check_loadbalancer_attrs(self):"},{"line_number":25,"context_line":"        args \u003d (\"vip_subnet_id\", \"vip_network_id\", \"vip_port_id\")"},{"line_number":26,"context_line":"        for k in args:"},{"line_number":27,"context_line":"            validate.check_loadbalancer_attrs({k: None})"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_fc388da0","line":24,"range":{"start_line":24,"start_character":8,"end_line":24,"end_character":37},"updated":"2017-11-15 14:35:00.000000000","message":"it\u0027s an overarching test which makes it more complicated since it\u0027s testing several things at the same time instead of testing by chunks of behavior. You can divide this in several different tests, making it much more maintainable and declarative.","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"d3749b1970f409c24b0170c0e57d141ea98c10b6","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    def setUp(self):"},{"line_number":22,"context_line":"        super(TestValidations, self).setUp()"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def test_check_loadbalancer_attrs(self):"},{"line_number":25,"context_line":"        args \u003d (\"vip_subnet_id\", \"vip_network_id\", \"vip_port_id\")"},{"line_number":26,"context_line":"        for k in args:"},{"line_number":27,"context_line":"            validate.check_loadbalancer_attrs({k: None})"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_6d49892f","line":24,"range":{"start_line":24,"start_character":8,"end_line":24,"end_character":37},"in_reply_to":"1f485f77_fc388da0","updated":"2017-11-15 16:11:30.000000000","message":"still valid","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    def test_check_loadbalancer_attrs(self):"},{"line_number":25,"context_line":"        args \u003d (\"vip_subnet_id\", \"vip_network_id\", \"vip_port_id\")"},{"line_number":26,"context_line":"        for k in args:"},{"line_number":27,"context_line":"            validate.check_loadbalancer_attrs({k: None})"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        # negative"},{"line_number":30,"context_line":"        self.assertRaises(exceptions.CommandError,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_7cfa5dbd","line":27,"range":{"start_line":27,"start_character":13,"end_line":27,"end_character":56},"updated":"2017-11-15 14:35:00.000000000","message":"You don\u0027t want to assert anything here?","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"631825fba532f7955f2a88965e722d43c219ad63","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    def test_check_loadbalancer_attrs(self):"},{"line_number":25,"context_line":"        args \u003d (\"vip_subnet_id\", \"vip_network_id\", \"vip_port_id\")"},{"line_number":26,"context_line":"        for k in args:"},{"line_number":27,"context_line":"            validate.check_loadbalancer_attrs({k: None})"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        # negative"},{"line_number":30,"context_line":"        self.assertRaises(exceptions.CommandError,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_02be64d4","line":27,"range":{"start_line":27,"start_character":13,"end_line":27,"end_character":56},"in_reply_to":"1f485f77_7cfa5dbd","updated":"2017-11-15 16:38:01.000000000","message":"Done","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        # negative"},{"line_number":30,"context_line":"        self.assertRaises(exceptions.CommandError,"},{"line_number":31,"context_line":"                          validate.check_loadbalancer_attrs,"},{"line_number":32,"context_line":"                          {\"vip_address\": \"192.168.0.1\"},"},{"line_number":33,"context_line":"                          )"},{"line_number":34,"context_line":"        for n in range(1, len(args)+1):"},{"line_number":35,"context_line":"            for comb in itertools.combinations(args, n):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_3c198521","line":32,"range":{"start_line":32,"start_character":56,"end_line":32,"end_character":57},"updated":"2017-11-15 14:35:00.000000000","message":"you can delete this and bring the parenthesis up","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"d3749b1970f409c24b0170c0e57d141ea98c10b6","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        # negative"},{"line_number":30,"context_line":"        self.assertRaises(exceptions.CommandError,"},{"line_number":31,"context_line":"                          validate.check_loadbalancer_attrs,"},{"line_number":32,"context_line":"                          {\"vip_address\": \"192.168.0.1\"},"},{"line_number":33,"context_line":"                          )"},{"line_number":34,"context_line":"        for n in range(1, len(args)+1):"},{"line_number":35,"context_line":"            for comb in itertools.combinations(args, n):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_ad5c21ed","line":32,"range":{"start_line":32,"start_character":56,"end_line":32,"end_character":57},"in_reply_to":"1f485f77_3c198521","updated":"2017-11-15 16:11:30.000000000","message":"still valid","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                if all(k in comb for k in (\"vip_network_id\", \"vip_port_id\")):"},{"line_number":38,"context_line":"                    self.assertRaises(exceptions.CommandError,"},{"line_number":39,"context_line":"                                      validate.check_loadbalancer_attrs,"},{"line_number":40,"context_line":"                                      d,"},{"line_number":41,"context_line":"                                      )"},{"line_number":42,"context_line":"                else:"},{"line_number":43,"context_line":"                    validate.check_loadbalancer_attrs(d)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_5c20c148","line":40,"range":{"start_line":40,"start_character":39,"end_line":40,"end_character":40},"updated":"2017-11-15 14:35:00.000000000","message":"you can delete this and bring it the closing parenthesis up","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"d3749b1970f409c24b0170c0e57d141ea98c10b6","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                if all(k in comb for k in (\"vip_network_id\", \"vip_port_id\")):"},{"line_number":38,"context_line":"                    self.assertRaises(exceptions.CommandError,"},{"line_number":39,"context_line":"                                      validate.check_loadbalancer_attrs,"},{"line_number":40,"context_line":"                                      d,"},{"line_number":41,"context_line":"                                      )"},{"line_number":42,"context_line":"                else:"},{"line_number":43,"context_line":"                    validate.check_loadbalancer_attrs(d)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_6d72a97d","line":40,"range":{"start_line":40,"start_character":39,"end_line":40,"end_character":40},"in_reply_to":"1f485f77_5c20c148","updated":"2017-11-15 16:11:30.000000000","message":"still valid","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"ff2cb59d40587c94d6cd576c3f6646e45ff024b6","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                      d,"},{"line_number":41,"context_line":"                                      )"},{"line_number":42,"context_line":"                else:"},{"line_number":43,"context_line":"                    validate.check_loadbalancer_attrs(d)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_bc25755e","line":43,"range":{"start_line":43,"start_character":19,"end_line":43,"end_character":56},"updated":"2017-11-15 14:35:00.000000000","message":"idem L27","commit_id":"210e1f3a9e743fca7049f0044fc45f6900ef3dec"}]}
