def test_get_data_dir__from_env_var__multiple(tmp_path): tmpdir = os.pathsep.join([str(tmp_path) for _ in range(3)]) with proj_env(), patch.dict(os.environ, {"PROJ_LIB": tmpdir}, clear=True), patch( "pyproj.datadir.Path.absolute", return_value=_INVALID_PATH ), patch("pyproj.datadir.sys.prefix", str(_INVALID_PATH)): create_projdb(tmp_path) assert get_data_dir() == tmpdir
def test_sync__download_grids(parse_args_mock, tmp_path, capsys): parse_args_mock.return_value = argparse.Namespace( bbox=None, list_files=False, file="us_noaa_alaska", all=False, source_id=None, area_of_use=None, verbose=True, target_directory=str(tmp_path), system_directory=False, spatial_test="intersects", exclude_world_coverage=False, include_already_downloaded=False, ) main() captured = capsys.readouterr() paths = sorted(Path(path).name for path in glob(str(tmp_path.joinpath("*")))) if grids_available("us_noaa_alaska.tif", check_network=False): assert paths == ["files.geojson"] assert captured.out == "" else: assert paths == ["files.geojson", "us_noaa_alaska.tif"] assert captured.out == "Downloading: https://cdn.proj.org/us_noaa_alaska.tif\n" # make sure not downloaded again with proj_env(): append_data_dir(str(tmp_path)) main() captured = capsys.readouterr() assert captured.out == ""
def test_get_data_dir__from_prefix(tmp_path): with proj_env(), patch.dict(os.environ, {}, clear=True), patch( "pyproj.datadir.Path.absolute", return_value=_INVALID_PATH ), patch("pyproj.datadir.sys.prefix", str(tmp_path)): proj_dir = tmp_path / "share" / "proj" proj_dir.mkdir(parents=True) create_projdb(proj_dir) assert get_data_dir() == str(proj_dir)
def test_get_data_dir__from_env_var(tmp_path): tmpdir = str(tmp_path) with proj_env(), patch("pyproj.datadir.os") as os_mock, patch( "pyproj.datadir.sys") as sys_mock: setup_os_mock(os_mock, proj_dir=tmpdir) sys_mock.prefix = _INVALID_PATH create_projdb(tmpdir) assert get_data_dir() == tmpdir
def test_get_data_dir__from_env_var(tmp_path): with proj_env(), patch.dict( os.environ, {"PROJ_LIB": str(tmp_path)}, clear=True ), patch("pyproj.datadir.Path.absolute", return_value=_INVALID_PATH), patch( "pyproj.datadir.sys.prefix", str(_INVALID_PATH) ): create_projdb(tmp_path) assert get_data_dir() == str(tmp_path)
def test_get_data_dir__missing(): with proj_env(), pytest.raises(DataDirError), patch( "pyproj.datadir.find_executable", return_value=None), patch("pyproj.datadir.os") as os_mock, patch( "pyproj.datadir.sys") as sys_mock: sys_mock.prefix = _INVALID_PATH setup_os_mock(os_mock) assert get_data_dir() is None
def test_get_data_dir__from_env_var__multiple(tmp_path): tmpdir = str(tmp_path) with proj_env(), patch("pyproj.datadir.os") as os_mock, patch( "pyproj.datadir.sys") as sys_mock: setup_os_mock(os_mock, proj_dir=os.pathsep.join([tmpdir, tmpdir, tmpdir])) sys_mock.prefix = _INVALID_PATH create_projdb(tmpdir) assert get_data_dir() == os.pathsep.join([tmpdir, tmpdir, tmpdir])
def test_get_data_dir__from_prefix(tmp_path): tmpdir = str(tmp_path) with proj_env(), patch("pyproj.datadir.os") as os_mock, patch( "pyproj.datadir.sys") as sys_mock: setup_os_mock(os_mock) sys_mock.prefix = tmpdir proj_dir = os.path.join(tmpdir, "share", "proj") os.makedirs(proj_dir) create_projdb(proj_dir) assert get_data_dir() == proj_dir
def test_get_data_dir__missing(): with proj_env(), pytest.raises(DataDirError), patch.dict( os.environ, {}, clear=True ), patch("pyproj.datadir.Path.absolute", return_value=_INVALID_PATH), patch( "pyproj.datadir.find_executable", return_value=None ), patch( "pyproj.datadir.Path.absolute", return_value=_INVALID_PATH ), patch( "pyproj.datadir.sys.prefix", str(_INVALID_PATH) ): assert get_data_dir() is None
def test_append_data_dir__internal(tmp_path): tmpdir = str(tmp_path) with proj_env(), patch("pyproj.datadir.os") as os_mock: setup_os_mock(os_mock, os.path.join(tmpdir, "randomfilename.py")) create_projdb(tmpdir) internal_proj_dir = os.path.join(tmpdir, "proj_dir", "share", "proj") os.makedirs(internal_proj_dir) create_projdb(internal_proj_dir) extra_datadir = str(os.path.join(tmpdir, "extra_datumgrids")) append_data_dir(extra_datadir) assert get_data_dir() == os.pathsep.join( [internal_proj_dir, extra_datadir])
def test_get_data_dir__from_path(tmp_path): tmpdir = str(tmp_path) with proj_env(), patch("pyproj.datadir.os") as os_mock, patch( "pyproj.datadir.sys") as sys_mock, patch( "pyproj.datadir.find_executable") as find_exe: setup_os_mock(os_mock) sys_mock.prefix = _INVALID_PATH find_exe.return_value = os.path.join(tmpdir, "bin", "proj") proj_dir = os.path.join(tmpdir, "share", "proj") os.makedirs(proj_dir) create_projdb(proj_dir) assert get_data_dir() == proj_dir
def test_append_data_dir__internal(projdir_type, tmp_path): with proj_env(), patch.dict(os.environ, {}, clear=True), patch( "pyproj.datadir.Path.absolute", return_value=tmp_path / "datadir.py" ), patch("pyproj.datadir.sys.prefix", str(_INVALID_PATH)): create_projdb(tmp_path) internal_proj_dir = tmp_path / "proj_dir" / "share" / "proj" internal_proj_dir.mkdir(parents=True) create_projdb(internal_proj_dir) extra_datadir = tmp_path / "extra_datumgrids" append_data_dir(projdir_type(extra_datadir)) assert get_data_dir() == os.pathsep.join( [str(internal_proj_dir), str(extra_datadir)] )
def test_get_data_dir__internal(tmp_path): tmpdir = tmp_path / "proj" tmpdir.mkdir() tmpdir_fake = tmp_path / "proj_fake" tmpdir_fake.mkdir() with proj_env(), patch.dict( os.environ, {"PROJ_LIB": str(tmpdir_fake)}, clear=True ), patch("pyproj.datadir.Path.absolute", return_value=tmpdir / "datadir.py"), patch( "pyproj.datadir.sys.prefix", str(tmpdir_fake) ): create_projdb(tmpdir) create_projdb(tmpdir_fake) internal_proj_dir = tmpdir / "proj_dir" / "share" / "proj" internal_proj_dir.mkdir(parents=True) create_projdb(internal_proj_dir) assert get_data_dir() == str(internal_proj_dir)
def test_get_data_dir__from_user(projdir_type, tmp_path): tmpdir = tmp_path / "proj" tmpdir.mkdir() tmpdir_env = tmp_path / "proj_env" tmpdir_env.mkdir() with proj_env(), patch.dict( os.environ, {"PROJ_LIB": str(tmpdir_env)}, clear=True ), patch("pyproj.datadir.Path.absolute", return_value=tmpdir / "datadir.py"), patch( "pyproj.datadir.sys.prefix", str(tmpdir_env) ): # noqa: E501 create_projdb(tmpdir) create_projdb(tmpdir_env) set_data_dir(projdir_type(tmpdir)) internal_proj_dir = tmpdir / "proj_dir" / "share" / "proj" internal_proj_dir.mkdir(parents=True) create_projdb(internal_proj_dir) assert get_data_dir() == str(tmpdir)
def test_transformer_group__download_grids(get_user_data_dir_mock, tmp_path, capsys): get_user_data_dir_mock.return_value = str(tmp_path) with proj_network_env(): if pyproj._datadir._USE_GLOBAL_CONTEXT: pyproj.network.set_network_enabled(active=False) trans_group = TransformerGroup(4326, 2964, network=False) trans_group.download_grids(verbose=True) captured = capsys.readouterr() get_user_data_dir_mock.assert_called_with(True) paths = sorted(Path(path).name for path in glob(str(tmp_path.joinpath("*")))) if grids_available( "us_noaa_alaska.tif", "ca_nrc_ntv2_0.tif", check_network=False, check_all=True, ): assert paths == [] assert captured.out == "" elif grids_available("us_noaa_alaska.tif", check_network=False): assert paths == ["ca_nrc_ntv2_0.tif"] assert ( captured.out == "Downloading: https://cdn.proj.org/ca_nrc_ntv2_0.tif\n" ) elif grids_available("ca_nrc_ntv2_0.tif", check_network=False): assert paths == ["us_noaa_alaska.tif"] assert captured.out == ( "Downloading: https://cdn.proj.org/us_noaa_alaska.tif\n" ) else: assert paths == ["ca_nrc_ntv2_0.tif", "us_noaa_alaska.tif"] assert captured.out == ( "Downloading: https://cdn.proj.org/us_noaa_alaska.tif\n" "Downloading: https://cdn.proj.org/ca_nrc_ntv2_0.tif\n" ) # make sure not downloaded again with proj_env(), patch( "pyproj.transformer._download_resource_file" ) as download_mock: append_data_dir(str(tmp_path)) trans_group = TransformerGroup(4326, 2964, network=False) trans_group.download_grids() get_user_data_dir_mock.assert_called_with(True) download_mock.assert_not_called()
def test_get_data_dir__internal(tmp_path): tmpdir = tmp_path / "proj" tmpdir.mkdir() tmpdir = str(tmpdir) tmpdir_fake = tmp_path / "proj_fake" tmpdir_fake.mkdir() tmpdir_fake = str(tmpdir_fake) with proj_env(), patch("pyproj.datadir.os") as os_mock, patch( "pyproj.datadir.sys") as sys_mock: setup_os_mock( os_mock, abspath_return=os.path.join(tmpdir, "randomfilename.py"), proj_dir=tmpdir_fake, ) sys_mock.prefix = tmpdir_fake create_projdb(tmpdir) create_projdb(tmpdir_fake) internal_proj_dir = os.path.join(tmpdir, "proj_dir", "share", "proj") os.makedirs(internal_proj_dir) create_projdb(internal_proj_dir) assert get_data_dir() == internal_proj_dir
def test_get_data_dir__from_user(tmp_path): tmpdir = tmp_path / "proj" tmpdir.mkdir() tmpdir = str(tmpdir) tmpdir_env = tmp_path / "proj_env" tmpdir_env.mkdir() tmpdir_env = str(tmpdir_env) with proj_env(), patch("pyproj.datadir.os") as os_mock, patch( "pyproj.datadir.sys") as sys_mock: # noqa: E501 setup_os_mock( os_mock, abspath_return=os.path.join(tmpdir, "randomfilename.py"), proj_dir=tmpdir_env, ) sys_mock.prefix = tmpdir_env create_projdb(tmpdir) create_projdb(tmpdir_env) set_data_dir(tmpdir) internal_proj_dir = os.path.join(tmpdir, "proj_dir", "share", "proj") os.makedirs(internal_proj_dir) create_projdb(internal_proj_dir) assert get_data_dir() == tmpdir
def test_pyproj_global_context_initialize__datadir_missing(): with proj_env(), pytest.raises(DataDirError), patch( "pyproj.datadir.get_data_dir", side_effect=DataDirError("test")): _pyproj_global_context_initialize()