Skip to content

Instantly share code, notes, and snippets.

@delijati
Created March 8, 2018 13:48
Show Gist options
  • Save delijati/d8130c08a2b2b3cf0716db9b31c30dbd to your computer and use it in GitHub Desktop.
Save delijati/d8130c08a2b2b3cf0716db9b31c30dbd to your computer and use it in GitHub Desktop.
S3 bucket path parser
import unittest
import os
from urllib.parse import urlparse
class S3Parse(object):
def __init__(self, uri):
self.uri = uri
self.parsed = urlparse(uri)
@property
def path(self):
return os.path.split(self.key)[0]
@property
def bucket(self):
return self.parsed.netloc
@property
def key(self):
return self.parsed.path.lstrip("/")
@property
def file(self):
return os.path.basename(self.parsed.path)
def change_file(self, name):
nuri = os.path.join(os.path.split(self.uri)[0], name)
return S3Parse(nuri)
class TestS3Parse(unittest.TestCase):
def test_s3parse(self):
parse = S3Parse("s3://my-bucket/my-folder/my-object.png")
self.assertEqual(parse.key, "my-folder/my-object.png")
self.assertEqual(parse.file, "my-object.png")
self.assertEqual(parse.bucket, "my-bucket")
self.assertEqual(parse.path, "my-folder")
# test change_file
nparse = parse.change_file("new-image.jpg")
self.assertEqual(nparse.key, "my-folder/new-image.jpg")
self.assertEqual(nparse.file, "new-image.jpg")
self.assertEqual(nparse.bucket, "my-bucket")
self.assertEqual(nparse.path, "my-folder")
self.assertEqual(nparse.uri, "s3://my-bucket/my-folder/new-image.jpg")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment