Source code for cottonformation.core.console
# -*- coding: utf-8 -*-
"""
AWS Console Url related function.
"""
import typing as T
[docs]def split_s3_uri(
s3_uri: str,
) -> T.Tuple[str, str]: # pragma: no cover
"""
Split AWS S3 URI, returns bucket and key.
:param s3_uri: example, ``"s3://my-bucket/my-folder/data.json"``
"""
parts = s3_uri.split("/")
bucket = parts[2]
key = "/".join(parts[3:])
return bucket, key
[docs]def get_s3_console_url(
bucket: T.Optional[str] = None,
prefix: T.Optional[str] = None,
s3_uri: T.Optional[str] = None,
is_us_gov_cloud: bool = False,
) -> str: # pragma: no cover
"""
Return an AWS Console url that you can use to open it in your browser.
:param bucket: example, ``"my-bucket"``
:param prefix: example, ``"my-folder/"``
:param s3_uri: example, ``"s3://my-bucket/my-folder/data.json"``
:param is_us_gov_cloud: whether it is a gov cloud
Example::
>>> get_s3_console_url(s3_uri="s3://my-bucket/my-folder/data.json")
https://s3.console.aws.amazon.com/s3/object/my-bucket?prefix=my-folder/data.json
"""
if s3_uri is None:
if not ((bucket is not None) and (prefix is not None)):
raise ValueError
else:
if not ((bucket is None) and (prefix is None)):
raise ValueError
bucket, prefix = split_s3_uri(s3_uri)
if len(prefix) == 0:
return "https://console.aws.amazon.com/s3/buckets/{}?tab=objects".format(
bucket,
)
elif prefix.endswith("/"):
s3_type = "buckets"
else:
s3_type = "object"
if is_us_gov_cloud:
endpoint = "console.amazonaws-us-gov.com"
else:
endpoint = "console.aws.amazon.com"
return "https://{endpoint}/s3/{s3_type}/{bucket}?prefix={prefix}".format(
endpoint=endpoint, s3_type=s3_type, bucket=bucket, prefix=prefix
)