)]}'
{"ovn_octavia_provider/common/clients.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"ef7d0d852bfcebd516b9cf1d06747b53c6b1300c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        ks_loading.register_auth_conf_options(cfg.CONF, self.section)"},{"line_number":36,"context_line":"        ks_loading.register_session_conf_options(cfg.CONF, self.section)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def get_session(self):"},{"line_number":39,"context_line":"        \"\"\"Initializes a Keystone session."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        :return: a Keystone Session object"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_a4e24c00","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":19},"updated":"2020-03-20 15:34:49.000000000","message":"Since the session is cached, it may be good to make this a property","commit_id":"e2649ffb1d5d2943c553a957ff8fbbb9e325ef3d"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c072a6b70e1a3393306647221460c961b7e4cd86","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        ks_loading.register_auth_conf_options(cfg.CONF, self.section)"},{"line_number":36,"context_line":"        ks_loading.register_session_conf_options(cfg.CONF, self.section)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def get_session(self):"},{"line_number":39,"context_line":"        \"\"\"Initializes a Keystone session."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        :return: a Keystone Session object"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_8378ccf8","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":19},"in_reply_to":"df33271e_a4e24c00","updated":"2020-03-23 12:08:17.000000000","message":"Done","commit_id":"e2649ffb1d5d2943c553a957ff8fbbb9e325ef3d"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"ef7d0d852bfcebd516b9cf1d06747b53c6b1300c","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        ks_loading.register_session_conf_options(cfg.CONF, self.section)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def get_session(self):"},{"line_number":39,"context_line":"        \"\"\"Initializes a Keystone session."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        :return: a Keystone Session object"},{"line_number":42,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_e41734ed","line":39,"range":{"start_line":39,"start_character":11,"end_line":39,"end_character":22},"updated":"2020-03-20 15:34:49.000000000","message":"Initialize","commit_id":"e2649ffb1d5d2943c553a957ff8fbbb9e325ef3d"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c072a6b70e1a3393306647221460c961b7e4cd86","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        ks_loading.register_session_conf_options(cfg.CONF, self.section)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def get_session(self):"},{"line_number":39,"context_line":"        \"\"\"Initializes a Keystone session."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        :return: a Keystone Session object"},{"line_number":42,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_630ae88a","line":39,"range":{"start_line":39,"start_character":11,"end_line":39,"end_character":22},"in_reply_to":"df33271e_e41734ed","updated":"2020-03-23 12:08:17.000000000","message":"Done","commit_id":"e2649ffb1d5d2943c553a957ff8fbbb9e325ef3d"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"ef7d0d852bfcebd516b9cf1d06747b53c6b1300c","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        return self._session"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def get_auth(self):"},{"line_number":50,"context_line":"        if not self._auth:"},{"line_number":51,"context_line":"            self._auth \u003d ks_loading.load_auth_from_conf_options("},{"line_number":52,"context_line":"                cfg.CONF, self.section)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_04f058c9","line":49,"updated":"2020-03-20 15:34:49.000000000","message":"ditto","commit_id":"e2649ffb1d5d2943c553a957ff8fbbb9e325ef3d"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c072a6b70e1a3393306647221460c961b7e4cd86","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        return self._session"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def get_auth(self):"},{"line_number":50,"context_line":"        if not self._auth:"},{"line_number":51,"context_line":"            self._auth \u003d ks_loading.load_auth_from_conf_options("},{"line_number":52,"context_line":"                cfg.CONF, self.section)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_637dc8e6","line":49,"in_reply_to":"df33271e_04f058c9","updated":"2020-03-23 12:08:17.000000000","message":"Done","commit_id":"e2649ffb1d5d2943c553a957ff8fbbb9e325ef3d"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"ef7d0d852bfcebd516b9cf1d06747b53c6b1300c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        return self.get_auth().get_user_id(self.get_session())"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class NeutronAuth(object):"},{"line_number":60,"context_line":"    neutron_client \u003d None"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_24a59cb6","line":59,"range":{"start_line":59,"start_character":6,"end_line":59,"end_character":17},"updated":"2020-03-20 15:34:49.000000000","message":"It would be great to make a singleton instead of storing a state to class. You can use metaclass to elegantly tackle it: https://www.python-course.eu/python3_metaclasses.php","commit_id":"e2649ffb1d5d2943c553a957ff8fbbb9e325ef3d"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c072a6b70e1a3393306647221460c961b7e4cd86","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        return self.get_auth().get_user_id(self.get_session())"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class NeutronAuth(object):"},{"line_number":60,"context_line":"    neutron_client \u003d None"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_89b74bd9","line":59,"range":{"start_line":59,"start_character":6,"end_line":59,"end_character":17},"in_reply_to":"df33271e_24a59cb6","updated":"2020-03-23 12:08:17.000000000","message":"Please take a look if change in last PS makes sense for You! Thanks","commit_id":"e2649ffb1d5d2943c553a957ff8fbbb9e325ef3d"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"53c82b3ce934e0cc67b0afa240b49f31d64b8a00","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class NeutronAuth(metaclass\u003dSingleton):"},{"line_number":68,"context_line":"    @property"},{"line_number":69,"context_line":"    def neutron_client(self):"},{"line_number":70,"context_line":"        return self._neutron_client"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def __init__(self, region, service_name\u003dNone, endpoint\u003dNone,"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_df71f2e2","line":69,"updated":"2020-03-24 13:43:54.000000000","message":"super nit: I\u0027d put __init__ as a first method.","commit_id":"fab347200560e3a3eaa1338085b16760758df018"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"dfaa4913c745c94e2381d367e509bf1a41b7eb46","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class NeutronAuth(metaclass\u003dSingleton):"},{"line_number":68,"context_line":"    @property"},{"line_number":69,"context_line":"    def neutron_client(self):"},{"line_number":70,"context_line":"        return self._neutron_client"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def __init__(self, region, service_name\u003dNone, endpoint\u003dNone,"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_a1fe6835","line":69,"in_reply_to":"df33271e_df71f2e2","updated":"2020-03-26 15:30:37.000000000","message":"Done","commit_id":"fab347200560e3a3eaa1338085b16760758df018"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a56bcb86e01734e67d347152f772f49e344d92b8","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":98,"context_line":"                LOG.exception(\"Error creating Neutron client.\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @property"},{"line_number":101,"context_line":"    def neutron_client(self):"},{"line_number":102,"context_line":"        return self._neutron_client"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_ae48d55b","line":102,"range":{"start_line":100,"start_character":0,"end_line":102,"end_character":35},"updated":"2020-03-30 15:43:51.000000000","message":"Hmm, do you even need it? :) Maybe you can use self.neutron_client on L94.","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"af25c3aa5b1eb88d9a3a6b6984eff4ce2e200f97","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":98,"context_line":"                LOG.exception(\"Error creating Neutron client.\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @property"},{"line_number":101,"context_line":"    def neutron_client(self):"},{"line_number":102,"context_line":"        return self._neutron_client"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_81b836e5","line":102,"range":{"start_line":100,"start_character":0,"end_line":102,"end_character":35},"in_reply_to":"df33271e_ae48d55b","updated":"2020-03-31 07:57:46.000000000","message":"Done","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"}],"ovn_octavia_provider/driver.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"662b804a6786145e6d1911a7f087bda6c8145a6e","unresolved":false,"context_lines":[{"line_number":619,"context_line":"            neutron_client \u003d get_neutron_client()"},{"line_number":620,"context_line":"            try:"},{"line_number":621,"context_line":"                subnet \u003d neutron_client.show_subnet(subnet_id)"},{"line_number":622,"context_line":"                ls_name \u003d utils.ovn_name(subnet[\u0027network_id\u0027])"},{"line_number":623,"context_line":"            except n_exc.NotFound:"},{"line_number":624,"context_line":"                LOG.warning(\u0027Subnet %s not found while trying to \u0027"},{"line_number":625,"context_line":"                            \u0027fetch its data.\u0027, subnet_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_76ce1e5b","line":622,"range":{"start_line":622,"start_character":41,"end_line":622,"end_character":47},"updated":"2020-03-19 11:48:31.000000000","message":"subnet here is dict with \u0027subnet\u0027 as first key","commit_id":"ba2dc22d8a297a41676f59e33c6a13121694b1f2"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"53c82b3ce934e0cc67b0afa240b49f31d64b8a00","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            insecure\u003dCONF.neutron.insecure,"},{"line_number":100,"context_line":"            ca_cert\u003dCONF.neutron.ca_certificates_file,"},{"line_number":101,"context_line":"        ).neutron_client"},{"line_number":102,"context_line":"    except n_exc.NeutronClientException:"},{"line_number":103,"context_line":"        msg \u003d _(\u0027Cannot inialize Neutron Client. \u0027"},{"line_number":104,"context_line":"                \u0027Please verify Neutron service configuration \u0027"},{"line_number":105,"context_line":"                \u0027in Octavia API configuration.\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_1aa52805","line":102,"updated":"2020-03-24 13:43:54.000000000","message":"We may want to see the reason of the failure here part of the message below.","commit_id":"fab347200560e3a3eaa1338085b16760758df018"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"dfaa4913c745c94e2381d367e509bf1a41b7eb46","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            insecure\u003dCONF.neutron.insecure,"},{"line_number":100,"context_line":"            ca_cert\u003dCONF.neutron.ca_certificates_file,"},{"line_number":101,"context_line":"        ).neutron_client"},{"line_number":102,"context_line":"    except n_exc.NeutronClientException:"},{"line_number":103,"context_line":"        msg \u003d _(\u0027Cannot inialize Neutron Client. \u0027"},{"line_number":104,"context_line":"                \u0027Please verify Neutron service configuration \u0027"},{"line_number":105,"context_line":"                \u0027in Octavia API configuration.\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_c1b1ec91","line":102,"in_reply_to":"df33271e_1aa52805","updated":"2020-03-26 15:30:37.000000000","message":"right, lemme add it to the exception string.","commit_id":"fab347200560e3a3eaa1338085b16760758df018"}],"ovn_octavia_provider/tests/unit/common/test_clients.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a56bcb86e01734e67d347152f772f49e344d92b8","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \u0027keystoneauth1.loading.load_session_from_conf_options\u0027)"},{"line_number":33,"context_line":"    def test_cached_session(self, kl):"},{"line_number":34,"context_line":"        ksession \u003d clients.KeystoneSession()"},{"line_number":35,"context_line":"        self.assertEqual("},{"line_number":36,"context_line":"            ksession.session,"},{"line_number":37,"context_line":"            ksession.session)"},{"line_number":38,"context_line":"        kl.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_8e17d145","line":35,"range":{"start_line":35,"start_character":13,"end_line":35,"end_character":24},"updated":"2020-03-30 15:43:51.000000000","message":"assertIs","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"af25c3aa5b1eb88d9a3a6b6984eff4ce2e200f97","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \u0027keystoneauth1.loading.load_session_from_conf_options\u0027)"},{"line_number":33,"context_line":"    def test_cached_session(self, kl):"},{"line_number":34,"context_line":"        ksession \u003d clients.KeystoneSession()"},{"line_number":35,"context_line":"        self.assertEqual("},{"line_number":36,"context_line":"            ksession.session,"},{"line_number":37,"context_line":"            ksession.session)"},{"line_number":38,"context_line":"        kl.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_e1d02222","line":35,"range":{"start_line":35,"start_character":13,"end_line":35,"end_character":24},"in_reply_to":"df33271e_8e17d145","updated":"2020-03-31 07:57:46.000000000","message":"Done","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a56bcb86e01734e67d347152f772f49e344d92b8","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \u0027keystoneauth1.loading.load_auth_from_conf_options\u0027)"},{"line_number":43,"context_line":"    def test_cached_auth(self, kl):"},{"line_number":44,"context_line":"        ksession \u003d clients.KeystoneSession()"},{"line_number":45,"context_line":"        self.assertEqual("},{"line_number":46,"context_line":"            ksession.auth,"},{"line_number":47,"context_line":"            ksession.auth)"},{"line_number":48,"context_line":"        kl.assert_called_once_with(mock.ANY, \u0027service_auth\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_ce2ef990","line":45,"range":{"start_line":45,"start_character":13,"end_line":45,"end_character":24},"updated":"2020-03-30 15:43:51.000000000","message":"assertIs","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"af25c3aa5b1eb88d9a3a6b6984eff4ce2e200f97","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \u0027keystoneauth1.loading.load_auth_from_conf_options\u0027)"},{"line_number":43,"context_line":"    def test_cached_auth(self, kl):"},{"line_number":44,"context_line":"        ksession \u003d clients.KeystoneSession()"},{"line_number":45,"context_line":"        self.assertEqual("},{"line_number":46,"context_line":"            ksession.auth,"},{"line_number":47,"context_line":"            ksession.auth)"},{"line_number":48,"context_line":"        kl.assert_called_once_with(mock.ANY, \u0027service_auth\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_c1cd1e86","line":45,"range":{"start_line":45,"start_character":13,"end_line":45,"end_character":24},"in_reply_to":"df33271e_ce2ef990","updated":"2020-03-31 07:57:46.000000000","message":"Done","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a56bcb86e01734e67d347152f772f49e344d92b8","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.mock_client \u003d mock.patch("},{"line_number":55,"context_line":"            \u0027neutronclient.neutron.client.Client\u0027).start()"},{"line_number":56,"context_line":"        self.client_args \u003d {"},{"line_number":57,"context_line":"            \u0027endpoint\u0027: mock.Mock(),"},{"line_number":58,"context_line":"            \u0027region\u0027: mock.Mock(),"},{"line_number":59,"context_line":"            \u0027endpoint_type\u0027: mock.Mock(),"},{"line_number":60,"context_line":"            \u0027service_name\u0027: mock.Mock(),"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_6e3d2dc3","line":57,"range":{"start_line":57,"start_character":24,"end_line":57,"end_character":35},"updated":"2020-03-30 15:43:51.000000000","message":"Mock() is actually quite expensive. Would using \"object()\" work?","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"af25c3aa5b1eb88d9a3a6b6984eff4ce2e200f97","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.mock_client \u003d mock.patch("},{"line_number":55,"context_line":"            \u0027neutronclient.neutron.client.Client\u0027).start()"},{"line_number":56,"context_line":"        self.client_args \u003d {"},{"line_number":57,"context_line":"            \u0027endpoint\u0027: mock.Mock(),"},{"line_number":58,"context_line":"            \u0027region\u0027: mock.Mock(),"},{"line_number":59,"context_line":"            \u0027endpoint_type\u0027: mock.Mock(),"},{"line_number":60,"context_line":"            \u0027service_name\u0027: mock.Mock(),"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_21c7aa66","line":57,"range":{"start_line":57,"start_character":24,"end_line":57,"end_character":35},"in_reply_to":"df33271e_6e3d2dc3","updated":"2020-03-31 07:57:46.000000000","message":"Done","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a56bcb86e01734e67d347152f772f49e344d92b8","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def test_singleton(self):"},{"line_number":78,"context_line":"        c1 \u003d clients.NeutronAuth(**self.client_args)"},{"line_number":79,"context_line":"        c2 \u003d clients.NeutronAuth(**self.client_args)"},{"line_number":80,"context_line":"        self.assertEqual(c1, c2)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def test_singleton_exception(self):"},{"line_number":83,"context_line":"        # Make sure we have test env."}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_2e07a51a","line":80,"range":{"start_line":80,"start_character":13,"end_line":80,"end_character":24},"updated":"2020-03-30 15:43:51.000000000","message":"assertIs","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"af25c3aa5b1eb88d9a3a6b6984eff4ce2e200f97","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def test_singleton(self):"},{"line_number":78,"context_line":"        c1 \u003d clients.NeutronAuth(**self.client_args)"},{"line_number":79,"context_line":"        c2 \u003d clients.NeutronAuth(**self.client_args)"},{"line_number":80,"context_line":"        self.assertEqual(c1, c2)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def test_singleton_exception(self):"},{"line_number":83,"context_line":"        # Make sure we have test env."}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_01c4265e","line":80,"range":{"start_line":80,"start_character":13,"end_line":80,"end_character":24},"in_reply_to":"df33271e_2e07a51a","updated":"2020-03-31 07:57:46.000000000","message":"Done","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"d4354ef219618310875bc6ff946bb98af32a5880","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        self.assertEqual(c1, c2)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def test_singleton_exception(self):"},{"line_number":83,"context_line":"        # Make sure we have test env."},{"line_number":84,"context_line":"        clients.NeutronAuth._instances \u003d {}"},{"line_number":85,"context_line":"        with mock.patch("},{"line_number":86,"context_line":"            \u0027neutronclient.neutron.client.Client\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_13176e53","line":83,"range":{"start_line":83,"start_character":23,"end_line":83,"end_character":32},"updated":"2020-03-30 15:35:41.000000000","message":"have clean test env...","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"af25c3aa5b1eb88d9a3a6b6984eff4ce2e200f97","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        self.assertEqual(c1, c2)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def test_singleton_exception(self):"},{"line_number":83,"context_line":"        # Make sure we have test env."},{"line_number":84,"context_line":"        clients.NeutronAuth._instances \u003d {}"},{"line_number":85,"context_line":"        with mock.patch("},{"line_number":86,"context_line":"            \u0027neutronclient.neutron.client.Client\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_61a252b0","line":83,"range":{"start_line":83,"start_character":23,"end_line":83,"end_character":32},"in_reply_to":"df33271e_13176e53","updated":"2020-03-31 07:57:46.000000000","message":"Done","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"45aeac5eaf3fdead817d7207c41b1fecaca10b01","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def test_singleton_exception(self):"},{"line_number":83,"context_line":"        # Make sure we have test env."},{"line_number":84,"context_line":"        clients.NeutronAuth._instances \u003d {}"},{"line_number":85,"context_line":"        with mock.patch("},{"line_number":86,"context_line":"            \u0027neutronclient.neutron.client.Client\u0027,"},{"line_number":87,"context_line":"                side_effect\u003d[RuntimeError, mock.Mock(), mock.Mock()]) as n_cli:"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_4e3ae9cb","line":84,"updated":"2020-03-30 15:39:24.000000000","message":"I think we talked a bit about this offline, should we mock this class attribute in order to reset it ?","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e97374deb7bf7f3e48899b62fe942af30c0122ed","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def test_singleton_exception(self):"},{"line_number":83,"context_line":"        # Make sure we have test env."},{"line_number":84,"context_line":"        clients.NeutronAuth._instances \u003d {}"},{"line_number":85,"context_line":"        with mock.patch("},{"line_number":86,"context_line":"            \u0027neutronclient.neutron.client.Client\u0027,"},{"line_number":87,"context_line":"                side_effect\u003d[RuntimeError, mock.Mock(), mock.Mock()]) as n_cli:"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_aee4553d","line":84,"in_reply_to":"df33271e_4e3ae9cb","updated":"2020-03-30 15:44:49.000000000","message":"That\u0027s a good catch!","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"af25c3aa5b1eb88d9a3a6b6984eff4ce2e200f97","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def test_singleton_exception(self):"},{"line_number":83,"context_line":"        # Make sure we have test env."},{"line_number":84,"context_line":"        clients.NeutronAuth._instances \u003d {}"},{"line_number":85,"context_line":"        with mock.patch("},{"line_number":86,"context_line":"            \u0027neutronclient.neutron.client.Client\u0027,"},{"line_number":87,"context_line":"                side_effect\u003d[RuntimeError, mock.Mock(), mock.Mock()]) as n_cli:"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_a1329a5c","line":84,"in_reply_to":"df33271e_aee4553d","updated":"2020-03-31 07:57:46.000000000","message":"Done","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a56bcb86e01734e67d347152f772f49e344d92b8","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        clients.NeutronAuth._instances \u003d {}"},{"line_number":85,"context_line":"        with mock.patch("},{"line_number":86,"context_line":"            \u0027neutronclient.neutron.client.Client\u0027,"},{"line_number":87,"context_line":"                side_effect\u003d[RuntimeError, mock.Mock(), mock.Mock()]) as n_cli:"},{"line_number":88,"context_line":"            self.assertRaises("},{"line_number":89,"context_line":"                RuntimeError,"},{"line_number":90,"context_line":"                clients.NeutronAuth,"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_6eb08d44","line":87,"range":{"start_line":87,"start_character":43,"end_line":87,"end_character":54},"updated":"2020-03-30 15:43:51.000000000","message":"we can use something more lightweight here, like \u0027foo\u0027 or object()","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"af25c3aa5b1eb88d9a3a6b6984eff4ce2e200f97","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        clients.NeutronAuth._instances \u003d {}"},{"line_number":85,"context_line":"        with mock.patch("},{"line_number":86,"context_line":"            \u0027neutronclient.neutron.client.Client\u0027,"},{"line_number":87,"context_line":"                side_effect\u003d[RuntimeError, mock.Mock(), mock.Mock()]) as n_cli:"},{"line_number":88,"context_line":"            self.assertRaises("},{"line_number":89,"context_line":"                RuntimeError,"},{"line_number":90,"context_line":"                clients.NeutronAuth,"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_c1923e57","line":87,"range":{"start_line":87,"start_character":43,"end_line":87,"end_character":54},"in_reply_to":"df33271e_6eb08d44","updated":"2020-03-31 07:57:46.000000000","message":"Done","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a56bcb86e01734e67d347152f772f49e344d92b8","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                **self.client_args)"},{"line_number":92,"context_line":"            c2 \u003d clients.NeutronAuth(**self.client_args)"},{"line_number":93,"context_line":"            c3 \u003d clients.NeutronAuth(**self.client_args)"},{"line_number":94,"context_line":"            self.assertEqual(c2, c3)"},{"line_number":95,"context_line":"            self.assertEqual(n_cli._mock_call_count, 2)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_4eadc9e7","line":94,"range":{"start_line":94,"start_character":17,"end_line":94,"end_character":28},"updated":"2020-03-30 15:43:51.000000000","message":"assertIs","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"af25c3aa5b1eb88d9a3a6b6984eff4ce2e200f97","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                **self.client_args)"},{"line_number":92,"context_line":"            c2 \u003d clients.NeutronAuth(**self.client_args)"},{"line_number":93,"context_line":"            c3 \u003d clients.NeutronAuth(**self.client_args)"},{"line_number":94,"context_line":"            self.assertEqual(c2, c3)"},{"line_number":95,"context_line":"            self.assertEqual(n_cli._mock_call_count, 2)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df33271e_41a74ebe","line":94,"range":{"start_line":94,"start_character":17,"end_line":94,"end_character":28},"in_reply_to":"df33271e_4eadc9e7","updated":"2020-03-31 07:57:46.000000000","message":"Done","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"8840a4ebeac7c03159e4d5acd7781562b1ce96d8","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            \u0027service_name\u0027: \u0027foo_service_name\u0027,"},{"line_number":61,"context_line":"            \u0027insecure\u0027: \u0027foo_insecure\u0027,"},{"line_number":62,"context_line":"            \u0027ca_cert\u0027: \u0027foo_ca_cert\u0027}"},{"line_number":63,"context_line":"        clients.NeutronAuth._instances \u003d {}"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @mock.patch.object(clients, \u0027KeystoneSession\u0027)"},{"line_number":66,"context_line":"    def test_init(self, mock_ks):"}],"source_content_type":"text/x-python","patch_set":13,"id":"df33271e_2157aa28","line":63,"range":{"start_line":63,"start_character":16,"end_line":63,"end_character":27},"updated":"2020-03-31 08:13:12.000000000","message":"Singleton ?","commit_id":"6fea92c0a36b7b284065f85a398424925a886415"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"956dd1e653c484ed35d59332c198be920ffeb0f5","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            \u0027service_name\u0027: \u0027foo_service_name\u0027,"},{"line_number":61,"context_line":"            \u0027insecure\u0027: \u0027foo_insecure\u0027,"},{"line_number":62,"context_line":"            \u0027ca_cert\u0027: \u0027foo_ca_cert\u0027}"},{"line_number":63,"context_line":"        clients.NeutronAuth._instances \u003d {}"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @mock.patch.object(clients, \u0027KeystoneSession\u0027)"},{"line_number":66,"context_line":"    def test_init(self, mock_ks):"}],"source_content_type":"text/x-python","patch_set":13,"id":"df33271e_9c06dd1b","line":63,"range":{"start_line":63,"start_character":16,"end_line":63,"end_character":27},"in_reply_to":"df33271e_2157aa28","updated":"2020-03-31 08:18:05.000000000","message":"You\u0027re right as always :) \n\nclass NeutronAuth(metaclass\u003dSingleton)","commit_id":"6fea92c0a36b7b284065f85a398424925a886415"}],"ovn_octavia_provider/tests/unit/test_driver.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f13b756aab9b02e3cb726b9c7019f7884843bfc6","unresolved":false,"context_lines":[{"line_number":2124,"context_line":"        fake_subnet2[\u0027network_id\u0027] \u003d \u0027foo2\u0027"},{"line_number":2125,"context_line":"        net_cli.return_value.show_subnet.side_effect \u003d ["},{"line_number":2126,"context_line":"            {\u0027subnet\u0027: fake_subnet1},"},{"line_number":2127,"context_line":"            {\u0027subnet\u0027: fake_subnet2}]"},{"line_number":2128,"context_line":"        p1 \u003d fakes.FakeOVNPort.create_one_port(attrs\u003d{"},{"line_number":2129,"context_line":"            \u0027gateway_chassis\u0027: [],"},{"line_number":2130,"context_line":"            \u0027external_ids\u0027: {"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_42531c3a","line":2127,"updated":"2020-03-19 14:05:48.000000000","message":"Strange, I thought I tried this and it didn\u0027t work, which is why I changed the driver code.","commit_id":"e2649ffb1d5d2943c553a957ff8fbbb9e325ef3d"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"0e40e62b62db25a0a3a279196e358e4d2c13b9c9","unresolved":false,"context_lines":[{"line_number":2124,"context_line":"        fake_subnet2[\u0027network_id\u0027] \u003d \u0027foo2\u0027"},{"line_number":2125,"context_line":"        net_cli.return_value.show_subnet.side_effect \u003d ["},{"line_number":2126,"context_line":"            {\u0027subnet\u0027: fake_subnet1},"},{"line_number":2127,"context_line":"            {\u0027subnet\u0027: fake_subnet2}]"},{"line_number":2128,"context_line":"        p1 \u003d fakes.FakeOVNPort.create_one_port(attrs\u003d{"},{"line_number":2129,"context_line":"            \u0027gateway_chassis\u0027: [],"},{"line_number":2130,"context_line":"            \u0027external_ids\u0027: {"}],"source_content_type":"text/x-python","patch_set":6,"id":"1fa4df85_08054311","line":2127,"in_reply_to":"1fa4df85_42531c3a","updated":"2020-03-19 14:35:59.000000000","message":"The Network driver method previously unpacked the subnet from the dict (which is returned by neutron_client).\n\nhttps://github.com/openstack/octavia/blob/master/octavia/network/drivers/neutron/base.py#L180","commit_id":"e2649ffb1d5d2943c553a957ff8fbbb9e325ef3d"}],"tox.ini":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"ef7d0d852bfcebd516b9cf1d06747b53c6b1300c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"commands \u003d"},{"line_number":64,"context_line":"  stestr run --no-subunit-trace {posargs}"},{"line_number":65,"context_line":"  coverage combine"},{"line_number":66,"context_line":"  coverage report --fail-under\u003d74 --skip-covered"},{"line_number":67,"context_line":"  coverage html -d cover"},{"line_number":68,"context_line":"  coverage xml -o cover/coverage.xml"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-properties","patch_set":6,"id":"df33271e_448ee027","line":66,"range":{"start_line":66,"start_character":31,"end_line":66,"end_character":33},"updated":"2020-03-20 15:34:49.000000000","message":"Would be good to state why we lost coverage","commit_id":"e2649ffb1d5d2943c553a957ff8fbbb9e325ef3d"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"ce6107cc068084456416c407bd6f45f8a27f0691","unresolved":false,"context_lines":[{"line_number":63,"context_line":"commands \u003d"},{"line_number":64,"context_line":"  stestr run --no-subunit-trace {posargs}"},{"line_number":65,"context_line":"  coverage combine"},{"line_number":66,"context_line":"  coverage report --fail-under\u003d74 --skip-covered"},{"line_number":67,"context_line":"  coverage html -d cover"},{"line_number":68,"context_line":"  coverage xml -o cover/coverage.xml"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-properties","patch_set":6,"id":"df33271e_bef24705","line":66,"range":{"start_line":66,"start_character":31,"end_line":66,"end_character":33},"in_reply_to":"df33271e_23746035","updated":"2020-03-23 10:17:16.000000000","message":"It would be great to add only code that is tested :)","commit_id":"e2649ffb1d5d2943c553a957ff8fbbb9e325ef3d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ab0d5155d4adac222dddc2df732cd364927ce692","unresolved":false,"context_lines":[{"line_number":63,"context_line":"commands \u003d"},{"line_number":64,"context_line":"  stestr run --no-subunit-trace {posargs}"},{"line_number":65,"context_line":"  coverage combine"},{"line_number":66,"context_line":"  coverage report --fail-under\u003d74 --skip-covered"},{"line_number":67,"context_line":"  coverage html -d cover"},{"line_number":68,"context_line":"  coverage xml -o cover/coverage.xml"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-properties","patch_set":6,"id":"df33271e_64bcc469","line":66,"range":{"start_line":66,"start_character":31,"end_line":66,"end_character":33},"in_reply_to":"df33271e_448ee027","updated":"2020-03-20 15:52:39.000000000","message":"Part of it is we don\u0027t include the functional test run in the numbers, coverage for it is always 0%, I started a fix to address that, https://review.opendev.org/#/c/713996/\n\nOr we just need to write more tests :)","commit_id":"e2649ffb1d5d2943c553a957ff8fbbb9e325ef3d"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"adb0746862ff719d5940811e64e2c7d9507b8b1f","unresolved":false,"context_lines":[{"line_number":63,"context_line":"commands \u003d"},{"line_number":64,"context_line":"  stestr run --no-subunit-trace {posargs}"},{"line_number":65,"context_line":"  coverage combine"},{"line_number":66,"context_line":"  coverage report --fail-under\u003d74 --skip-covered"},{"line_number":67,"context_line":"  coverage html -d cover"},{"line_number":68,"context_line":"  coverage xml -o cover/coverage.xml"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-properties","patch_set":6,"id":"df33271e_23746035","line":66,"range":{"start_line":66,"start_character":31,"end_line":66,"end_character":33},"in_reply_to":"df33271e_64bcc469","updated":"2020-03-23 09:38:20.000000000","message":"And by this patch I added clients file, that is untested (at least here).","commit_id":"e2649ffb1d5d2943c553a957ff8fbbb9e325ef3d"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"af25c3aa5b1eb88d9a3a6b6984eff4ce2e200f97","unresolved":false,"context_lines":[{"line_number":63,"context_line":"commands \u003d"},{"line_number":64,"context_line":"  stestr run --no-subunit-trace {posargs}"},{"line_number":65,"context_line":"  coverage combine"},{"line_number":66,"context_line":"  coverage report --fail-under\u003d74 --skip-covered"},{"line_number":67,"context_line":"  coverage html -d cover"},{"line_number":68,"context_line":"  coverage xml -o cover/coverage.xml"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-properties","patch_set":11,"id":"df33271e_0199c677","line":66,"range":{"start_line":66,"start_character":31,"end_line":66,"end_character":33},"updated":"2020-03-31 07:57:46.000000000","message":"We don\u0027t need this anymore.","commit_id":"ac60aa7070a9a4e794831fc5f44e3e8027620987"}]}
