)]}'
{"nova/api/openstack/common.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"18cc4e5dce3234af3b141bb796af420ad89901d0","unresolved":false,"context_lines":[{"line_number":589,"context_line":"    # FIXME(melwitt): This is just to initially test/cover the non-admin"},{"line_number":590,"context_line":"    # list_ports change in the NeutronFixture to ensure it works. We expect"},{"line_number":591,"context_line":"    # tests asserting API rejection of move operations to fail with this."},{"line_number":592,"context_line":"    admin_context \u003d nova_context.get_context()"},{"line_number":593,"context_line":"    ports \u003d network_api.list_ports("},{"line_number":594,"context_line":"        admin_context, **search_opts).get(\u0027ports\u0027, [])"},{"line_number":595,"context_line":"    for port in ports:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_22643e49","line":592,"updated":"2019-11-08 00:19:02.000000000","message":"I should just write a unit test for NeutronFixture instead of doing this. Will update.","commit_id":"0112d78acdd1165991de92f10bfd0a1e6d176099"}],"nova/tests/fixtures.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e69f654f94c57c04068f7ec7c1a10d85998a9da3","unresolved":false,"context_lines":[{"line_number":1244,"context_line":"        self.fixture \u003d fixture"},{"line_number":1245,"context_line":"        self.is_admin \u003d is_admin"},{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"    def __getattr__(self, name):"},{"line_number":1248,"context_line":"        fixture_name \u003d self.fixture.__getattribute__(name)"},{"line_number":1249,"context_line":"        if callable(fixture_name):"},{"line_number":1250,"context_line":"            def wrapper(*args, **kwargs):"},{"line_number":1251,"context_line":"                return fixture_name(*args, **kwargs)"},{"line_number":1252,"context_line":"            return wrapper"},{"line_number":1253,"context_line":"        else:"},{"line_number":1254,"context_line":"            return fixture_name"},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"    def list_ports(self, retrieve_all\u003dTrue, **_params):"},{"line_number":1257,"context_line":"        return self.fixture.list_ports(retrieve_all\u003dretrieve_all,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_28eb63dd","line":1254,"range":{"start_line":1247,"start_character":0,"end_line":1254,"end_character":31},"updated":"2019-11-15 17:29:42.000000000","message":"I don\u0027t see the reason for this complexity. I think the following would be enough to forward the calls to the fixture:\n\n   def __getattr__(self, name):\n        return getattr(self.fixture, name)","commit_id":"9b81341096ec04f2e0f903b4ddbee50e6c803741"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"983441f8a8d8fec8c5fa9ea126283673e07e40f0","unresolved":false,"context_lines":[{"line_number":1244,"context_line":"        self.fixture \u003d fixture"},{"line_number":1245,"context_line":"        self.is_admin \u003d is_admin"},{"line_number":1246,"context_line":""},{"line_number":1247,"context_line":"    def __getattr__(self, name):"},{"line_number":1248,"context_line":"        fixture_name \u003d self.fixture.__getattribute__(name)"},{"line_number":1249,"context_line":"        if callable(fixture_name):"},{"line_number":1250,"context_line":"            def wrapper(*args, **kwargs):"},{"line_number":1251,"context_line":"                return fixture_name(*args, **kwargs)"},{"line_number":1252,"context_line":"            return wrapper"},{"line_number":1253,"context_line":"        else:"},{"line_number":1254,"context_line":"            return fixture_name"},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"    def list_ports(self, retrieve_all\u003dTrue, **_params):"},{"line_number":1257,"context_line":"        return self.fixture.list_ports(retrieve_all\u003dretrieve_all,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_e88d4b2a","line":1254,"range":{"start_line":1247,"start_character":0,"end_line":1254,"end_character":31},"in_reply_to":"3fa7e38b_28eb63dd","updated":"2019-11-15 18:03:10.000000000","message":"Oops, I\u0027m embarrassed.","commit_id":"9b81341096ec04f2e0f903b4ddbee50e6c803741"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e69f654f94c57c04068f7ec7c1a10d85998a9da3","unresolved":false,"context_lines":[{"line_number":1791,"context_line":"        if port_id in self._ports:"},{"line_number":1792,"context_line":"            del self._ports[port_id]"},{"line_number":1793,"context_line":""},{"line_number":1794,"context_line":"    def list_ports(self, retrieve_all\u003dTrue, is_admin\u003dFalse, **_params):"},{"line_number":1795,"context_line":"        ports \u003d self._list_resource(self._ports, retrieve_all, **_params)"},{"line_number":1796,"context_line":"        if not is_admin:"},{"line_number":1797,"context_line":"            # Neutron returns None instead of the real resource_request if"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_1d02670d","line":1794,"range":{"start_line":1794,"start_character":52,"end_line":1794,"end_character":58},"updated":"2019-11-15 17:29:42.000000000","message":"I think we don\u0027t need to default this as every call to list_port comes from _FakeNeutronClient which will provide the parameter.","commit_id":"9b81341096ec04f2e0f903b4ddbee50e6c803741"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"983441f8a8d8fec8c5fa9ea126283673e07e40f0","unresolved":false,"context_lines":[{"line_number":1791,"context_line":"        if port_id in self._ports:"},{"line_number":1792,"context_line":"            del self._ports[port_id]"},{"line_number":1793,"context_line":""},{"line_number":1794,"context_line":"    def list_ports(self, retrieve_all\u003dTrue, is_admin\u003dFalse, **_params):"},{"line_number":1795,"context_line":"        ports \u003d self._list_resource(self._ports, retrieve_all, **_params)"},{"line_number":1796,"context_line":"        if not is_admin:"},{"line_number":1797,"context_line":"            # Neutron returns None instead of the real resource_request if"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_e8db0b1e","line":1794,"range":{"start_line":1794,"start_character":52,"end_line":1794,"end_character":58},"in_reply_to":"3fa7e38b_1d02670d","updated":"2019-11-15 18:03:10.000000000","message":"Huh, I dunno why I did this. Done.","commit_id":"9b81341096ec04f2e0f903b4ddbee50e6c803741"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d58302bdf95cec5c96ea0ccd9c64e7ddfd25906e","unresolved":false,"context_lines":[{"line_number":1233,"context_line":"    Neutron client is an admin client."},{"line_number":1234,"context_line":""},{"line_number":1235,"context_line":"    For supported methods, (example: list_ports), this class will call the"},{"line_number":1236,"context_line":"    NeutronFixture\u0027s class method with an additional \u0027is_admin\u0027 keyword"},{"line_number":1237,"context_line":"    argument indicating whether the client is an admin client and the"},{"line_number":1238,"context_line":"    NeutronFixture method handles it accordingly."},{"line_number":1239,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_03d76825","line":1236,"range":{"start_line":1236,"start_character":64,"end_line":1236,"end_character":71},"updated":"2019-11-15 18:50:25.000000000","message":"Ah, I forgot to nix this.","commit_id":"528a6d1fc6a0033985835f318b7dc1ad5b408aba"}]}
