/usr/lib/python2.7/dist-packages/rasterio/vfs.py is in python-rasterio 0.36.0-2build5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | """Implementation of Apache VFS schemes and URLs."""
import os
from rasterio.compat import urlparse
# NB: As not to propagate fallacies of distributed computing, Rasterio
# does not support HTTP or FTP URLs via GDAL's vsicurl handler. Only
# the following local filesystem schemes are supported.
SCHEMES = {'gzip': 'gzip', 'zip': 'zip', 'tar': 'tar', 'https': 'curl',
'http': 'curl', 's3': 's3'}
def parse_path(uri, vfs=None):
"""Parse a URI or Apache VFS URL into its parts
Returns: tuple
(path, archive, scheme)
"""
archive = scheme = None
path = uri
if vfs:
parts = urlparse(vfs)
scheme = parts.scheme
archive = parts.path
if parts.netloc and parts.netloc != 'localhost': # pragma: no cover
archive = parts.netloc + archive
else:
parts = urlparse(path)
scheme = parts.scheme
path = parts.path
if parts.netloc and parts.netloc != 'localhost':
path = parts.netloc + path
# There are certain URI schemes we favor over GDAL's names.
if scheme in SCHEMES:
parts = path.split('!')
path = parts.pop() if parts else None
archive = parts.pop() if parts else None
# For filesystem paths.
elif scheme in (None, '', 'file'):
pass
# We permit GDAL's idiosyncratic URI-like dataset paths such as
# 'NETCDF:...' to fall right through with no parsed archive
# or scheme.
else:
archive = scheme = None
path = uri
return path, archive, scheme
def vsi_path(path, archive=None, scheme=None):
"""Convert a parsed path to a GDAL VSI path."""
# If a VSF and archive file are specified, we convert the path to
# a GDAL VSI path (see cpl_vsi.h).
if scheme and scheme.startswith('http'):
result = "/vsicurl/{0}://{1}".format(scheme, path)
elif scheme and scheme == 's3':
result = "/vsis3/{0}".format(path)
elif scheme and scheme != 'file':
path = path.strip('/')
result = '/'.join(
['/vsi{0}'.format(scheme), archive, path])
else:
result = path
return result
|