mirror of
https://github.com/samsonjs/vdirsyncer.git
synced 2026-04-17 12:45:52 +00:00
Directory checking for singlefilestorage
This commit is contained in:
parent
d015857834
commit
b54c413949
3 changed files with 31 additions and 23 deletions
|
|
@ -13,7 +13,7 @@ from .base import Item, Storage
|
|||
import vdirsyncer.exceptions as exceptions
|
||||
import vdirsyncer.log as log
|
||||
from vdirsyncer.utils import expand_path, text_type, safe_write, \
|
||||
get_etag_from_file
|
||||
get_etag_from_file, checkdir
|
||||
|
||||
logger = log.get(__name__)
|
||||
|
||||
|
|
@ -44,16 +44,7 @@ class FilesystemStorage(Storage):
|
|||
path = expand_path(path)
|
||||
if collection is not None:
|
||||
path = os.path.join(path, collection)
|
||||
if not os.path.isdir(path):
|
||||
if os.path.exists(path):
|
||||
raise IOError('{} is not a directory.')
|
||||
if create:
|
||||
os.makedirs(path, 0o750)
|
||||
else:
|
||||
raise IOError('Directory {} does not exist. Use create = '
|
||||
'True in your configuration to automatically '
|
||||
'create it, or create it '
|
||||
'yourself.'.format(path))
|
||||
checkdir(path, create=create)
|
||||
self.collection = collection
|
||||
self.path = path
|
||||
self.encoding = encoding
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import collections
|
|||
from .base import Item, Storage
|
||||
import vdirsyncer.exceptions as exceptions
|
||||
import vdirsyncer.log as log
|
||||
from vdirsyncer.utils import expand_path, safe_write, itervalues
|
||||
from vdirsyncer.utils import expand_path, safe_write, itervalues, checkfile
|
||||
from vdirsyncer.utils.vobject import split_collection, join_collection
|
||||
|
||||
logger = log.get(__name__)
|
||||
|
|
@ -44,17 +44,11 @@ class SingleFileStorage(Storage):
|
|||
raise ValueError('collection is not a valid argument for {}'
|
||||
.format(type(self).__name__))
|
||||
|
||||
if not os.path.isfile(path):
|
||||
if os.path.exists(path):
|
||||
raise IOError('{} is not a file.'.format(path))
|
||||
if create:
|
||||
self._write_mode = 'wb+'
|
||||
self._append_mode = 'ab+'
|
||||
else:
|
||||
raise IOError('File {} does not exist. Use create = '
|
||||
'True in your configuration to automatically '
|
||||
'create it, or create it '
|
||||
'yourself.'.format(path))
|
||||
checkfile(path, create=create)
|
||||
|
||||
if create:
|
||||
self._write_mode = 'wb+'
|
||||
self._append_mode = 'ab+'
|
||||
|
||||
self.path = path
|
||||
self.encoding = encoding
|
||||
|
|
|
|||
|
|
@ -276,3 +276,26 @@ def get_class_init_args(cls):
|
|||
s_all, s_required = get_class_init_args(supercls)
|
||||
|
||||
return all | s_all, required | s_required
|
||||
|
||||
def checkdir(path, create=False):
|
||||
if not os.path.isdir(path):
|
||||
if os.path.exists(path):
|
||||
raise IOError('{} is not a directory.'.format(path))
|
||||
if create:
|
||||
os.makedirs(path, 0o750)
|
||||
else:
|
||||
raise IOError('Directory {} does not exist. Use create = '
|
||||
'True in your configuration to automatically '
|
||||
'create it, or create it '
|
||||
'yourself.'.format(path))
|
||||
|
||||
def checkfile(path, create=False):
|
||||
checkdir(os.path.dirname(path), create=create)
|
||||
if not os.path.isfile(path):
|
||||
if os.path.exists(path):
|
||||
raise IOError('{} is not a file.'.format(path))
|
||||
if not create:
|
||||
raise IOError('File {} does not exist. Use create = '
|
||||
'True in your configuration to automatically '
|
||||
'create it, or create it '
|
||||
'yourself.'.format(path))
|
||||
|
|
|
|||
Loading…
Reference in a new issue