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_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_append_data_dir__internal(): with proj_env(), temporary_directory() as tmpdir: set_data_dir(None) os.environ["PROJ_LIB"] = tmpdir 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")) with patch("pyproj.datadir.os.path.abspath") as abspath_mock: abspath_mock.return_value = os.path.join(tmpdir, "randomfilename.py") append_data_dir(extra_datadir) assert get_data_dir() == os.pathsep.join([internal_proj_dir, extra_datadir])
def test_append_data_dir__internal(): with proj_env(), temporary_directory() as tmpdir: set_data_dir(None) os.environ["PROJ_LIB"] = tmpdir 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")) with patch("pyproj.datadir.os.path.abspath") as abspath_mock: abspath_mock.return_value = os.path.join(tmpdir, "randomfilename.py") append_data_dir(extra_datadir) assert get_data_dir() == ";".join([internal_proj_dir, extra_datadir])
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_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()
from numbers import Number from pyproj import CRS, datadir from pyproj.transformer import Transformer, AreaOfInterest, TransformerGroup from pyproj.enums import WktVersion, TransformDirection from shapely import wkt from shapely.geometry import Polygon, MultiPoint, MultiLineString, MultiPolygon, GeometryCollection from shapely.ops import transform LOGGER = logging.getLogger(__name__) CURRENT_YEAR = float(datetime.datetime.now().year) _USER_PROJ_DATA = os.getenv('PROJ_DIR', None) if _USER_PROJ_DATA and datadir.get_data_dir() != _USER_PROJ_DATA: datadir.set_data_dir(_USER_PROJ_DATA) datadir.append_data_dir(_USER_PROJ_DATA) #: Process metadata and description PROCESS_METADATA = { 'version': '1.2.0', 'id': 'wkt-reprojector', 'title': 'WKT Reprojector', 'description': 'An example process that reprojects a geometry from one CRS to another, using PROJ v6. This will take account of possible datum shifts. Because of the use of PROJ v6, late-binding can be used, and 4D coordinates (three spatial components and one temporal component) are supported.', 'keywords': [ 'reprojection', 'PROJ', '2D', '3D', '4D', 'spatiotemporal transformation' ],