def wrapper(*args, **kwds): if local._env: env_ctor = Env else: env_ctor = Env.from_defaults if isinstance(args[0], str): session = Session.from_path(args[0]) else: session = Session.from_path(None) with env_ctor(session=session): return f(*args, **kwds)
def wrapper(*args, **kwds): if local._env: env_ctor = Env else: env_ctor = Env.from_defaults if isinstance(args[0], str): session = Session.from_path(args[0]) else: session = Session.from_path(None) with env_ctor(session=session): return f(*args, **kwds)
def test_foreign_session_factory_s3(): boto3 = pytest.importorskip("boto3") aws_session = boto3.Session(aws_access_key_id='foo', aws_secret_access_key='bar') sesh = Session.from_foreign_session(aws_session, cls=AWSSession) assert isinstance(sesh, AWSSession) assert sesh._session.get_credentials().access_key == 'foo' assert sesh._session.get_credentials().secret_key == 'bar'
def test_foreign_session_factory_s3(): boto3 = pytest.importorskip("boto3") aws_session = boto3.Session(aws_access_key_id='foo', aws_secret_access_key='bar') sesh = Session.from_foreign_session(aws_session, cls=AWSSession) assert isinstance(sesh, AWSSession) assert sesh._session.get_credentials().access_key == 'foo' assert sesh._session.get_credentials().secret_key == 'bar'
def test_session_factory_s3_no_boto3(monkeypatch): """Get an AWSSession for s3:// paths""" pytest.importorskip("boto3") with monkeypatch.context() as mpctx: mpctx.setattr("rasterio.session.boto3", None) sesh = Session.from_path("s3://lol/wut") assert isinstance(sesh, DummySession)
def test_session_factory_s3_kwargs(): """Get an AWSSession for s3:// paths with keywords""" pytest.importorskip("boto3") sesh = Session.from_path("s3://lol/wut", aws_access_key_id='foo', aws_secret_access_key='bar') assert isinstance(sesh, AWSSession) assert sesh._session.get_credentials().access_key == 'foo' assert sesh._session.get_credentials().secret_key == 'bar'
def test_session_factory_s3_kwargs(): """Get an AWSSession for s3:// paths with keywords""" pytest.importorskip("boto3") sesh = Session.from_path("s3://lol/wut", aws_access_key_id='foo', aws_secret_access_key='bar') assert isinstance(sesh, AWSSession) assert sesh._session.get_credentials().access_key == 'foo' assert sesh._session.get_credentials().secret_key == 'bar'
def test_session_factory_oss_kwargs(): """Get an OSSSession for oss:// paths with keywords""" sesh = Session.from_path("oss://lol/wut", oss_access_key_id='foo', oss_secret_access_key='bar') assert isinstance(sesh, OSSSession) assert sesh.get_credential_options()['OSS_ACCESS_KEY_ID'] == 'foo' assert sesh.get_credential_options()['OSS_SECRET_ACCESS_KEY'] == 'bar'
def test_session_factory_az_kwargs_connection_string(): """Get an AzureSession for az:// paths with keywords""" sesh = Session.from_path("az://lol/wut", azure_storage_connection_string= 'AccountName=myaccount;AccountKey=MY_ACCOUNT_KEY') assert isinstance(sesh, AzureSession) assert sesh.get_credential_options( )['AZURE_STORAGE_CONNECTION_STRING'] == 'AccountName=myaccount;AccountKey=MY_ACCOUNT_KEY'
def test_session_factory_az_kwargs(): """Get an AzureSession for az:// paths with keywords""" sesh = Session.from_path("az://lol/wut", azure_storage_account='foo', azure_storage_access_key='bar') assert isinstance(sesh, AzureSession) assert sesh.get_credential_options()['AZURE_STORAGE_ACCOUNT'] == 'foo' assert sesh.get_credential_options()['AZURE_STORAGE_ACCESS_KEY'] == 'bar'
def wrapper(*args, **kwds): if local._env: env_ctor = Env else: env_ctor = Env.from_defaults if isinstance(args[0], str): session_cls = Session.cls_from_path(args[0]) if local._env and session_cls.hascreds(getenv()): session_cls = DummySession session = session_cls() else: session = DummySession() with env_ctor(session=session): return f(*args, **kwds)
def wrapper(*args, **kwds): if local._env: env_ctor = Env else: env_ctor = Env.from_defaults fp_arg = kwds.get("fp", None) or args[0] if isinstance(fp_arg, str): session_cls = Session.cls_from_path(fp_arg) if local._env and session_cls.hascreds(getenv()): session_cls = DummySession session = session_cls() else: session = DummySession() with env_ctor(session=session): return f(*args, **kwds)
def __init__(self, session=None, aws_unsigned=False, profile_name=None, session_class=Session.aws_or_dummy, **options): """Create a new GDAL/AWS environment. Note: this class is a context manager. GDAL isn't configured until the context is entered via `with rasterio.Env():` Parameters ---------- session : optional A Session object. aws_unsigned : bool, optional Do not sign cloud requests. profile_name : str, optional A shared credentials profile name, as per boto3. session_class : Session, optional A sub-class of Session. **options : optional A mapping of GDAL configuration options, e.g., `CPL_DEBUG=True, CHECK_WITH_INVERT_PROJ=False`. Returns ------- Env Notes ----- We raise EnvError if the GDAL config options AWS_ACCESS_KEY_ID or AWS_SECRET_ACCESS_KEY are given. AWS credentials are handled exclusively by boto3. Examples -------- >>> with Env(CPL_DEBUG=True, CPL_CURL_VERBOSE=True): ... with rasterio.open("https://example.com/a.tif") as src: ... print(src.profile) For access to secured cloud resources, a Rasterio Session or a foreign session object may be passed to the constructor. >>> import boto3 >>> from rasterio.session import AWSSession >>> boto3_session = boto3.Session(...) >>> with Env(AWSSession(boto3_session)): ... with rasterio.open("s3://mybucket/a.tif") as src: ... print(src.profile) """ aws_access_key_id = options.pop('aws_access_key_id', None) # Before 1.0, Rasterio only supported AWS. We will special # case AWS in 1.0.x. TODO: warn deprecation in 1.1. if aws_access_key_id: warnings.warn( "Passing abstract session keyword arguments is deprecated. " "Pass a Rasterio AWSSession object instead.", RasterioDeprecationWarning) aws_secret_access_key = options.pop('aws_secret_access_key', None) aws_session_token = options.pop('aws_session_token', None) region_name = options.pop('region_name', None) if ('AWS_ACCESS_KEY_ID' in options or 'AWS_SECRET_ACCESS_KEY' in options): raise EnvError( "GDAL's AWS config options can not be directly set. " "AWS credentials are handled exclusively by boto3.") if session: # Passing a session via keyword argument is the canonical # way to configure access to secured cloud resources. if not isinstance(session, Session): warnings.warn( "Passing a boto3 session is deprecated. Pass a Rasterio " "AWSSession object instead.", RasterioDeprecationWarning) session = Session.aws_or_dummy(session=session) self.session = session elif aws_access_key_id or profile_name or aws_unsigned: self.session = Session.aws_or_dummy( aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key, aws_session_token=aws_session_token, region_name=region_name, profile_name=profile_name, aws_unsigned=aws_unsigned) elif 'AWS_ACCESS_KEY_ID' in os.environ and 'AWS_SECRET_ACCESS_KEY' in os.environ: self.session = Session.from_environ() else: self.session = DummySession() self.options = options.copy() self.context_options = {}
def test_session_factory_swift_kwargs(): """Get an SwiftSession for /vsiswift/bucket/key with keywords""" sesh = Session.from_path("/vsiswift/lol/wut", swift_storage_url='foo', swift_auth_token='bar') assert isinstance(sesh, DummySession)
def test_session_aws_or_dummy_dummy(monkeypatch): """Get a DummySession when boto3 is not available""" boto3 = pytest.importorskip("boto3") with monkeypatch.context() as mpctx: mpctx.setattr("rasterio.session.boto3", None) assert isinstance(Session.aws_or_dummy(), DummySession)
def test_session_aws_or_dummy_aws(): """Get an AWSSession when boto3 is available""" boto3 = pytest.importorskip("boto3") assert isinstance(Session.aws_or_dummy(), AWSSession)
def test_session_factory_empty(): """Get a DummySession for no path""" sesh = Session.from_path("") assert isinstance(sesh, DummySession)
def test_session_factory_unparsed(): """Get a DummySession for unparsed paths""" sesh = Session.from_path("/vsicurl/lolwut") assert isinstance(sesh, DummySession)
def test_base_session_get_credential_options_notimpl(): """Session.get_credential_options must be overridden""" assert Session().get_credential_options() is NotImplemented
def test_session_factory_swift_kwargs(): """Get an SwiftSession for /vsiswift/bucket/key with keywords""" sesh = Session.from_path("/vsiswift/lol/wut", swift_storage_url='foo', swift_auth_token='bar') assert isinstance(sesh, DummySession)
def test_foreign_session_factory_dummy(): sesh = Session.from_foreign_session(None) assert isinstance(sesh, DummySession)
def test_session_factory_local(): """Get a DummySession for local paths""" sesh = Session.from_path("file:///lolwut") assert isinstance(sesh, DummySession)
def test_session_factory_s3(): """Get an AWSSession for s3:// paths""" pytest.importorskip("boto3") sesh = Session.from_path("s3://lol/wut") assert isinstance(sesh, AWSSession)
def test_session_factory_unknown(): """Get a DummySession for unknown paths""" sesh = Session.from_path("https://fancy-cloud.com/lolwut") assert isinstance(sesh, DummySession)
def test_foreign_session_factory_dummy(): sesh = Session.from_foreign_session(None) assert isinstance(sesh, DummySession)
def test_session_factory_empty(): """Get a DummySession for no path""" sesh = Session.from_path("") assert isinstance(sesh, DummySession)
def test_session_factory_unknown(): """Get a DummySession for unknown paths""" sesh = Session.from_path("https://fancy-cloud.com/lolwut") assert isinstance(sesh, DummySession)
def test_session_factory_oss_kwargs(): """Get an OSSSession for oss:// paths with keywords""" sesh = Session.from_path("oss://lol/wut", oss_access_key_id='foo', oss_secret_access_key='bar') assert isinstance(sesh, OSSSession) assert sesh.get_credential_options()['OSS_ACCESS_KEY_ID'] == 'foo' assert sesh.get_credential_options()['OSS_SECRET_ACCESS_KEY'] == 'bar'
def test_base_session_hascreds_notimpl(): """Session.hascreds must be overridden""" assert Session.hascreds({}) is NotImplemented
def test_session_factory_unparsed(): """Get a DummySession for unparsed paths""" sesh = Session.from_path("/vsicurl/lolwut") assert isinstance(sesh, DummySession)
def test_session_factory_local(): """Get a DummySession for local paths""" sesh = Session.from_path("file:///lolwut") assert isinstance(sesh, DummySession)
def test_session_factory_s3_presigned_url(): """Get a DummySession for presigned URLs""" sesh = Session.from_path( "https://fancy-cloud.com/lolwut?X-Amz-Signature=foo") assert isinstance(sesh, DummySession)
def test_session_factory_s3(): """Get an AWSSession for s3:// paths""" pytest.importorskip("boto3") sesh = Session.from_path("s3://lol/wut") assert isinstance(sesh, AWSSession)
def test_base_session_hascreds_notimpl(): """Session.hascreds must be overridden""" assert Session.hascreds({}) is NotImplemented