text: try:
      from urlparse import urlparse
  except ImportError:
      from urllib.parse import urlparse
  
  # S3Url class courtesy: https://stackoverflow.com/questions/42641315/s3-urls-get-bucket-name-and-path
  class S3Url(object):
      """
      >>> s = S3Url("s3://bucket/hello/world")
      >>> s.bucket
      'bucket'
      >>> s.key
      'hello/world'
      >>> s.url
      's3://bucket/hello/world'
  
      >>> s = S3Url("s3://bucket/hello/world?qwe1=3#ddd")
      >>> s.bucket
      'bucket'
      >>> s.key
      'hello/world?qwe1=3#ddd'
      >>> s.url
      's3://bucket/hello/world?qwe1=3#ddd'
  
      >>> s = S3Url("s3://bucket/hello/world#foo?bar=2")
      >>> s.key
      'hello/world#foo?bar=2'
      >>> s.url
      's3://bucket/hello/world#foo?bar=2'
      """
  
      def __init__(self, url):
          self._parsed = urlparse(url, allow_fragments=False)
  
      @property
      def bucket(self):
          return self._parsed.netloc
  
      @property
      def key(self):
          if self._parsed.query:
              return self._parsed.path.lstrip('/') + '?' + self._parsed.query
          else:
              return self._parsed.path.lstrip('/')
  
      @property
      def url(self):
          return self._parsed.geturl()
  