)]}'
{"neutron/agent/windows/ip_lib.py":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"01a272ffec9db024d7c003bef1d8cad6daa604eb","unresolved":false,"context_lines":[{"line_number":45,"context_line":"class IPDevice(object):"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def __init__(self, name):"},{"line_number":48,"context_line":"        self.device_name \u003d name"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def device_has_ip(self, ip):"},{"line_number":51,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_610eef35","side":"PARENT","line":48,"range":{"start_line":48,"start_character":8,"end_line":48,"end_character":31},"updated":"2016-12-01 15:56:30.000000000","message":"was this change necessary?","commit_id":"e2ce3b6545a8a89db4f5c38fc1eb25e8e673f723"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6360d9d0cd957ba95275542bfe9b32c4067f34be","unresolved":false,"context_lines":[{"line_number":45,"context_line":"class IPDevice(object):"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def __init__(self, name):"},{"line_number":48,"context_line":"        self.device_name \u003d name"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def device_has_ip(self, ip):"},{"line_number":51,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_b83f5524","side":"PARENT","line":48,"range":{"start_line":48,"start_character":8,"end_line":48,"end_character":31},"in_reply_to":"3a71b18c_610eef35","updated":"2016-12-01 18:13:25.000000000","message":"Was necessary to match linux/IPDevice implementation.","commit_id":"e2ce3b6545a8a89db4f5c38fc1eb25e8e673f723"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"01a272ffec9db024d7c003bef1d8cad6daa604eb","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                     device_addresses.get(netifaces.AF_INET, [])]"},{"line_number":71,"context_line":"        return ip in addresses"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @property"},{"line_number":74,"context_line":"    def name(self):"},{"line_number":75,"context_line":"        return self._name"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class IPLink(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_e1e4bf3c","line":75,"range":{"start_line":73,"start_character":3,"end_line":75,"end_character":25},"updated":"2016-12-01 15:56:30.000000000","message":"Typically the property decorator is used in two cases:\n1. Complex calculation hidden behind an attribute:\nor\n2. Validation\nSince this is not doing either of those I think we can leave this they way it was.","commit_id":"decf220a19fd8ff9364f6870967d9f97201106bd"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6360d9d0cd957ba95275542bfe9b32c4067f34be","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                     device_addresses.get(netifaces.AF_INET, [])]"},{"line_number":71,"context_line":"        return ip in addresses"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @property"},{"line_number":74,"context_line":"    def name(self):"},{"line_number":75,"context_line":"        return self._name"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class IPLink(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_9888d9e9","line":75,"range":{"start_line":73,"start_character":3,"end_line":75,"end_character":25},"in_reply_to":"3a71b18c_e1e4bf3c","updated":"2016-12-01 18:13:25.000000000","message":"I agree. I just (lazily) copied what was done in linux/IPdevice implementation.\n\nI\u0027ll remove it.","commit_id":"decf220a19fd8ff9364f6870967d9f97201106bd"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8b5eafbcabacc4216695e049a11a0deedac8a1c6","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.name \u003d name"},{"line_number":49,"context_line":"        self.link \u003d IPLink(self)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def read_ifaddresses(self):"},{"line_number":52,"context_line":"        try:"},{"line_number":53,"context_line":"            device_addresses \u003d netifaces.ifaddresses(self.name)"},{"line_number":54,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_f2fe4437","line":51,"updated":"2016-12-08 04:10:56.000000000","message":"Should be private, _read_ifaddresses, but I see you use it in the unit tests?","commit_id":"70f0982f76bb29a633e573b744f018d2c80d9b5d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c21c656db94e3bf57dabe042961fcfcb2cd4f226","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.name \u003d name"},{"line_number":49,"context_line":"        self.link \u003d IPLink(self)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def read_ifaddresses(self):"},{"line_number":52,"context_line":"        try:"},{"line_number":53,"context_line":"            device_addresses \u003d netifaces.ifaddresses(self.name)"},{"line_number":54,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_6adcea18","line":51,"in_reply_to":"3a71b18c_64f26b08","updated":"2016-12-08 13:25:51.000000000","message":"Well, it\u0027s done in the linux.ip_lib code already - classes local to the module can still call it, outside ones just shouldn\u0027t.  But I guess it\u0027s a nit.","commit_id":"70f0982f76bb29a633e573b744f018d2c80d9b5d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4041b8a31359569d6a51de65d76edcc689d2a54a","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.name \u003d name"},{"line_number":49,"context_line":"        self.link \u003d IPLink(self)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def read_ifaddresses(self):"},{"line_number":52,"context_line":"        try:"},{"line_number":53,"context_line":"            device_addresses \u003d netifaces.ifaddresses(self.name)"},{"line_number":54,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_64f26b08","line":51,"in_reply_to":"3a71b18c_f2fe4437","updated":"2016-12-08 09:20:22.000000000","message":"It\u0027s used outside the class, in L81. I shouldn\u0027t make it private.","commit_id":"70f0982f76bb29a633e573b744f018d2c80d9b5d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8b5eafbcabacc4216695e049a11a0deedac8a1c6","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        device_addresses \u003d self._parent.read_ifaddresses()"},{"line_number":82,"context_line":"        if device_addresses is None:"},{"line_number":83,"context_line":"            return False"},{"line_number":84,"context_line":"        return [ip_addr[\u0027addr\u0027] for ip_addr in"},{"line_number":85,"context_line":"                device_addresses.get(netifaces.AF_LINK, [])]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_b2a3ec4e","line":84,"range":{"start_line":84,"start_character":16,"end_line":84,"end_character":23},"updated":"2016-12-08 04:10:56.000000000","message":"These aren\u0027t IP addresses, so maybe eth_addr is a better name?","commit_id":"70f0982f76bb29a633e573b744f018d2c80d9b5d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4041b8a31359569d6a51de65d76edcc689d2a54a","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        device_addresses \u003d self._parent.read_ifaddresses()"},{"line_number":82,"context_line":"        if device_addresses is None:"},{"line_number":83,"context_line":"            return False"},{"line_number":84,"context_line":"        return [ip_addr[\u0027addr\u0027] for ip_addr in"},{"line_number":85,"context_line":"                device_addresses.get(netifaces.AF_LINK, [])]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_842a272b","line":84,"range":{"start_line":84,"start_character":16,"end_line":84,"end_character":23},"in_reply_to":"3a71b18c_b2a3ec4e","updated":"2016-12-08 09:20:22.000000000","message":"Yes, you are right. This variable name is not very accurate","commit_id":"70f0982f76bb29a633e573b744f018d2c80d9b5d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"17417481f1ca3d75d03cb53dcd87078911f278a9","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                      self.name)"},{"line_number":57,"context_line":"            return None"},{"line_number":58,"context_line":"        except OSError:"},{"line_number":59,"context_line":"            LOG.error(_LE(\"Failed to get ip addresses for interface: %s.\"),"},{"line_number":60,"context_line":"                      self.name)"},{"line_number":61,"context_line":"            return None"},{"line_number":62,"context_line":"        return device_addresses"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_4500ffaa","line":59,"range":{"start_line":59,"start_character":41,"end_line":59,"end_character":43},"updated":"2016-12-08 13:45:21.000000000","message":"Can delete \u0027ip\u0027 as netifaces.ifaddresses(name) will return all address families, not just IP.","commit_id":"1a3c1f7ca1f4b1d34582c610eafacbce4dd79b59"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"eda636a373efcf784b3025be6c5203e78a3ed0c8","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                      self.name)"},{"line_number":57,"context_line":"            return None"},{"line_number":58,"context_line":"        except OSError:"},{"line_number":59,"context_line":"            LOG.error(_LE(\"Failed to get ip addresses for interface: %s.\"),"},{"line_number":60,"context_line":"                      self.name)"},{"line_number":61,"context_line":"            return None"},{"line_number":62,"context_line":"        return device_addresses"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_ca5a302a","line":59,"range":{"start_line":59,"start_character":41,"end_line":59,"end_character":43},"in_reply_to":"3a71b18c_4500ffaa","updated":"2016-12-09 10:55:28.000000000","message":"Done","commit_id":"1a3c1f7ca1f4b1d34582c610eafacbce4dd79b59"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"959e9c8f29dc6b77a5fb5fbf0f0fa95aeb0aefba","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        except ValueError:"},{"line_number":55,"context_line":"            LOG.error(_LE(\"The device does not exist on the system: %s.\"),"},{"line_number":56,"context_line":"                      self.name)"},{"line_number":57,"context_line":"            return None"},{"line_number":58,"context_line":"        except OSError:"},{"line_number":59,"context_line":"            LOG.error(_LE(\"Failed to get interface addresses: %s.\"),"},{"line_number":60,"context_line":"                      self.name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_2f568fd2","line":57,"updated":"2017-01-13 19:54:28.000000000","message":"please consider using \u0027return\u0027. None is superfluous","commit_id":"b00ac42ad1f0c501d4eb6e76103d9a3ee2c25901"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ec4c16f91f45565f02aac01b2eabc79125db807a","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        except ValueError:"},{"line_number":55,"context_line":"            LOG.error(_LE(\"The device does not exist on the system: %s.\"),"},{"line_number":56,"context_line":"                      self.name)"},{"line_number":57,"context_line":"            return None"},{"line_number":58,"context_line":"        except OSError:"},{"line_number":59,"context_line":"            LOG.error(_LE(\"Failed to get interface addresses: %s.\"),"},{"line_number":60,"context_line":"                      self.name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_77562d5d","line":57,"in_reply_to":"7a3c09a3_2f568fd2","updated":"2017-01-17 17:41:05.000000000","message":"Done","commit_id":"b00ac42ad1f0c501d4eb6e76103d9a3ee2c25901"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"959e9c8f29dc6b77a5fb5fbf0f0fa95aeb0aefba","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        return ip in addresses"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class IPLink(object):"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def __init__(self, parent):"},{"line_number":77,"context_line":"        self._parent \u003d parent"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_2f04cfbe","line":74,"updated":"2017-01-13 19:54:28.000000000","message":"I am not sure I appreciate the need of having this class.","commit_id":"b00ac42ad1f0c501d4eb6e76103d9a3ee2c25901"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ec4c16f91f45565f02aac01b2eabc79125db807a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        return ip in addresses"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class IPLink(object):"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def __init__(self, parent):"},{"line_number":77,"context_line":"        self._parent \u003d parent"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_770e2d3c","line":74,"in_reply_to":"7a3c09a3_2f04cfbe","updated":"2017-01-17 17:41:05.000000000","message":"I created this class imitating the implementation in Linux and also be extended like linux.IPLink\n\nBut, of course, I can add the \"address\" function to \"IPDevice\"","commit_id":"b00ac42ad1f0c501d4eb6e76103d9a3ee2c25901"}],"neutron/tests/unit/agent/windows/test_ip_lib.py":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"01a272ffec9db024d7c003bef1d8cad6daa604eb","unresolved":false,"context_lines":[{"line_number":57,"context_line":"class TestIpDevice(base.BaseTestCase):\r"},{"line_number":58,"context_line":"\r"},{"line_number":59,"context_line":"    @mock.patch(\u0027netifaces.ifaddresses\u0027)\r"},{"line_number":60,"context_line":"    def test_read_read_ifaddresses(self, mock_netifaces):\r"},{"line_number":61,"context_line":"        mock_address \u003d {\u0027addr\u0027: mock.sentinel.fake_addr}\r"},{"line_number":62,"context_line":"        mock_netifaces.return_value \u003d {netifaces.AF_INET: [mock_address]}\r"},{"line_number":63,"context_line":"        ret \u003d ip_lib.IPDevice(\"fake_dev\").read_ifaddresses()\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_55dd346f","line":60,"range":{"start_line":60,"start_character":13,"end_line":60,"end_character":22},"updated":"2016-12-01 15:56:30.000000000","message":"typo? should just be one read right?","commit_id":"decf220a19fd8ff9364f6870967d9f97201106bd"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6360d9d0cd957ba95275542bfe9b32c4067f34be","unresolved":false,"context_lines":[{"line_number":57,"context_line":"class TestIpDevice(base.BaseTestCase):\r"},{"line_number":58,"context_line":"\r"},{"line_number":59,"context_line":"    @mock.patch(\u0027netifaces.ifaddresses\u0027)\r"},{"line_number":60,"context_line":"    def test_read_read_ifaddresses(self, mock_netifaces):\r"},{"line_number":61,"context_line":"        mock_address \u003d {\u0027addr\u0027: mock.sentinel.fake_addr}\r"},{"line_number":62,"context_line":"        mock_netifaces.return_value \u003d {netifaces.AF_INET: [mock_address]}\r"},{"line_number":63,"context_line":"        ret \u003d ip_lib.IPDevice(\"fake_dev\").read_ifaddresses()\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_b8b0358d","line":60,"range":{"start_line":60,"start_character":13,"end_line":60,"end_character":22},"in_reply_to":"3a71b18c_55dd346f","updated":"2016-12-01 18:13:25.000000000","message":"Yes, I need to read read twice what I write","commit_id":"decf220a19fd8ff9364f6870967d9f97201106bd"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"01a272ffec9db024d7c003bef1d8cad6daa604eb","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            ret \u003d ip_device.device_has_ip(mock.sentinel.fake_addr)\r"},{"line_number":90,"context_line":"            self.assertTrue(ret)\r"},{"line_number":91,"context_line":"\r"},{"line_number":92,"context_line":"    def test_device_has_ip_false(self):\r"},{"line_number":93,"context_line":"        ip_device \u003d ip_lib.IPDevice(\"fake_dev\")\r"},{"line_number":94,"context_line":"        with mock.patch.object(ip_device, \"read_ifaddresses\", return_value\u003d{}):\r"},{"line_number":95,"context_line":"            ret \u003d ip_device.device_has_ip(mock.sentinel.fake_addr)\r"},{"line_number":96,"context_line":"            self.assertFalse(ret)\r"},{"line_number":97,"context_line":"\r"},{"line_number":98,"context_line":"    def test_device_has_ip_error(self):\r"},{"line_number":99,"context_line":"        ip_device \u003d ip_lib.IPDevice(\"fake_dev\")\r"},{"line_number":100,"context_line":"        with mock.patch.object(ip_device, \"read_ifaddresses\",\r"},{"line_number":101,"context_line":"                               return_value\u003dNone):\r"},{"line_number":102,"context_line":"            ret \u003d ip_device.device_has_ip(mock.sentinel.fake_addr)\r"},{"line_number":103,"context_line":"            self.assertFalse(ret)\r"},{"line_number":104,"context_line":"\r"},{"line_number":105,"context_line":"\r"},{"line_number":106,"context_line":"class TestIPLink(base.BaseTestCase):\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_db36d5b3","line":103,"range":{"start_line":92,"start_character":4,"end_line":103,"end_character":33},"updated":"2016-12-01 15:56:30.000000000","message":"The only difference in these tests is the return value but in the code they walk different branches. Do you think we should mock the ``get`` call on the device_addresses variable? (Line 70 from windows/ip_lib.py) so we can assert the number of calls? test..ip_false should call it once where test.._ip_error should call it zero times.","commit_id":"decf220a19fd8ff9364f6870967d9f97201106bd"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6360d9d0cd957ba95275542bfe9b32c4067f34be","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            ret \u003d ip_device.device_has_ip(mock.sentinel.fake_addr)\r"},{"line_number":90,"context_line":"            self.assertTrue(ret)\r"},{"line_number":91,"context_line":"\r"},{"line_number":92,"context_line":"    def test_device_has_ip_false(self):\r"},{"line_number":93,"context_line":"        ip_device \u003d ip_lib.IPDevice(\"fake_dev\")\r"},{"line_number":94,"context_line":"        with mock.patch.object(ip_device, \"read_ifaddresses\", return_value\u003d{}):\r"},{"line_number":95,"context_line":"            ret \u003d ip_device.device_has_ip(mock.sentinel.fake_addr)\r"},{"line_number":96,"context_line":"            self.assertFalse(ret)\r"},{"line_number":97,"context_line":"\r"},{"line_number":98,"context_line":"    def test_device_has_ip_error(self):\r"},{"line_number":99,"context_line":"        ip_device \u003d ip_lib.IPDevice(\"fake_dev\")\r"},{"line_number":100,"context_line":"        with mock.patch.object(ip_device, \"read_ifaddresses\",\r"},{"line_number":101,"context_line":"                               return_value\u003dNone):\r"},{"line_number":102,"context_line":"            ret \u003d ip_device.device_has_ip(mock.sentinel.fake_addr)\r"},{"line_number":103,"context_line":"            self.assertFalse(ret)\r"},{"line_number":104,"context_line":"\r"},{"line_number":105,"context_line":"\r"},{"line_number":106,"context_line":"class TestIPLink(base.BaseTestCase):\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_dba08b93","line":103,"range":{"start_line":92,"start_character":4,"end_line":103,"end_character":33},"in_reply_to":"3a71b18c_db36d5b3","updated":"2016-12-01 18:13:25.000000000","message":"I shouldn\u0027t mock a function variable. Instead of that, I should test possible scenarios and outputs. I think the function is short and simple, and these tests are enough","commit_id":"decf220a19fd8ff9364f6870967d9f97201106bd"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"01a272ffec9db024d7c003bef1d8cad6daa604eb","unresolved":false,"context_lines":[{"line_number":112,"context_line":"\r"},{"line_number":113,"context_line":"    def test_address(self):\r"},{"line_number":114,"context_line":"        mock_address \u003d {\u0027addr\u0027: mock.sentinel.fake_addr}\r"},{"line_number":115,"context_line":"        with mock.patch.object(self._ip_link._parent, \"read_ifaddresses\",\r"},{"line_number":116,"context_line":"                return_value\u003d{netifaces.AF_LINK: [mock_address]}):\r"},{"line_number":117,"context_line":"            self.assertEqual([mock_address[\u0027addr\u0027]], self._ip_link.address)\r"},{"line_number":118,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_fbd71121","line":115,"range":{"start_line":115,"start_character":8,"end_line":115,"end_character":73},"updated":"2016-12-01 15:56:30.000000000","message":"Since self._ip_link is a class attribute you could pull this mock to the setup method like\n\n\u003e self._ip_link.read_ifaddresses \u003d mock.Mock()\n\nthen in the functions you could do..\n\n\u003e self._ip_link.read_ifaddresses.return_value \u003d \u003cyour value\u003e\n\nBy doing this you avoid using the with statements and it becomes easier to read. The mock.patch.object is typically used in the format:\n\n\u003e mock.patch.object(\u003cmodule[.Class]\u003e, \u0027\u003cfunction name\u003e\u0027)","commit_id":"decf220a19fd8ff9364f6870967d9f97201106bd"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6360d9d0cd957ba95275542bfe9b32c4067f34be","unresolved":false,"context_lines":[{"line_number":112,"context_line":"\r"},{"line_number":113,"context_line":"    def test_address(self):\r"},{"line_number":114,"context_line":"        mock_address \u003d {\u0027addr\u0027: mock.sentinel.fake_addr}\r"},{"line_number":115,"context_line":"        with mock.patch.object(self._ip_link._parent, \"read_ifaddresses\",\r"},{"line_number":116,"context_line":"                return_value\u003d{netifaces.AF_LINK: [mock_address]}):\r"},{"line_number":117,"context_line":"            self.assertEqual([mock_address[\u0027addr\u0027]], self._ip_link.address)\r"},{"line_number":118,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_9b037373","line":115,"range":{"start_line":115,"start_character":8,"end_line":115,"end_character":73},"in_reply_to":"3a71b18c_fbd71121","updated":"2016-12-01 18:13:25.000000000","message":"Yes, I always make this kind of mistakes...","commit_id":"decf220a19fd8ff9364f6870967d9f97201106bd"}]}
