def check_proj4_data(cls): """ Check the correctness of os env PROJ_LIB """ if cls.proj4_data_fixed: return if hasattr(pyproj, 'pyproj_datadir'): # noinspection PyTypeChecker proj_path = os.path.join(pyproj.pyproj_datadir, "epsg") if os.path.exists(proj_path): # logger.debug("PROJ_LIB = %s" % proj_path) return if 'PROJ_LIB' in os.environ: # logger.debug("unset original PROJ_LIB = %s" % os.environ['PROJ_LIB']) del os.environ['PROJ_LIB'] proj4_data_path1 = os.path.join(os.path.dirname(pyproj.__file__), 'data') epsg_path1 = os.path.join(proj4_data_path1, 'epsg') if os.path.exists(epsg_path1): os.environ['PROJ_LIB'] = proj4_data_path1 if hasattr(pyproj, 'pyproj_datadir'): pyproj.pyproj_datadir = proj4_data_path1 # logger.debug("PROJ_LIB = %s" % os.environ['PROJ_LIB']) cls.proj4_data_fixed = True return # anaconda specific (Win) proj4_data_path2 = os.path.join(Helper.python_path(), 'Library', 'data') epsg_path2 = os.path.join(proj4_data_path2, 'epsg') if os.path.exists(epsg_path2): os.environ['PROJ_LIB'] = proj4_data_path2 if hasattr(pyproj, 'pyproj_datadir'): pyproj.pyproj_datadir = proj4_data_path2 # logger.debug("PROJ_LIB = %s" % os.environ['PROJ_LIB']) cls.proj4_data_fixed = True return # anaconda specific (Win) proj4_data_path3 = os.path.join(Helper.python_path(), 'Library', 'share') epsg_path3 = os.path.join(proj4_data_path3, 'epsg') if os.path.exists(epsg_path3): os.environ['PROJ_LIB'] = proj4_data_path3 if hasattr(pyproj, 'pyproj_datadir'): pyproj.pyproj_datadir = proj4_data_path3 # logger.debug("PROJ_LIB = %s" % os.environ['PROJ_LIB']) cls.proj4_data_fixed = True return # anaconda specific (Linux) proj4_data_path4 = os.path.join(Helper.python_path(), 'share') epsg_path4 = os.path.join(proj4_data_path4, 'epsg') if os.path.exists(epsg_path4): os.environ['PROJ_LIB'] = proj4_data_path4 if hasattr(pyproj, 'pyproj_datadir'): pyproj.pyproj_datadir = proj4_data_path4 # logger.debug("PROJ_LIB = %s" % os.environ['PROJ_LIB']) cls.proj4_data_fixed = True return # anaconda specific (Linux) proj4_data_path5 = os.path.join(Helper.python_path(), 'share', 'proj') proj_db_path5 = os.path.join(proj4_data_path5, 'proj.db') if os.path.exists(proj_db_path5): os.environ['PROJ_LIB'] = proj4_data_path5 if hasattr(pyproj, 'pyproj_datadir'): pyproj.pyproj_datadir = proj4_data_path5 # logger.debug("PROJ_LIB = %s" % os.environ['PROJ_LIB']) cls.proj4_data_fixed = True return # anaconda specific (Win) proj4_data_path6 = os.path.join(Helper.python_path(), 'Library', 'share', 'proj') proj_db_path6 = os.path.join(proj4_data_path6, 'proj.db') if os.path.exists(proj_db_path6): os.environ['PROJ_LIB'] = proj4_data_path6 if hasattr(pyproj, 'pyproj_datadir'): pyproj.pyproj_datadir = proj4_data_path6 # logger.debug("PROJ_LIB = %s" % os.environ['PROJ_LIB']) cls.proj4_data_fixed = True return try: # noinspection PyUnresolvedReferences import conda conda_file_dir = conda.__file__ conda_dir = conda_file_dir.split('lib')[0] proj4_data_path999 = os.path.join(os.path.join(conda_dir, 'share'), 'proj') epsg_path999 = os.path.join(proj4_data_path999, 'epsg') if os.path.exists(epsg_path999): os.environ['PROJ_LIB'] = proj4_data_path999 if hasattr(pyproj, 'pyproj_datadir'): pyproj.pyproj_datadir = proj4_data_path999 # logger.debug("PROJ_LIB = %s" % os.environ['PROJ_LIB']) cls.proj4_data_fixed = True return except Exception as e: logger.warning("%s" % e) # TODO: add more cases to find PROJ_LIB raise RuntimeError( "Unable to locate PROJ4 data at:\n- %s\n- %s\n- %s\n- %s\n- %s\n- %s\n- Conda/share/proj" % (proj4_data_path1, proj4_data_path2, proj4_data_path3, proj4_data_path4, proj4_data_path5, proj4_data_path6))
from hyo2.abc.lib.helper import Helper from hyo2.qc.common import lib_info from hyo2.qc.common import default_logging from hyo2.qc.common import testing default_logging.load() Helper.explore_folder(Helper(lib_info=lib_info).package_folder()) Helper(lib_info=lib_info).explore_package_folder() print("- This file size: %s" % Helper.file_size(__file__)) print("- Info libs:\n%s" % Helper(lib_info=lib_info).package_info()) print("- Python path: %s" % Helper.python_path()) print("- QC2 package folder: %s" % Helper(lib_info=lib_info).package_folder()) print("- Testing output: %s" % testing.output_data_folder()) print("- Web URL: %s" % Helper(lib_info=lib_info).web_url(suffix="test"))
def check_gdal_data(cls): """ Check the correctness of os env GDAL_DATA """ if cls.gdal_data_fixed: return if 'GDAL_DATA' in os.environ: # logger.debug("unset original GDAL_DATA = %s" % os.environ['GDAL_DATA']) del os.environ['GDAL_DATA'] if 'GDAL_DRIVER_PATH' in os.environ: # logger.debug("unset original GDAL_DRIVER_PATH = %s" % os.environ['GDAL_DRIVER_PATH']) del os.environ['GDAL_DRIVER_PATH'] gdal_data_path0 = os.path.join(os.path.dirname(gdal.__file__), 'osgeo', 'data', 'gdal') s57_agencies_csv_path0 = os.path.join(gdal_data_path0, 's57agencies.csv') if os.path.exists(s57_agencies_csv_path0): gdal.SetConfigOption('GDAL_DATA', gdal_data_path0) logger.debug("GDAL_DATA = %s" % gdal.GetConfigOption('GDAL_DATA')) cls.gdal_data_fixed = True cls.push_gdal_error_handler() return gdal_data_path1 = os.path.join(os.path.dirname(gdal.__file__), 'data', 'gdal') s57_agencies_csv_path1 = os.path.join(gdal_data_path1, 's57agencies.csv') if os.path.exists(s57_agencies_csv_path1): gdal.SetConfigOption('GDAL_DATA', gdal_data_path1) logger.debug("GDAL_DATA = %s" % gdal.GetConfigOption('GDAL_DATA')) cls.gdal_data_fixed = True cls.push_gdal_error_handler() return # anaconda specific (Win) gdal_data_path2 = os.path.join(Helper.python_path(), 'Library', 'data') s57_agencies_csv_path2 = os.path.join(gdal_data_path2, 's57agencies.csv') if os.path.exists(s57_agencies_csv_path2): gdal.SetConfigOption('GDAL_DATA', gdal_data_path2) logger.debug("GDAL_DATA = %s" % gdal.GetConfigOption('GDAL_DATA')) cls.gdal_data_fixed = True cls.push_gdal_error_handler() return # anaconda specific (Win) gdal_data_path3 = os.path.join(Helper.python_path(), 'Library', 'share', 'gdal') s57_agencies_csv_path3 = os.path.join(gdal_data_path3, 's57agencies.csv') if os.path.exists(s57_agencies_csv_path3): gdal.SetConfigOption('GDAL_DATA', gdal_data_path3) logger.debug("GDAL_DATA = %s" % gdal.GetConfigOption('GDAL_DATA')) cls.gdal_data_fixed = True cls.push_gdal_error_handler() return # anaconda specific (Linux) gdal_data_path4 = os.path.join(Helper.python_path(), 'share', 'gdal') s57_agencies_csv_path4 = os.path.join(gdal_data_path4, 's57agencies.csv') if os.path.exists(s57_agencies_csv_path4): gdal.SetConfigOption('GDAL_DATA', gdal_data_path4) logger.debug("GDAL_DATA = %s" % gdal.GetConfigOption('GDAL_DATA')) cls.gdal_data_fixed = True cls.push_gdal_error_handler() return # TODO: add more cases to find GDAL_DATA raise RuntimeError( "Unable to locate GDAL data at:\n- %s\n- %s\n- %s\n- %s\n- %s" % (gdal_data_path0, gdal_data_path1, gdal_data_path2, gdal_data_path3, gdal_data_path4))
class TestABCLibHelper(unittest.TestCase): def setUp(self): self.h = Helper(lib_info=LibInfo()) @unittest.skipIf(Helper.is_linux(), "test not supported on Linux") def test_explore_folder(self): self.assertTrue(self.h.explore_folder(__file__)) self.assertFalse(self.h.explore_folder(__file__ + ".fake")) self.assertTrue(self.h.explore_folder(os.path.dirname(__file__))) self.assertFalse(self.h.explore_folder(os.path.dirname(__file__) + "fake")) def test_first_match(self): # fake dict a_dict = { "a": 1, "b": 99, "c": 1, } # test if it gives back the first matching key self.assertTrue(Helper.first_match(a_dict, 1) in ["a", "c"]) # test if it raises with a not-existing value with self.assertRaises(RuntimeError): Helper.first_match(a_dict, 2) def test_is_64bit_os(self): self.assertIsInstance(self.h.is_64bit_os(), bool) def test_is_64bit_python(self): self.assertIsInstance(self.h.is_64bit_python(), bool) def test_is_darwin_linux_windows(self): self.assertIsInstance(self.h.is_darwin(), bool) self.assertIsInstance(self.h.is_linux(), bool) self.assertIsInstance(self.h.is_windows(), bool) self.assertTrue(any([self.h.is_linux(), self.h.is_darwin(), self.h.is_windows()])) def test_is_pydro(self): self.assertIsInstance(self.h.is_pydro(), bool) def test_is_url(self): self.assertTrue(self.h.is_url("https://www.hydroffice.org")) self.assertTrue(self.h.is_url("http://www.hydroffice.org")) self.assertFalse(self.h.is_url("ftp://fake/url")) def test_python_path(self): self.assertTrue(os.path.exists(self.h.python_path())) def test_package_info(self): self.assertIsInstance(self.h.package_info(qt_html=True), str) self.assertIsInstance(self.h.package_info(qt_html=False), str) def test_package_folder(self): self.assertTrue(os.path.exists(self.h.package_folder())) def test_hydroffice_folder(self): self.assertTrue(os.path.exists(self.h.hydroffice_folder()))