예제 #1
0
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
예제 #2
0
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')
    ]
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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