Skip to content

Commit

Permalink
Ensure path exits when opening local file in write mode
Browse files Browse the repository at this point in the history
  • Loading branch information
noirbizarre committed Mar 12, 2018
1 parent d48a471 commit 91d476a
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 9 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Current
- Added `metadata` method to `Storage` to retrieve file metadata
- Force `boto3 >= 1.4.5` because of API change (lifecycle)
- Drop Python 3.3 support
- Create parent directories when opening a local file in write mode

0.4.1 (2017-06-24)
------------------
Expand Down
18 changes: 9 additions & 9 deletions flask_fs/backends/local.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,15 @@ def exists(self, filename):
dest = self.path(filename)
return os.path.exists(dest)

def ensure_path(self, filename):
dirname = os.path.dirname(self.path(filename))
if not os.path.exists(dirname):
os.makedirs(dirname)

def open(self, filename, mode='r', encoding='utf8'):
dest = self.path(filename)
if 'w' in mode:
self.ensure_path(filename)
if 'b' in mode:
return open(dest, mode)
else:
Expand All @@ -67,11 +74,7 @@ def read(self, filename):
return f.read()

def write(self, filename, content):
dest = self.path(filename)
dirname = os.path.dirname(dest)
if not os.path.exists(dirname):
os.makedirs(dirname)

self.ensure_path(filename)
with self.open(filename, 'wb') as f:
return f.write(self.as_binary(content))

Expand All @@ -80,12 +83,9 @@ def delete(self, filename):
return os.remove(dest)

def save(self, file_or_wfs, filename):
self.ensure_path(filename)
dest = self.path(filename)

folder = os.path.dirname(dest)
if not os.path.exists(folder):
os.makedirs(folder)

if isinstance(file_or_wfs, FileStorage):
file_or_wfs.save(dest)
else:
Expand Down

0 comments on commit 91d476a

Please sign in to comment.