def test_uri_resolve(): abs_path = '/abs/path/to/something' some_uri = 'http://example.com/file.txt' base = 's3://foo' assert uri_resolve(base, abs_path) == "file://" + abs_path assert uri_resolve(base, some_uri) is some_uri assert uri_resolve(base, None) is base assert uri_resolve(base, '') is base assert uri_resolve(base, 'relative/path') == base + '/relative/path'
def __init__(self, ds: Dataset, band: str, uri_scheme: Optional[str] = None): try: mp, = ds.type.lookup_measurements([band]).values() except KeyError: raise ValueError('No such band: {}'.format(band)) mm = ds.measurements.get(mp.canonical_name) if mm is None: raise ValueError('No such band: {}'.format(band)) if ds.uris is None: raise ValueError('No uris defined on a dataset') base_uri = pick_uri(ds.uris, uri_scheme) bint, layer = _get_band_and_layer(mm) self.name = band self.uri = uri_resolve(base_uri, mm.get('path')) self.band = bint self.layer = layer self.dtype = mp.dtype self.nodata = mp.nodata self.units = mp.units self.crs = ds.crs self.transform = ds.transform self.format = ds.format or '' self.driver_data = _extract_driver_data(ds)
def __init__(self, ds: Dataset, band: str, uri_scheme: Optional[str] = None): mm = ds.measurements.get(band) mp = ds.type.measurements.get(band) if mm is None or mp is None: raise ValueError('No such band: {}'.format(band)) if ds.uris is None: raise ValueError('No uris defined on a dataset') base_uri = pick_uri(ds.uris, uri_scheme) bint, layer = _get_band_and_layer(mm) self.name = band self.uri = uri_resolve(base_uri, mm.get('path')) self.band = bint self.layer = layer self.dtype = mp.dtype self.nodata = mp.nodata self.units = mp.units self.crs = ds.crs self.transform = ds.transform self.center_time = ds.center_time self.format = ds.format self.driver_data = _extract_driver_data(ds)
def resolve_file(self, path: Location) -> str: """ Convert the given file offset to a fully qualified URL within the dataset location. """ if isinstance(path, Path): if path.is_absolute(): return path.as_uri() path = path.as_posix() location = self.dataset_location resolved = dc_uris.uri_resolve(location, path) return resolved
def test_uri_resolve(base): abs_path = '/abs/path/to/something' some_uri = 'http://example.com/file.txt' assert uri_resolve(base, abs_path) == "file://" + abs_path assert uri_resolve(base, some_uri) is some_uri assert uri_resolve(base, None) is base assert uri_resolve(base, '') is base assert uri_resolve(base, 'relative/path') == base + '/relative/path' assert uri_resolve(base + '/', 'relative/path') == base + '/relative/path' assert uri_resolve(base + '/some/dir/', 'relative/path') == base + '/some/dir/relative/path' if not is_vsipath(base): assert uri_resolve(base + '/some/dir/file.txt', 'relative/path') == base + '/some/dir/relative/path'
def measurement_paths(ds: Dataset) -> Dict[str, str]: """ Returns a dictionary mapping from band name to url pointing to band storage resource. :return: Band Name => URL """ if ds.uris is None: raise ValueError('No locations on this dataset') base = pick_uri(ds.uris) return dict((k, uri_resolve(base, m.get('path'))) for k, m in ds.measurements.items())
def uri_search_cmd(index: Index, paths: List[str], search_mode): """ Search by dataset locations PATHS may be either file paths or URIs """ if search_mode == 'guess': # This is what the API expects. I think it should be changed. search_mode = None for path in paths: datasets = list(index.datasets.get_datasets_for_location(uri_resolve(base=path), mode=search_mode)) if not datasets: _LOG.info(f"Not found in index: {path}") for dataset in datasets: print(dataset)
def test_uri_resolve(): abs_path = '/abs/path/to/something' some_uri = 'http://example.com/file.txt' s3_base = 's3://foo' gs_base = 'gs://foo' vsi_base = '/vsizip//vsicurl/https://host.tld/some/path' assert uri_resolve(s3_base, abs_path) == "file://" + abs_path assert uri_resolve(s3_base, some_uri) is some_uri assert uri_resolve(s3_base, None) is s3_base assert uri_resolve(s3_base, '') is s3_base assert uri_resolve(s3_base, 'relative/path') == s3_base + '/relative/path' assert uri_resolve(gs_base, abs_path) == "file://" + abs_path assert uri_resolve(gs_base, some_uri) is some_uri assert uri_resolve(gs_base, None) is gs_base assert uri_resolve(gs_base, '') is gs_base assert uri_resolve(gs_base, 'relative/path') == gs_base + '/relative/path' assert uri_resolve(vsi_base, 'relative/path') == vsi_base + '/relative/path' assert uri_resolve(vsi_base + '/', 'relative/path') == vsi_base + '/relative/path'
def _uri_resolve(location: str, path: str): # ODC's method doesn't support empty locations. Fall back to the path alone. if not location: return path return dc_uris.uri_resolve(location, path)