Add storage_name parameter on storages

This commit is contained in:
Markus Unterwaditzer 2014-05-27 18:37:37 +02:00
parent a1f7c4cb00
commit 55ad24db3d
8 changed files with 29 additions and 12 deletions

View file

@ -87,7 +87,6 @@ def test_expand_collection(monkeypatch):
s.collection = 'a{}'.format(i)
yield s
class TypeB(object):
@classmethod
def discover(cls, **config):
@ -100,7 +99,6 @@ def test_expand_collection(monkeypatch):
s.collection = 'b{}'.format(i)
yield s
import vdirsyncer.storage
monkeypatch.setitem(vdirsyncer.storage.storage_names, 'mytype_a', TypeA)
monkeypatch.setitem(vdirsyncer.storage.storage_names, 'mytype_b', TypeB)

View file

@ -138,7 +138,7 @@ def storage_instance_from_config(config, description=None):
invalid = given - all
cli_logger.critical('error: Failed to initialize {}'
.format(description or storage_name))
.format(description or cls.storage_name))
if not missing and not invalid:
cli_logger.exception('')
@ -146,12 +146,12 @@ def storage_instance_from_config(config, description=None):
if missing:
cli_logger.critical(
u'error: {} storage requires the parameters: {}'
.format(storage_name, u', '.join(missing)))
.format(cls.storage_name, u', '.join(missing)))
if invalid:
cli_logger.critical(
u'error: {} storage doesn\'t take the parameters: {}'
.format(storage_name, u', '.join(invalid)))
.format(cls.storage_name, u', '.join(invalid)))
sys.exit(1)

View file

@ -17,10 +17,23 @@ from .filesystem import FilesystemStorage
from .http import HttpStorage
from .singlefile import SingleFileStorage
storage_names = {
'caldav': CaldavStorage,
'carddav': CarddavStorage,
'filesystem': FilesystemStorage,
'http': HttpStorage,
'singlefile': SingleFileStorage
}
def _generate_storage_dict(*classes):
rv = {}
for cls in classes:
key = cls.storage_name
assert key
assert isinstance(key, str)
assert key not in rv
rv[key] = cls
return rv
storage_names = _generate_storage_dict(
CaldavStorage,
CarddavStorage,
FilesystemStorage,
HttpStorage,
SingleFileStorage
)
del _generate_storage_dict

View file

@ -69,6 +69,7 @@ class Storage(object):
looked for.
'''
fileext = '.txt'
storage_name = None # the name used in the config file
_repr_attributes = ()
@classmethod

View file

@ -287,6 +287,7 @@ class CaldavStorage(DavStorage):
in the normal usecase.
'''
storage_name = 'caldav'
fileext = '.ics'
item_mimetype = 'text/calendar'
dav_header = 'calendar-access'
@ -383,6 +384,7 @@ class CarddavStorage(DavStorage):
CardDAV. Usable as ``carddav`` in the config file.
''' + DavStorage.__doc__
storage_name = 'carddav'
fileext = '.vcf'
item_mimetype = 'text/vcard'
dav_header = 'addressbook'

View file

@ -36,6 +36,7 @@ class FilesystemStorage(Storage):
:param create: Create directories if they don't exist.
'''
storage_name = 'filesystem'
_repr_attributes = ('path',)
def __init__(self, path, fileext, collection=None, encoding='utf-8',

View file

@ -74,6 +74,7 @@ class HttpStorage(Storage):
url = https://example.com/holidays_from_hicksville.ics
'''
storage_name = 'http'
_repr_attributes = ('username', 'url')
_items = None

View file

@ -49,6 +49,7 @@ class SingleFileStorage(Storage):
'''
storage_name = 'singlefile'
_repr_attributes = ('path',)
_write_mode = 'wb'