async def test_fetch_model_bad_extension(web_server) -> None: url = web_server('wrong_extension.blah') with pytest.raises(models.FileTypeError) as exc_info: async with fetch_aiohttp.Fetcher() as fetcher: await fetcher.get(url, DummyModel) assert exc_info.value.url == url assert exc_info.value.original_url == url
async def test_fetcher_resolve(web_server) -> None: url = web_server('indirect.alias') async with fetch_aiohttp.Fetcher() as fetcher: urls = await fetcher.resolve(url) assert urls == [ web_server('indirect.alias'), web_server('direct.alias'), web_server('rfi_mask_ranges.h5') ]
async def test_fetcher_custom_session(web_server) -> None: urls: List[yarl.URL] = [] async with _tracing_session(urls) as session: async with fetch_aiohttp.Fetcher(session=session) as fetcher: assert fetcher.session is session await fetcher.get(web_server('direct.alias'), DummyModel) assert len(urls) == 2 assert not session.closed assert session.closed
async def test_fetch_model_bad_content_type(mock_aioresponses) -> None: data = get_data('rfi_mask_ranges.h5') url = get_data_url('bad_content_type.h5') mock_aioresponses.get(url, content_type='image/png', body=data) with pytest.raises( models.FileTypeError, match='Expected application/x-hdf5, not image/png') as exc_info: async with fetch_aiohttp.Fetcher() as fetcher: await fetcher.get(url, DummyModel) assert exc_info.value.url == url assert exc_info.value.original_url == url
async def test_fetcher_caching(mock_aioresponses) -> None: async with fetch_aiohttp.Fetcher() as fetcher: model1 = await fetcher.get(get_data_url('rfi_mask_ranges.h5'), DummyModel) model2 = await fetcher.get(get_data_url('indirect.alias'), DummyModel) model3 = await fetcher.get(get_data_url('direct.alias'), DummyModel) assert model1 is model2 assert model1 is model3 assert not model1.is_closed # Not supported by aioresponses # assert len(mock_aioresponses.calls) == 3 assert model1.is_closed
async def test_fetch_model_cached_model_type_error(web_server) -> None: class OtherModel(models.SimpleHDF5Model): model_type = 'other' @classmethod def from_hdf5(cls, hdf5: h5py.File) -> 'OtherModel': return cls() def to_hdf5(self, hdf5: h5py.File) -> None: pass url = web_server('rfi_mask_ranges.h5') async with fetch_aiohttp.Fetcher() as fetcher: await fetcher.get(url, DummyModel) with pytest.raises(models.ModelTypeError) as exc_info: await fetcher.get(url, OtherModel) assert exc_info.value.url == url assert exc_info.value.original_url == url