mirror of
https://github.com/samsonjs/vdirsyncer.git
synced 2026-04-25 14:37:47 +00:00
Move imports for startup speed
This commit is contained in:
parent
b2fccdb484
commit
7ef30202d6
3 changed files with 32 additions and 27 deletions
|
|
@ -60,8 +60,7 @@ def test_storage_instance_from_config(monkeypatch):
|
||||||
assert kw == {'foo': 'bar', 'baz': 1}
|
assert kw == {'foo': 'bar', 'baz': 1}
|
||||||
return 'OK'
|
return 'OK'
|
||||||
|
|
||||||
import vdirsyncer.storage
|
monkeypatch.setitem(cli.utils.storage_names._storages,
|
||||||
monkeypatch.setitem(vdirsyncer.cli.utils.storage_names._storages,
|
|
||||||
'lol', lol)
|
'lol', lol)
|
||||||
config = {'type': 'lol', 'foo': 'bar', 'baz': 1}
|
config = {'type': 'lol', 'foo': 'bar', 'baz': 1}
|
||||||
assert cli.utils.storage_instance_from_config(config) == 'OK'
|
assert cli.utils.storage_instance_from_config(config) == 'OK'
|
||||||
|
|
@ -75,7 +74,7 @@ def test_parse_pairs_args():
|
||||||
'eins': ('zwei', 'drei', {'ha': True}, {})
|
'eins': ('zwei', 'drei', {'ha': True}, {})
|
||||||
}
|
}
|
||||||
assert sorted(
|
assert sorted(
|
||||||
cli.parse_pairs_args(['foo/foocoll', 'one', 'eins'], pairs)
|
cli.utils.parse_pairs_args(['foo/foocoll', 'one', 'eins'], pairs)
|
||||||
) == [
|
) == [
|
||||||
('eins', set()),
|
('eins', set()),
|
||||||
('foo', {'foocoll'}),
|
('foo', {'foocoll'}),
|
||||||
|
|
|
||||||
|
|
@ -3,19 +3,38 @@
|
||||||
import functools
|
import functools
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from .tasks import discover_collections, repair_collection, sync_pair
|
|
||||||
from .utils import CliError, WorkerQueue, cli_logger, handle_cli_error, \
|
|
||||||
load_config, parse_pairs_args
|
|
||||||
from .. import __version__, log
|
from .. import __version__, log
|
||||||
from ..doubleclick import click, ctx
|
from ..doubleclick import click, ctx
|
||||||
|
|
||||||
|
|
||||||
|
cli_logger = log.get(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class CliError(RuntimeError):
|
||||||
|
def __init__(self, msg, problems=None):
|
||||||
|
self.msg = msg
|
||||||
|
self.problems = problems
|
||||||
|
RuntimeError.__init__(self, msg)
|
||||||
|
|
||||||
|
def format_cli(self):
|
||||||
|
msg = self.msg.rstrip(u'.:')
|
||||||
|
if self.problems:
|
||||||
|
msg += u':'
|
||||||
|
if len(self.problems) == 1:
|
||||||
|
msg += u' {}'.format(self.problems[0])
|
||||||
|
else:
|
||||||
|
msg += u'\n' + u'\n - '.join(self.problems) + u'\n\n'
|
||||||
|
|
||||||
|
return msg
|
||||||
|
|
||||||
|
|
||||||
def catch_errors(f):
|
def catch_errors(f):
|
||||||
@functools.wraps(f)
|
@functools.wraps(f)
|
||||||
def inner(*a, **kw):
|
def inner(*a, **kw):
|
||||||
try:
|
try:
|
||||||
f(*a, **kw)
|
f(*a, **kw)
|
||||||
except:
|
except:
|
||||||
|
from .utils import handle_cli_error
|
||||||
handle_cli_error()
|
handle_cli_error()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
@ -41,6 +60,7 @@ def app(verbosity):
|
||||||
'''
|
'''
|
||||||
vdirsyncer -- synchronize calendars and contacts
|
vdirsyncer -- synchronize calendars and contacts
|
||||||
'''
|
'''
|
||||||
|
from .utils import load_config
|
||||||
log.add_handler(log.stdout_handler)
|
log.add_handler(log.stdout_handler)
|
||||||
log.set_level(verbosity)
|
log.set_level(verbosity)
|
||||||
|
|
||||||
|
|
@ -89,6 +109,8 @@ def sync(pairs, force_delete, max_workers):
|
||||||
`vdirsyncer sync bob/first_collection` will sync "first_collection" from
|
`vdirsyncer sync bob/first_collection` will sync "first_collection" from
|
||||||
the pair "bob".
|
the pair "bob".
|
||||||
'''
|
'''
|
||||||
|
from .tasks import sync_pair
|
||||||
|
from .utils import parse_pairs_args, WorkerQueue
|
||||||
general, all_pairs, all_storages = ctx.obj['config']
|
general, all_pairs, all_storages = ctx.obj['config']
|
||||||
|
|
||||||
cli_logger.debug('Using {} maximal workers.'.format(max_workers))
|
cli_logger.debug('Using {} maximal workers.'.format(max_workers))
|
||||||
|
|
@ -114,6 +136,8 @@ def discover(pairs, max_workers):
|
||||||
'''
|
'''
|
||||||
Refresh collection cache for the given pairs.
|
Refresh collection cache for the given pairs.
|
||||||
'''
|
'''
|
||||||
|
from .tasks import discover_collections
|
||||||
|
from .utils import WorkerQueue
|
||||||
general, all_pairs, all_storages = ctx.obj['config']
|
general, all_pairs, all_storages = ctx.obj['config']
|
||||||
cli_logger.debug('Using {} maximal workers.'.format(max_workers))
|
cli_logger.debug('Using {} maximal workers.'.format(max_workers))
|
||||||
wq = WorkerQueue(max_workers)
|
wq = WorkerQueue(max_workers)
|
||||||
|
|
@ -151,5 +175,6 @@ def repair(collection):
|
||||||
Example: `vdirsyncer repair calendars_local/foo` repairs the `foo`
|
Example: `vdirsyncer repair calendars_local/foo` repairs the `foo`
|
||||||
collection of the `calendars_local` storage.
|
collection of the `calendars_local` storage.
|
||||||
'''
|
'''
|
||||||
|
from .tasks import repair_collection
|
||||||
general, all_pairs, all_storages = ctx.obj['config']
|
general, all_pairs, all_storages = ctx.obj['config']
|
||||||
repair_collection(general, all_pairs, all_storages, collection)
|
repair_collection(general, all_pairs, all_storages, collection)
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,8 @@ from itertools import chain
|
||||||
|
|
||||||
from atomicwrites import atomic_write
|
from atomicwrites import atomic_write
|
||||||
|
|
||||||
from .. import DOCS_HOME, PROJECT_HOME, exceptions, log
|
from . import cli_logger, CliError
|
||||||
|
from .. import DOCS_HOME, PROJECT_HOME, exceptions
|
||||||
from ..doubleclick import click
|
from ..doubleclick import click
|
||||||
from ..sync import IdentConflict, StorageEmpty, SyncConflict
|
from ..sync import IdentConflict, StorageEmpty, SyncConflict
|
||||||
from ..utils import expand_path, get_class_init_args
|
from ..utils import expand_path, get_class_init_args
|
||||||
|
|
@ -58,31 +59,11 @@ storage_names = _StorageIndex()
|
||||||
del _StorageIndex
|
del _StorageIndex
|
||||||
|
|
||||||
|
|
||||||
cli_logger = log.get(__name__)
|
|
||||||
|
|
||||||
GENERAL_ALL = frozenset(['status_path', 'password_command'])
|
GENERAL_ALL = frozenset(['status_path', 'password_command'])
|
||||||
GENERAL_REQUIRED = frozenset(['status_path'])
|
GENERAL_REQUIRED = frozenset(['status_path'])
|
||||||
SECTION_NAME_CHARS = frozenset(chain(string.ascii_letters, string.digits, '_'))
|
SECTION_NAME_CHARS = frozenset(chain(string.ascii_letters, string.digits, '_'))
|
||||||
|
|
||||||
|
|
||||||
class CliError(RuntimeError):
|
|
||||||
def __init__(self, msg, problems=None):
|
|
||||||
self.msg = msg
|
|
||||||
self.problems = problems
|
|
||||||
RuntimeError.__init__(self, msg)
|
|
||||||
|
|
||||||
def format_cli(self):
|
|
||||||
msg = self.msg.rstrip(u'.:')
|
|
||||||
if self.problems:
|
|
||||||
msg += u':'
|
|
||||||
if len(self.problems) == 1:
|
|
||||||
msg += u' {}'.format(self.problems[0])
|
|
||||||
else:
|
|
||||||
msg += u'\n' + u'\n - '.join(self.problems) + u'\n\n'
|
|
||||||
|
|
||||||
return msg
|
|
||||||
|
|
||||||
|
|
||||||
class JobFailed(RuntimeError):
|
class JobFailed(RuntimeError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue