Merge pull request #2 from Prodesire/master

merge from origin
This commit is contained in:
focalism 2017-12-01 20:53:58 +08:00 committed by GitHub
commit 2164c67e4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 9 deletions

View File

@ -4,17 +4,33 @@ import shutil
# todo tests and docs
def makedirs(path, mode=0o755, ignore_errors=False, exist_ok=True):
def makedirs(path, mode=0o755, ignore_errors=False, exist_ok=False):
"""
Create a leaf directory and all intermediate ones.
Based on os.makedirs, but also supports ignore_errors which will
ignore all errors raised by os.makedirs.
"""
if exist_ok and os.path.exists(path):
return
try:
os.makedirs(path, mode)
except Exception:
if not ignore_errors:
if not exist_ok:
raise OSError('{} is exist'.format(path))
raise OSError('Create dir: {} error.')
def remove(path, ignore_errors=False, onerror=None):
"""
Remove a file or directory.
If ignore_errors is set, errors are ignored; otherwise, if onerror
is set, it is called to handle the error with arguments (func,
path, exc_info) where func is platform and implementation dependent;
path is the argument to that function that caused it to fail; and
exc_info is a tuple returned by sys.exc_info(). If ignore_errors
is False and onerror is None, an exception is raised.
"""
if ignore_errors:
def onerror(*args):
pass
@ -32,11 +48,27 @@ def remove(path, ignore_errors=False, onerror=None):
def removes(paths, ignore_errors=False, onerror=None):
"""
Remove a list of file and/or directory.
If ignore_errors is set, errors are ignored; otherwise, if onerror
is set, it is called to handle the error with arguments (func,
path, exc_info) where func is platform and implementation dependent;
path is the argument to that function that caused it to fail; and
exc_info is a tuple returned by sys.exc_info(). If ignore_errors
is False and onerror is None, an exception is raised.
"""
for path in paths:
remove(path, ignore_errors=ignore_errors, onerror=onerror)
def open_file(path, mode='wb+', buffer_size=-1, ignore_errors=False):
"""
Open a file, defualt mode 'wb+'.
If path not exists, it will be created automatically.
If ignore_errors is set, errors are ignored.
"""
f = None
try:
if path and not os.path.isdir(path):

View File

@ -4,16 +4,19 @@ import pytest
class Testmakedirs():
def test_makedirs(self,tmpdir):
def test_makedirs(self, tmpdir):
path = str(tmpdir.join('test'))
makedirs(path)
assert os.path.exists(path)
def test_makedirs_with_exists_path(self,tmpdir):
def test_makedirs_with_exists_path(self, tmpdir):
path = str(tmpdir.join('test'))
makedirs(path)
with pytest.raises(Exception) as e_info:
makedirs(path, exist_ok=True)
makedirs(path, exist_ok=True)
with pytest.raises(Exception):
makedirs(path, exist_ok=False)
def test_makedirs_with_ignore_error(self, tmpdir):
path = str(tmpdir.join('test'))
@ -23,8 +26,8 @@ class Testmakedirs():
def test_makedirs_without_ignore_error(self, tmpdir):
path = str(tmpdir.join('test'))
makedirs(path)
with pytest.raises(Exception) as e_info:
makedirs(path, ignore_errors=False)
with pytest.raises(Exception):
makedirs(path, ignore_errors=False, exist_ok=False)
def test_makedirs_with_mutl_dirs(self, tmpdir):
path = str(tmpdir.join('test/test'))