Skip to content

Commit efe11ee

Browse files
committed
readd support for append
1 parent 695b879 commit efe11ee

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

fs_s3fs/_s3fs.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from fs.subfs import SubFS
2626
from fs.path import basename, dirname, forcedir, join, normpath, relpath
2727
from fs.time import datetime_to_epoch
28+
from fs.tools import copy_file_data
2829

2930
from ._s3fs_file import S3InputFile, S3OutputFile
3031

@@ -417,9 +418,6 @@ def openbin(self, path, mode="r", buffering=-1, **options):
417418
_path = self.validatepath(path)
418419
_key = self._path_to_key(_path)
419420

420-
if _mode.appending:
421-
raise errors.ResourceError(path, msg="append mode is not supported")
422-
423421
if _mode.create:
424422
if self.strict:
425423
try:
@@ -441,10 +439,22 @@ def openbin(self, path, mode="r", buffering=-1, **options):
441439
raise errors.FileExpected(path)
442440

443441
obj = self.s3.Object(self._bucket_name, _key)
444-
return S3OutputFile(
442+
s3_file = S3OutputFile(
445443
obj,
446444
upload_kwargs=self._get_upload_args(_key)
447445
)
446+
if _mode.appending:
447+
with s3errors(path):
448+
try:
449+
s3_in_file = S3InputFile(obj)
450+
copy_file_data(
451+
s3_in_file,
452+
s3_file,
453+
chunk_size=s3_file._min_part_size,
454+
)
455+
except errors.ResourceNotFound:
456+
pass
457+
return s3_file
448458

449459
if self.strict:
450460
info = self.getinfo(path)

0 commit comments

Comments
 (0)