Skip to content

Commit 52d2447

Browse files
committed
test fixes
1 parent 3e938fe commit 52d2447

File tree

3 files changed

+50
-18
lines changed

3 files changed

+50
-18
lines changed

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,19 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](http://keepachangelog.com/)
55
and this project adheres to [Semantic Versioning](http://semver.org/).
66

7+
8+
## [0.1.4] - 2017-10-15
9+
10+
### Fixed
11+
12+
- copy() wasn't throwing FileExpected exception
13+
- Added keys to s3 property
14+
- Exception fixes in S3File
15+
16+
### Added
17+
18+
- Added endpoint_url to constructor
19+
720
## [0.1.3] - 2017-09-01
821

922
### Fixed

fs_s3fs/_s3fs.py

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ def readlines(self, hint=-1):
127127
def seek(self, offset, whence=os.SEEK_SET):
128128
if whence not in (os.SEEK_CUR, os.SEEK_END, os.SEEK_SET):
129129
raise ValueError("invalid value for 'whence'")
130-
return self._f.seek(offset, whence)
130+
self._f.seek(offset, whence)
131+
return self._f.tell()
131132

132133
def seekable(self):
133134
return True
@@ -155,12 +156,14 @@ def readinto(self, b):
155156
def write(self, b):
156157
if not self.__mode.writing:
157158
raise IOError('not open for reading')
158-
return self._f.write(b)
159+
self._f.write(b)
160+
return len(b)
159161

160162
def truncate(self, size=None):
161163
if size is None:
162164
size = self._f.tell()
163-
return self._f.truncate(size)
165+
self._f.truncate(size)
166+
return size
164167

165168

166169
@contextlib.contextmanager
@@ -205,8 +208,10 @@ class S3FS(FS):
205208
key from standard configuration files.
206209
:param str aws_secret_access_key: The secret key, or None to read
207210
the key from standard configuration files.
208-
:param str aws_sssion_token:
209-
:param str region: Option S3 region.
211+
:param str endpoint_url: Alternative endpoint url (``None`` to use
212+
default).
213+
:param str aws_session_token:
214+
:param str region: Optional S3 region.
210215
:param str delimiter: The delimiter to separate folders, defaults to
211216
a forward slash.
212217
@@ -256,6 +261,7 @@ def __init__(self,
256261
aws_access_key_id=None,
257262
aws_secret_access_key=None,
258263
aws_session_token=None,
264+
endpoint_url=None,
259265
region=None,
260266
delimiter='/'):
261267
_creds = (aws_access_key_id, aws_secret_access_key)
@@ -270,6 +276,7 @@ def __init__(self,
270276
self.aws_access_key_id = aws_access_key_id
271277
self.aws_secret_access_key = aws_secret_access_key
272278
self.aws_session_token = aws_session_token
279+
self.endpoint_url = endpoint_url
273280
self.region = region
274281
self.delimiter = delimiter
275282
self._tlocal = threading.local()
@@ -331,7 +338,13 @@ def _get_object(self, path, key):
331338
@property
332339
def s3(self):
333340
if not hasattr(self._tlocal, 's3'):
334-
self._tlocal.s3 = boto3.resource('s3')
341+
self._tlocal.s3 = boto3.resource(
342+
's3',
343+
aws_access_key_id=self.aws_access_key_id,
344+
aws_secret_access_key=self.aws_secret_access_key,
345+
aws_session_token=self.aws_session_token,
346+
endpoint_url=self.endpoint_url
347+
)
335348
return self._tlocal.s3
336349

337350
@property
@@ -341,7 +354,8 @@ def client(self):
341354
's3',
342355
aws_access_key_id=self.aws_access_key_id,
343356
aws_secret_access_key=self.aws_secret_access_key,
344-
aws_session_token=self.aws_session_token
357+
aws_session_token=self.aws_session_token,
358+
endpoint_url=self.endpoint_url
345359
)
346360
return self._tlocal.client
347361

@@ -663,7 +677,7 @@ def gen_info():
663677

664678
def setbytes(self, path, contents):
665679
if not isinstance(contents, bytes):
666-
raise ValueError('contents must be bytes')
680+
raise TypeError('contents must be bytes')
667681

668682
_path = self.validatepath(path)
669683
_key = self._path_to_key(_path)
@@ -706,15 +720,20 @@ def copy(self, src_path, dst_path, overwrite=False):
706720
raise errors.ResourceNotFound(dst_path)
707721
_src_key = self._path_to_key(_src_path)
708722
_dst_key = self._path_to_key(_dst_path)
709-
with s3errors(src_path):
710-
self.client.copy_object(
711-
Bucket=self._bucket_name,
712-
Key=_dst_key,
713-
CopySource={
714-
'Bucket':self._bucket_name,
715-
'Key':_src_key
716-
}
717-
)
723+
try:
724+
with s3errors(src_path):
725+
self.client.copy_object(
726+
Bucket=self._bucket_name,
727+
Key=_dst_key,
728+
CopySource={
729+
'Bucket':self._bucket_name,
730+
'Key':_src_key
731+
}
732+
)
733+
except errors.ResourceNotFound:
734+
if self.exists(src_path):
735+
raise errors.FileExpected(src_path)
736+
raise
718737

719738
def move(self, src_path, dst_path, overwrite=False):
720739
self.copy(src_path, dst_path, overwrite=overwrite)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
REQUIREMENTS = [
2626
"boto3~=1.4.0",
27-
"fs~=2.0.7",
27+
"fs~=2.0.12",
2828
"six~=1.10.0"
2929
]
3030

0 commit comments

Comments
 (0)