def uri_to_local_path(local_uri): """ Transform a URI to a platform dependent Path. :type local_uri: str :rtype: pathlib.Path For example on Unix: 'file:///tmp/something.txt' -> '/tmp/something.txt' On Windows: 'file:///C:/tmp/something.txt' -> 'C:\\tmp\\test.tmp' .. note: Only supports file:// schema URIs """ if not local_uri: return None components = compat.urlparse(local_uri) if components.scheme != 'file': raise ValueError('Only file URIs currently supported. Tried %r.' % components.scheme) path = compat.url2pathname(components.path) return pathlib.Path(path)
def _url2rasterio(url_str, fmt, layer): """ turn URL into a string that could be passed to raterio.open """ url = urlparse(url_str) assert url.scheme, "Expecting URL with scheme here" # if format is NETCDF of HDF need to pass NETCDF:path:band as filename to rasterio/GDAL for nasty_format in ('netcdf', 'hdf'): if nasty_format in fmt.lower(): if url.scheme != 'file': raise RuntimeError("Can't access %s over %s" % (fmt, url.scheme)) filename = '%s:%s:%s' % (fmt, uri_to_local_path(url_str), layer) return filename if url.scheme and url.scheme != 'file': return url_str # if local path strip scheme and other gunk return str(uri_to_local_path(url_str))
def uri_scheme(self): url = urlparse(self.uris[0]) if url.scheme == '': return 'file' return url.scheme