)]}'
{"octavia/amphorae/drivers/haproxy/rest_api_driver.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"050cd60abe65f760c0716ff85e441b841efd12e2","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    def finalize_amphora(self, amphora):"},{"line_number":100,"context_line":"        pass"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def post_vip_plug(self, load_balancer, amphorae_network_config):"},{"line_number":103,"context_line":"        for amp in load_balancer.amphorae:"},{"line_number":104,"context_line":"            self.client.plug_vip(amp, load_balancer.vip.ip_address)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_78d7b3bf","line":102,"updated":"2015-07-30 22:46:11.000000000","message":"Is convention to include unused args, or simply include used args and add **kwargs for unused? I\u0027m curious because I have done it both ways in the past and want to know what the consensus is.","commit_id":"bf3e6322734fe84c2fbb11c5d4910ff585df87e2"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"70a4e080abc39c7efc8f6b32beb310afe96ad9ba","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    def finalize_amphora(self, amphora):"},{"line_number":100,"context_line":"        pass"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def post_vip_plug(self, load_balancer, amphorae_network_config):"},{"line_number":103,"context_line":"        for amp in load_balancer.amphorae:"},{"line_number":104,"context_line":"            self.client.plug_vip(amp, load_balancer.vip.ip_address)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_67c62e4b","line":102,"updated":"2015-07-30 22:49:18.000000000","message":"Is convention to include unused args, or simply include used args and add **kwargs for unused? I\u0027m curious because I have done it both ways in the past and want to know what the consensus is.","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"368875afa236dae037e177816557cc8ae9b4cfe2","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    def finalize_amphora(self, amphora):"},{"line_number":100,"context_line":"        pass"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def post_vip_plug(self, load_balancer, amphorae_network_config):"},{"line_number":103,"context_line":"        for amp in load_balancer.amphorae:"},{"line_number":104,"context_line":"            self.client.plug_vip(amp, load_balancer.vip.ip_address)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_4788d2c6","line":102,"in_reply_to":"3a50d1a3_67c62e4b","updated":"2015-07-30 23:11:48.000000000","message":"since this is following the interface, it should take it explicitly and will need it.  its not needed now, so i don\u0027t think its that a  big issue.  If it was a problem I think *args would be more appropriate since it is a positional argument.","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"}],"octavia/amphorae/drivers/haproxy/ssh_driver.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"050cd60abe65f760c0716ff85e441b841efd12e2","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        # just grab the ip from dhcp"},{"line_number":153,"context_line":"        command \u003d \"dhclient {0}\".format(iface)"},{"line_number":154,"context_line":"        self._execute_command(command, run_as_root\u003dTrue)"},{"line_number":155,"context_line":"        if secondary_ip:"},{"line_number":156,"context_line":"            # add secondary_ip"},{"line_number":157,"context_line":"            command \u003d \"ip addr add {0}/24 dev {1}\".format(secondary_ip, iface)"},{"line_number":158,"context_line":"            self._execute_command(command, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_c735c2a8","line":155,"updated":"2015-07-30 22:46:11.000000000","message":"Do we think this will always be 1-2 IPs, or would it be better to have an \"additional IPs\" list instead (more flexibility)?","commit_id":"bf3e6322734fe84c2fbb11c5d4910ff585df87e2"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"70a4e080abc39c7efc8f6b32beb310afe96ad9ba","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        # just grab the ip from dhcp"},{"line_number":153,"context_line":"        command \u003d \"dhclient {0}\".format(iface)"},{"line_number":154,"context_line":"        self._execute_command(command, run_as_root\u003dTrue)"},{"line_number":155,"context_line":"        if secondary_ip:"},{"line_number":156,"context_line":"            # add secondary_ip"},{"line_number":157,"context_line":"            command \u003d \"ip addr add {0}/24 dev {1}\".format(secondary_ip, iface)"},{"line_number":158,"context_line":"            self._execute_command(command, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_27c0262a","line":155,"updated":"2015-07-30 22:49:18.000000000","message":"Do we think this will always be 1-2 IPs, or would it be better to have an \"additional IPs\" list instead (more flexibility)?","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"368875afa236dae037e177816557cc8ae9b4cfe2","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        # just grab the ip from dhcp"},{"line_number":153,"context_line":"        command \u003d \"dhclient {0}\".format(iface)"},{"line_number":154,"context_line":"        self._execute_command(command, run_as_root\u003dTrue)"},{"line_number":155,"context_line":"        if secondary_ip:"},{"line_number":156,"context_line":"            # add secondary_ip"},{"line_number":157,"context_line":"            command \u003d \"ip addr add {0}/24 dev {1}\".format(secondary_ip, iface)"},{"line_number":158,"context_line":"            self._execute_command(command, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_6722ae03","line":155,"in_reply_to":"3a50d1a3_27c0262a","updated":"2015-07-30 23:11:48.000000000","message":"when something is added that needs that functionality this can easily be changed.  for now though i dont see a reason why we would need more ips than this","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"}],"octavia/amphorae/drivers/noop_driver/driver.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"050cd60abe65f760c0716ff85e441b841efd12e2","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    def post_vip_plug(self, load_balancer, amphorae_network_config):"},{"line_number":89,"context_line":"        LOG.debug(\"Amphora %s no-op, post vip plug load balancer %s\","},{"line_number":90,"context_line":"                  self.__class__.__name__, load_balancer.id)"},{"line_number":91,"context_line":"        self.amphoraconfig[(load_balancer.id,"},{"line_number":92,"context_line":"                            list(amphorae_network_config)[0])] \u003d ("},{"line_number":93,"context_line":"            load_balancer.id,"},{"line_number":94,"context_line":"            list(amphorae_network_config)[0],"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_67f5cec9","line":91,"updated":"2015-07-30 22:46:11.000000000","message":"This is a little confusing (and caught my eye because of the conspicuous [0] in it)... Could we use a temp variable or something here so it\u0027s easier to tell exactly what is happening? For instance, why do we only take the first element of [whatever making a list of the amphorae_network_config element does]? If list(amphorae_network_config) is the same as amphorae_network_config.keys() then could we use the latter as it seems more clear? If that\u0027s not what it does, obviously clarification would be great.","commit_id":"bf3e6322734fe84c2fbb11c5d4910ff585df87e2"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"70a4e080abc39c7efc8f6b32beb310afe96ad9ba","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    def post_vip_plug(self, load_balancer, amphorae_network_config):"},{"line_number":89,"context_line":"        LOG.debug(\"Amphora %s no-op, post vip plug load balancer %s\","},{"line_number":90,"context_line":"                  self.__class__.__name__, load_balancer.id)"},{"line_number":91,"context_line":"        self.amphoraconfig[(load_balancer.id,"},{"line_number":92,"context_line":"                            list(amphorae_network_config)[0])] \u003d ("},{"line_number":93,"context_line":"            load_balancer.id,"},{"line_number":94,"context_line":"            list(amphorae_network_config)[0],"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_e7e0fece","line":91,"updated":"2015-07-30 22:49:18.000000000","message":"This is a little confusing (and caught my eye because of the conspicuous [0] in it)... Could we use a temp variable or something here so it\u0027s easier to tell exactly what is happening? For instance, why do we only take the first element of [whatever making a list of the amphorae_network_config element does]? If list(amphorae_network_config) is the same as amphorae_network_config.keys() then could we use the latter as it seems more clear? If that\u0027s not what it does, obviously clarification would be great.","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"d0b77a611fd9f3d78057c7b16f43f14fce1faf79","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    def post_vip_plug(self, load_balancer, amphorae_network_config):"},{"line_number":89,"context_line":"        LOG.debug(\"Amphora %s no-op, post vip plug load balancer %s\","},{"line_number":90,"context_line":"                  self.__class__.__name__, load_balancer.id)"},{"line_number":91,"context_line":"        self.amphoraconfig[(load_balancer.id,"},{"line_number":92,"context_line":"                            list(amphorae_network_config)[0])] \u003d ("},{"line_number":93,"context_line":"            load_balancer.id,"},{"line_number":94,"context_line":"            list(amphorae_network_config)[0],"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_b94bfa5e","line":91,"in_reply_to":"3a50d1a3_477692d9","updated":"2015-07-30 23:22:35.000000000","message":"Ah yes, it\u0027s the dict_view thing from py3. I think just using an intermediate variable would help a lot. I am still not clean on the use of [0]?","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"368875afa236dae037e177816557cc8ae9b4cfe2","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    def post_vip_plug(self, load_balancer, amphorae_network_config):"},{"line_number":89,"context_line":"        LOG.debug(\"Amphora %s no-op, post vip plug load balancer %s\","},{"line_number":90,"context_line":"                  self.__class__.__name__, load_balancer.id)"},{"line_number":91,"context_line":"        self.amphoraconfig[(load_balancer.id,"},{"line_number":92,"context_line":"                            list(amphorae_network_config)[0])] \u003d ("},{"line_number":93,"context_line":"            load_balancer.id,"},{"line_number":94,"context_line":"            list(amphorae_network_config)[0],"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_477692d9","line":91,"in_reply_to":"3a50d1a3_e7e0fece","updated":"2015-07-30 23:11:48.000000000","message":"yeah, this was just a pound the square peg in the round hole thing.  it was something about py3 not being able to use a list (keys()) as an index, but py2 could so I just went purely dumb.  what i really should do is just turn the unhashable index into a string and use that.  There really isn\u0027t much thought given to this, its just a blind copy of other methods.  amphoraconfig needs a unique identifier for the parameter, but since its a dictionary there really isn\u0027t one, other than turning the list of keys into a string, or i could just get the id() of it.","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"7f3ff6fa0b6e600493ab8013159da5cda393a0b2","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        LOG.debug(\"Amphora %s no-op, post vip plug load balancer %s\","},{"line_number":90,"context_line":"                  self.__class__.__name__, load_balancer.id)"},{"line_number":91,"context_line":"        self.amphoraconfig[(load_balancer.id, id(amphorae_network_config))] \u003d ("},{"line_number":92,"context_line":"            load_balancer.id, amphorae_network_config, \u0027post_vip_plug\u0027)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class NoopAmphoraLoadBalancerDriver(driver_base.AmphoraLoadBalancerDriver):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_03ee37b4","line":92,"updated":"2015-07-31 04:25:54.000000000","message":"You still didn\u0027t use an intermediate (which would be a little more clear for this index), and if I\u0027m reading this right, you\u0027ve actually changed the functionality? it now equals a tuple of lbid and JUST the network_config, not the first key?","commit_id":"c2bdb48419238a7a40c16a70be8acfac76b9d46e"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"98a0bbc601f4934f63b572dff119d61cf3c223c6","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        LOG.debug(\"Amphora %s no-op, post vip plug load balancer %s\","},{"line_number":90,"context_line":"                  self.__class__.__name__, load_balancer.id)"},{"line_number":91,"context_line":"        self.amphoraconfig[(load_balancer.id, id(amphorae_network_config))] \u003d ("},{"line_number":92,"context_line":"            load_balancer.id, amphorae_network_config, \u0027post_vip_plug\u0027)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class NoopAmphoraLoadBalancerDriver(driver_base.AmphoraLoadBalancerDriver):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_52f6275e","line":92,"in_reply_to":"3a50d1a3_03ee37b4","updated":"2015-07-31 16:41:54.000000000","message":"have you looked at the rest of the methods in this? this is how its been done.  its just a dumb logging noop driver and storing the parameters passed in as keys, and if there are many parameters, it stores them all.  since you can\u0027t use a dictionary or object as a key, you have to use a primitive type.  thats all this is doing.  it\u0027s not very complex and not very useful bc it is a logging noop driver.","commit_id":"c2bdb48419238a7a40c16a70be8acfac76b9d46e"}],"octavia/tests/unit/amphorae/drivers/haproxy/test_rest_api_driver.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"050cd60abe65f760c0716ff85e441b841efd12e2","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        pass"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_post_vip_plug(self):"},{"line_number":112,"context_line":"        self.driver.post_vip_plug(self.lb, mock.Mock())"},{"line_number":113,"context_line":"        self.driver.client.plug_vip.assert_called_once_with("},{"line_number":114,"context_line":"            self.amp, self.lb.vip.ip_address)"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_07f08ac8","line":112,"updated":"2015-07-30 22:46:11.000000000","message":"Shouldn\u0027t passing None here be sufficient, as the REST driver doesn\u0027t make use of this, from what I recall? Alternatively, if it is supposed to make use of the network_config, then why is there no testing for it? Assuming the former.","commit_id":"bf3e6322734fe84c2fbb11c5d4910ff585df87e2"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"70a4e080abc39c7efc8f6b32beb310afe96ad9ba","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        pass"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_post_vip_plug(self):"},{"line_number":112,"context_line":"        self.driver.post_vip_plug(self.lb, mock.Mock())"},{"line_number":113,"context_line":"        self.driver.client.plug_vip.assert_called_once_with("},{"line_number":114,"context_line":"            self.amp, self.lb.vip.ip_address)"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_a7eaf6aa","line":112,"updated":"2015-07-30 22:49:18.000000000","message":"Shouldn\u0027t passing None here be sufficient, as the REST driver doesn\u0027t make use of this, from what I recall? Alternatively, if it is supposed to make use of the network_config, then why is there no testing for it? Assuming the former.","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"368875afa236dae037e177816557cc8ae9b4cfe2","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        pass"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_post_vip_plug(self):"},{"line_number":112,"context_line":"        self.driver.post_vip_plug(self.lb, mock.Mock())"},{"line_number":113,"context_line":"        self.driver.client.plug_vip.assert_called_once_with("},{"line_number":114,"context_line":"            self.amp, self.lb.vip.ip_address)"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_c748628d","line":112,"in_reply_to":"3a50d1a3_a7eaf6aa","updated":"2015-07-30 23:11:48.000000000","message":"this is just to get the test to pass the correct parameter.  The rest driver will need to be updated in a follow up review to use this parameter.","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"d0b77a611fd9f3d78057c7b16f43f14fce1faf79","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        pass"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_post_vip_plug(self):"},{"line_number":112,"context_line":"        self.driver.post_vip_plug(self.lb, mock.Mock())"},{"line_number":113,"context_line":"        self.driver.client.plug_vip.assert_called_once_with("},{"line_number":114,"context_line":"            self.amp, self.lb.vip.ip_address)"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_b999bad2","line":112,"in_reply_to":"3a50d1a3_c748628d","updated":"2015-07-30 23:22:35.000000000","message":"Seems reasonable.","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"}],"octavia/tests/unit/amphorae/drivers/haproxy/test_ssh_driver.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"050cd60abe65f760c0716ff85e441b841efd12e2","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        vip_network \u003d network_models.Network(id\u003dMOCK_NETWORK_ID)"},{"line_number":251,"context_line":"        exec_command.return_value \u003d (\u0027\u0027, \u0027\u0027)"},{"line_number":252,"context_line":"        self.driver.post_vip_plug(lb, vip_network)"},{"line_number":253,"context_line":"        self.assertEqual(1, exec_command.call_count)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    @mock.patch.object(ssh_driver.HaproxyManager, \u0027_execute_command\u0027)"},{"line_number":256,"context_line":"    def test_post_vip_plug(self, exec_command):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_47945243","line":253,"updated":"2015-07-30 22:46:11.000000000","message":"I don\u0027t usually recommend using mock.call_count (there is a reason they don\u0027t provide a direct assert for call count, I think -- it is recommended to really flesh out the full calls you expect). Is there a reason you don\u0027t want to fully mock out the calls?","commit_id":"bf3e6322734fe84c2fbb11c5d4910ff585df87e2"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"050cd60abe65f760c0716ff85e441b841efd12e2","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        )}"},{"line_number":270,"context_line":"        exec_command.return_value \u003d (\u0027eth1:\u0027, \u0027\u0027)"},{"line_number":271,"context_line":"        self.driver.post_vip_plug(lb, amphorae_net_config)"},{"line_number":272,"context_line":"        self.assertEqual(9, exec_command.call_count)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    @mock.patch.object(ssh_driver.HaproxyManager, \u0027_execute_command\u0027)"},{"line_number":275,"context_line":"    def test_post_network_plug_no_down_links(self, exec_command):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_079e4a63","line":272,"updated":"2015-07-30 22:46:11.000000000","message":"Same as above -- this test is weakened significantly by just blindly checking call count.","commit_id":"bf3e6322734fe84c2fbb11c5d4910ff585df87e2"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"050cd60abe65f760c0716ff85e441b841efd12e2","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                                  lb_network_ip\u003dMOCK_IP_ADDRESS)"},{"line_number":278,"context_line":"        exec_command.return_value \u003d (\u0027\u0027, \u0027\u0027)"},{"line_number":279,"context_line":"        self.driver.post_network_plug(amp)"},{"line_number":280,"context_line":"        self.assertEqual(1, exec_command.call_count)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    @mock.patch.object(ssh_driver.HaproxyManager, \u0027_execute_command\u0027)"},{"line_number":283,"context_line":"    def test_post_network_plug(self, exec_command):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_279b4674","line":280,"updated":"2015-07-30 22:46:11.000000000","message":"Same.","commit_id":"bf3e6322734fe84c2fbb11c5d4910ff585df87e2"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"050cd60abe65f760c0716ff85e441b841efd12e2","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                                  lb_network_ip\u003dMOCK_IP_ADDRESS)"},{"line_number":286,"context_line":"        exec_command.return_value \u003d (\u0027eth1:\u0027, \u0027\u0027)"},{"line_number":287,"context_line":"        self.driver.post_network_plug(amp)"},{"line_number":288,"context_line":"        self.assertEqual(3, exec_command.call_count)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def test__configure_amp_interfaces(self):"},{"line_number":291,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_c7862216","line":288,"updated":"2015-07-30 22:46:11.000000000","message":"Same.","commit_id":"bf3e6322734fe84c2fbb11c5d4910ff585df87e2"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"76ea90166961a03b948066018c5a0c5f0efe73cc","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        vip_network \u003d network_models.Network(id\u003dMOCK_NETWORK_ID)"},{"line_number":251,"context_line":"        exec_command.return_value \u003d (\u0027\u0027, \u0027\u0027)"},{"line_number":252,"context_line":"        self.driver.post_vip_plug(lb, vip_network)"},{"line_number":253,"context_line":"        self.assertEqual(1, exec_command.call_count)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    @mock.patch.object(ssh_driver.HaproxyManager, \u0027_execute_command\u0027)"},{"line_number":256,"context_line":"    def test_post_vip_plug(self, exec_command):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_a744361b","line":253,"updated":"2015-07-30 22:36:09.000000000","message":"not just count but also content of the calls","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"368875afa236dae037e177816557cc8ae9b4cfe2","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        vip_network \u003d network_models.Network(id\u003dMOCK_NETWORK_ID)"},{"line_number":251,"context_line":"        exec_command.return_value \u003d (\u0027\u0027, \u0027\u0027)"},{"line_number":252,"context_line":"        self.driver.post_vip_plug(lb, vip_network)"},{"line_number":253,"context_line":"        self.assertEqual(1, exec_command.call_count)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    @mock.patch.object(ssh_driver.HaproxyManager, \u0027_execute_command\u0027)"},{"line_number":256,"context_line":"    def test_post_vip_plug(self, exec_command):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_87425a67","line":253,"in_reply_to":"3a50d1a3_47d0d2f7","updated":"2015-07-30 23:11:48.000000000","message":"i got lazy and meant to come back but procrastination","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"70a4e080abc39c7efc8f6b32beb310afe96ad9ba","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        vip_network \u003d network_models.Network(id\u003dMOCK_NETWORK_ID)"},{"line_number":251,"context_line":"        exec_command.return_value \u003d (\u0027\u0027, \u0027\u0027)"},{"line_number":252,"context_line":"        self.driver.post_vip_plug(lb, vip_network)"},{"line_number":253,"context_line":"        self.assertEqual(1, exec_command.call_count)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    @mock.patch.object(ssh_driver.HaproxyManager, \u0027_execute_command\u0027)"},{"line_number":256,"context_line":"    def test_post_vip_plug(self, exec_command):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_47d0d2f7","line":253,"in_reply_to":"3a50d1a3_a744361b","updated":"2015-07-30 22:49:18.000000000","message":"I don\u0027t usually recommend using mock.call_count (there is a reason they don\u0027t provide a direct assert for call count, I think -- it is recommended to really flesh out the full calls you expect). Is there a reason you don\u0027t want to fully mock out the calls?","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"76ea90166961a03b948066018c5a0c5f0efe73cc","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        )}"},{"line_number":270,"context_line":"        exec_command.return_value \u003d (\u0027eth1:\u0027, \u0027\u0027)"},{"line_number":271,"context_line":"        self.driver.post_vip_plug(lb, amphorae_net_config)"},{"line_number":272,"context_line":"        self.assertEqual(9, exec_command.call_count)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    @mock.patch.object(ssh_driver.HaproxyManager, \u0027_execute_command\u0027)"},{"line_number":275,"context_line":"    def test_post_network_plug_no_down_links(self, exec_command):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_e73a3e98","line":272,"updated":"2015-07-30 22:36:09.000000000","message":"so I would recommend to also check id the call got\u0027s called with the right commands","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"70a4e080abc39c7efc8f6b32beb310afe96ad9ba","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        )}"},{"line_number":270,"context_line":"        exec_command.return_value \u003d (\u0027eth1:\u0027, \u0027\u0027)"},{"line_number":271,"context_line":"        self.driver.post_vip_plug(lb, amphorae_net_config)"},{"line_number":272,"context_line":"        self.assertEqual(9, exec_command.call_count)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    @mock.patch.object(ssh_driver.HaproxyManager, \u0027_execute_command\u0027)"},{"line_number":275,"context_line":"    def test_post_network_plug_no_down_links(self, exec_command):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_67cdce5c","line":272,"in_reply_to":"3a50d1a3_e73a3e98","updated":"2015-07-30 22:49:18.000000000","message":"Same --  this test is weakened significantly by just blindly checking call count.","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"76ea90166961a03b948066018c5a0c5f0efe73cc","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                                  lb_network_ip\u003dMOCK_IP_ADDRESS)"},{"line_number":278,"context_line":"        exec_command.return_value \u003d (\u0027\u0027, \u0027\u0027)"},{"line_number":279,"context_line":"        self.driver.post_network_plug(amp)"},{"line_number":280,"context_line":"        self.assertEqual(1, exec_command.call_count)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    @mock.patch.object(ssh_driver.HaproxyManager, \u0027_execute_command\u0027)"},{"line_number":283,"context_line":"    def test_post_network_plug(self, exec_command):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_67470e1e","line":280,"updated":"2015-07-30 22:36:09.000000000","message":"ditto","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"70a4e080abc39c7efc8f6b32beb310afe96ad9ba","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                                  lb_network_ip\u003dMOCK_IP_ADDRESS)"},{"line_number":278,"context_line":"        exec_command.return_value \u003d (\u0027\u0027, \u0027\u0027)"},{"line_number":279,"context_line":"        self.driver.post_network_plug(amp)"},{"line_number":280,"context_line":"        self.assertEqual(1, exec_command.call_count)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    @mock.patch.object(ssh_driver.HaproxyManager, \u0027_execute_command\u0027)"},{"line_number":283,"context_line":"    def test_post_network_plug(self, exec_command):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_27d7c6ee","line":280,"in_reply_to":"3a50d1a3_67470e1e","updated":"2015-07-30 22:49:18.000000000","message":"Same.","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"76ea90166961a03b948066018c5a0c5f0efe73cc","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                                  lb_network_ip\u003dMOCK_IP_ADDRESS)"},{"line_number":286,"context_line":"        exec_command.return_value \u003d (\u0027eth1:\u0027, \u0027\u0027)"},{"line_number":287,"context_line":"        self.driver.post_network_plug(amp)"},{"line_number":288,"context_line":"        self.assertEqual(3, exec_command.call_count)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def test__configure_amp_interfaces(self):"},{"line_number":291,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_07540ac8","line":288,"updated":"2015-07-30 22:36:09.000000000","message":"same","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"70a4e080abc39c7efc8f6b32beb310afe96ad9ba","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                                  lb_network_ip\u003dMOCK_IP_ADDRESS)"},{"line_number":286,"context_line":"        exec_command.return_value \u003d (\u0027eth1:\u0027, \u0027\u0027)"},{"line_number":287,"context_line":"        self.driver.post_network_plug(amp)"},{"line_number":288,"context_line":"        self.assertEqual(3, exec_command.call_count)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def test__configure_amp_interfaces(self):"},{"line_number":291,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_c702a272","line":288,"in_reply_to":"3a50d1a3_07540ac8","updated":"2015-07-30 22:49:18.000000000","message":"Same.","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"}],"octavia/tests/unit/amphorae/drivers/test_noop_amphoraloadbalancer_driver.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"050cd60abe65f760c0716ff85e441b841efd12e2","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        self.driver.post_vip_plug(self.load_balancer,"},{"line_number":119,"context_line":"                                  self.amphorae_net_configs)"},{"line_number":120,"context_line":"        self.assertEqual((self.load_balancer.id,"},{"line_number":121,"context_line":"                          list(self.amphorae_net_configs)[0],"},{"line_number":122,"context_line":"                          \u0027post_vip_plug\u0027),"},{"line_number":123,"context_line":"                         self.driver.driver.amphoraconfig[("},{"line_number":124,"context_line":"                             self.load_balancer.id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_a79c365e","line":121,"updated":"2015-07-30 22:46:11.000000000","message":"Similar to my comment in a previous file, doing all of this in one line and using list()[0] seems almost obfuscated. Can this be simplified and expanded out so it\u0027s more human-readable? I am not really sure this makes sense as-is.","commit_id":"bf3e6322734fe84c2fbb11c5d4910ff585df87e2"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"70a4e080abc39c7efc8f6b32beb310afe96ad9ba","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        self.driver.post_vip_plug(self.load_balancer,"},{"line_number":119,"context_line":"                                  self.amphorae_net_configs)"},{"line_number":120,"context_line":"        self.assertEqual((self.load_balancer.id,"},{"line_number":121,"context_line":"                          list(self.amphorae_net_configs)[0],"},{"line_number":122,"context_line":"                          \u0027post_vip_plug\u0027),"},{"line_number":123,"context_line":"                         self.driver.driver.amphoraconfig[("},{"line_number":124,"context_line":"                             self.load_balancer.id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_e7079e7f","line":121,"updated":"2015-07-30 22:49:18.000000000","message":"Similar to my comment in a previous file, doing all of this in one line and using list()[0] seems almost obfuscated. Can this be simplified and expanded out so it\u0027s more human-readable? I am not really sure this makes sense as-is.","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"7f3ff6fa0b6e600493ab8013159da5cda393a0b2","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                                    self.amphorae_net_configs,"},{"line_number":122,"context_line":"                                    \u0027post_vip_plug\u0027)"},{"line_number":123,"context_line":"        actual_method_and_args \u003d self.driver.driver.amphoraconfig[("},{"line_number":124,"context_line":"            self.load_balancer.id, id(self.amphorae_net_configs)"},{"line_number":125,"context_line":"        )]"},{"line_number":126,"context_line":"        self.assertEqual(expected_method_and_args, actual_method_and_args)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_236c9335","line":124,"updated":"2015-07-31 04:25:54.000000000","message":"Here and previously, if you split the index out as an intermediate, it\u0027ll not look as wonky, and be way easier to read. I\u0027m still trying to figure out what\u0027s happening here -- the KEY for amphoraconfig is a tuple of lb_id and id(amp_net_configs)? Wtf is id() doing for you? I don\u0027t understand how this works still. The id() function gives you a memory address? How is that used in the key?","commit_id":"c2bdb48419238a7a40c16a70be8acfac76b9d46e"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"98a0bbc601f4934f63b572dff119d61cf3c223c6","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                                    self.amphorae_net_configs,"},{"line_number":122,"context_line":"                                    \u0027post_vip_plug\u0027)"},{"line_number":123,"context_line":"        actual_method_and_args \u003d self.driver.driver.amphoraconfig[("},{"line_number":124,"context_line":"            self.load_balancer.id, id(self.amphorae_net_configs)"},{"line_number":125,"context_line":"        )]"},{"line_number":126,"context_line":"        self.assertEqual(expected_method_and_args, actual_method_and_args)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_b89aedc3","line":124,"in_reply_to":"3a50d1a3_236c9335","updated":"2015-07-31 16:41:54.000000000","message":"its just a unique identifier of the parameter.  i dont find a problem with it and other than combining all the keys and values into a massive string to get a unique value, this is the best option that remains consistent with the rest of structure of noop driver.","commit_id":"c2bdb48419238a7a40c16a70be8acfac76b9d46e"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"f559415c7804171db886cdc80bc58d03ec4d3b5b","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                                    self.amphorae_net_configs,"},{"line_number":122,"context_line":"                                    \u0027post_vip_plug\u0027)"},{"line_number":123,"context_line":"        actual_method_and_args \u003d self.driver.driver.amphoraconfig[("},{"line_number":124,"context_line":"            self.load_balancer.id, id(self.amphorae_net_configs)"},{"line_number":125,"context_line":"        )]"},{"line_number":126,"context_line":"        self.assertEqual(expected_method_and_args, actual_method_and_args)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_c2281f88","line":124,"in_reply_to":"3a50d1a3_b89aedc3","updated":"2015-07-31 20:01:49.000000000","message":"Alright -- I think saying \"it\u0027s just as incomprehensible everywhere else\" is a bad reason to not fix it, when it could easily be fixed by making some intermediates to clear up what\u0027s happening... But you are correct that the logging-noop driver doesn\u0027t really matter much, so, whatever. I\u0027ll switch to +2, but I\u0027d still *prefer* it be fixed, even if only like this:\n\nunique_config_hash \u003d id(self.amphorae_net_configs) # Still unclear why this works\n\nlb_config_index \u003d (self.load_balancer.id, unique_config_hash)\n\nactual_method_and_args \u003d self.driver.driver.amphoraconfig[lb_config_index]","commit_id":"c2bdb48419238a7a40c16a70be8acfac76b9d46e"}],"octavia/tests/unit/controller/worker/tasks/test_amphora_driver_tasks.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"050cd60abe65f760c0716ff85e441b841efd12e2","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                                        mock_amphora_repo_update):"},{"line_number":226,"context_line":"        mock_driver.get_network.return_value \u003d _network_mock"},{"line_number":227,"context_line":"        _amphora_mock.id \u003d AMP_ID"},{"line_number":228,"context_line":"        _amphora_mock.compute_id \u003d \u00272\u0027"},{"line_number":229,"context_line":"        _LB_mock.amphorae \u003d [_amphora_mock]"},{"line_number":230,"context_line":"        amphora_post_network_plug_obj \u003d (amphora_driver_tasks."},{"line_number":231,"context_line":"                                         AmphoraePostNetworkPlug())"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_27a9067c","line":228,"updated":"2015-07-30 22:46:11.000000000","message":"We have constants defined above for the other things like this...","commit_id":"bf3e6322734fe84c2fbb11c5d4910ff585df87e2"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"70a4e080abc39c7efc8f6b32beb310afe96ad9ba","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                                        mock_amphora_repo_update):"},{"line_number":226,"context_line":"        mock_driver.get_network.return_value \u003d _network_mock"},{"line_number":227,"context_line":"        _amphora_mock.id \u003d AMP_ID"},{"line_number":228,"context_line":"        _amphora_mock.compute_id \u003d \u00272\u0027"},{"line_number":229,"context_line":"        _LB_mock.amphorae \u003d [_amphora_mock]"},{"line_number":230,"context_line":"        amphora_post_network_plug_obj \u003d (amphora_driver_tasks."},{"line_number":231,"context_line":"                                         AmphoraePostNetworkPlug())"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_a701966c","line":228,"updated":"2015-07-30 22:49:18.000000000","message":"We have constants defined above for the other things like this...","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"368875afa236dae037e177816557cc8ae9b4cfe2","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                                        mock_amphora_repo_update):"},{"line_number":226,"context_line":"        mock_driver.get_network.return_value \u003d _network_mock"},{"line_number":227,"context_line":"        _amphora_mock.id \u003d AMP_ID"},{"line_number":228,"context_line":"        _amphora_mock.compute_id \u003d \u00272\u0027"},{"line_number":229,"context_line":"        _LB_mock.amphorae \u003d [_amphora_mock]"},{"line_number":230,"context_line":"        amphora_post_network_plug_obj \u003d (amphora_driver_tasks."},{"line_number":231,"context_line":"                                         AmphoraePostNetworkPlug())"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_472452c5","line":228,"in_reply_to":"3a50d1a3_a701966c","updated":"2015-07-30 23:11:48.000000000","message":"yeah yeah yeah","commit_id":"2498ef13714ee77462ce5380f5cc2a46cb8a124b"}]}
