Esempio n. 1
0
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'
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)
Esempio n. 4
0
    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
Esempio n. 5
0
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'
Esempio n. 6
0
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())
Esempio n. 7
0
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)
Esempio n. 8
0
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'
Esempio n. 9
0
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)