Skip to content

Commit 8d69b73

Browse files
author
Hugo Osvaldo Barrera
committed
Fetch displaynames asynchronously
1 parent 1a1f6f0 commit 8d69b73

File tree

3 files changed

+31
-25
lines changed

3 files changed

+31
-25
lines changed

vdirsyncer/cli/__init__.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,11 +211,9 @@ async def main():
211211
conn = aiohttp.TCPConnector(limit_per_host=16)
212212

213213
for pair_name in pairs or config.pairs:
214-
pair = config.get_pair(pair_name)
215-
216214
await discover_collections(
217215
status_path=config.general["status_path"],
218-
pair=pair,
216+
pair=config.get_pair(pair_name),
219217
from_cache=False,
220218
list_collections=list,
221219
connector=conn,

vdirsyncer/cli/config.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from __future__ import annotations
2+
13
import json
24
import os
35
import string
@@ -206,7 +208,7 @@ def get_storage_args(self, storage_name):
206208
else:
207209
return expand_fetch_params(args)
208210

209-
def get_pair(self, pair_name):
211+
def get_pair(self, pair_name: str) -> PairConfig:
210212
try:
211213
return self.pairs[pair_name]
212214
except KeyError as e:

vdirsyncer/cli/discover.py

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ async def collections_for_pair(
8181
b_discovered = _DiscoverResult(pair.config_b, connector=connector)
8282

8383
if list_collections:
84+
# TODO: We should gather data and THEN print, so it can be async.
8485
await _print_collections(
8586
pair.config_a["instance_name"],
8687
a_discovered.get_self,
@@ -275,27 +276,32 @@ async def _print_collections(
275276
)
276277
return
277278
logger.info(f"{instance_name}:")
279+
tasks = []
278280
for args in discovered.values():
279-
collection = args["collection"]
280-
if collection is None:
281-
continue
281+
tasks.append(_print_single_collection(args, instance_name, connector))
282282

283-
args["instance_name"] = instance_name
284-
try:
285-
storage = await storage_instance_from_config(
286-
args,
287-
create=False,
288-
connector=connector,
289-
)
290-
displayname = await storage.get_meta("displayname")
291-
except Exception:
292-
displayname = ""
293-
294-
logger.info(
295-
" - {}{}".format(
296-
json.dumps(collection),
297-
f' ("{displayname}")'
298-
if displayname and displayname != collection
299-
else "",
300-
)
283+
await asyncio.gather(*tasks)
284+
285+
286+
async def _print_single_collection(args, instance_name, connector):
287+
collection = args["collection"]
288+
if collection is None:
289+
return
290+
291+
args["instance_name"] = instance_name
292+
try:
293+
storage = await storage_instance_from_config(
294+
args,
295+
create=False,
296+
connector=connector,
301297
)
298+
displayname = await storage.get_meta("displayname")
299+
except Exception:
300+
displayname = ""
301+
302+
logger.info(
303+
" - {}{}".format(
304+
json.dumps(collection),
305+
f' ("{displayname}")' if displayname and displayname != collection else "",
306+
)
307+
)

0 commit comments

Comments
 (0)