Created
March 8, 2018 13:48
-
-
Save delijati/d8130c08a2b2b3cf0716db9b31c30dbd to your computer and use it in GitHub Desktop.
S3 bucket path parser
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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