Skip to content

Commit 815e6f5

Browse files
committed
S3 - Fix using domain-like buckets.
S3 - Add methods has(src) and list() for Bucket
1 parent 5116dcb commit 815e6f5

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

cloudwrapper/s3.py

+16-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@
77

88
import os
99

10+
from .base import BaseBucket
11+
1012
try:
1113
from boto.s3 import connect_to_region, connection
1214
from boto.exception import S3ResponseError
15+
from boto.s3.connection import ProtocolIndependentOrdinaryCallingFormat
1316
except ImportError:
1417
from warnings import warn
1518
install_modules = [
@@ -33,12 +36,14 @@ def __init__(self, region, key=None, secret=None, host=None):
3336
self.connection = connection.S3Connection(
3437
host=host,
3538
aws_access_key_id=key,
36-
aws_secret_access_key=secret)
39+
aws_secret_access_key=secret,
40+
calling_format=ProtocolIndependentOrdinaryCallingFormat())
3741
else:
3842
self.connection = connect_to_region(
3943
region,
4044
aws_access_key_id=key,
41-
aws_secret_access_key=secret)
45+
aws_secret_access_key=secret,
46+
calling_format=ProtocolIndependentOrdinaryCallingFormat())
4247

4348
def bucket(self, name, create=False):
4449
for _ in range(6):
@@ -51,7 +56,7 @@ def bucket(self, name, create=False):
5156
raise
5257

5358

54-
class Bucket(object):
59+
class Bucket(BaseBucket):
5560

5661
PART_LIMIT = (4 << 30) # 4 GB
5762

@@ -80,3 +85,11 @@ def put(self, source, target):
8085
def get(self, source, target):
8186
key = self.handle.get_key(source, validate=False)
8287
key.get_contents_to_filename(target)
88+
89+
def has(self, source):
90+
key = self.handle.get_key(source, validate=False)
91+
return key.exists()
92+
93+
def list(self, prefix=None):
94+
for key in self.handle.get_all_keys(prefix=prefix):
95+
yield key

0 commit comments

Comments
 (0)