Skip to content

Commit 45da731

Browse files
committed
Add makedirs function.
1 parent fe5c11e commit 45da731

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

owncloud/owncloud.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,26 @@ def mkdir(self, path):
703703
path += '/'
704704
return self._make_dav_request('MKCOL', path)
705705

706+
def makedirs(self, exist_ok=False):
707+
"""Creates recursively remote directories
708+
709+
:param path: path to the remote directory to create
710+
:param exist_ok: if True, it does not throw an error if a folder already exist
711+
:returns: True if the operation succeeded, False otherwise
712+
:raises: HTTPResponseError in case an HTTP error status was returned
713+
"""
714+
try:
715+
self.mkdir(path)
716+
except HTTPResponseError as e:
717+
if e.status_code == 409:
718+
self.makedirs(os.path.dirname(path))
719+
self.makedirs(path)
720+
elif e.status_code == 405 and exist_ok:
721+
pass
722+
else:
723+
raise e
724+
return True
725+
706726
def delete(self, path):
707727
"""Deletes a remote file or directory
708728

owncloud/test/test.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,17 @@ def test_mkdir(self, file_name, content, subdir):
115115
self.assertTrue(self.client.mkdir(self.test_root + subdir))
116116
self.assertIsNotNone(self.client.file_info(self.test_root + subdir))
117117

118+
@data_provider(files_content)
119+
def test_makedirs(self, file_name, content, subdir):
120+
"""Test recursive subdirectory creation with existing folder"""
121+
new_dir = os.path.join(self.test_root, subdir, subdir)
122+
self.assertTrue(self.client.makedirs(new_dir))
123+
self.assertIsNotNone(self.client.file_info(new_dir))
124+
125+
new_dir = os.path.join(new_dir, subdir)
126+
self.assertTrue(self.client.makedirs(new_dir, exist_ok=True))
127+
self.assertIsNotNone(self.client.file_info(new_dir))
128+
118129
@data_provider(files_content)
119130
def test_put_file_contents(self, file_name, content, subdir):
120131
"""Test creating remote file with given contents"""

0 commit comments

Comments
 (0)