31 lines
1.0 KiB
Python
31 lines
1.0 KiB
Python
"""Проверка yield каждого источника: имя | items | первых 2 заголовка."""
|
|
import sys
|
|
import traceback
|
|
from concurrent.futures import ThreadPoolExecutor
|
|
|
|
sys.path.insert(0, ".")
|
|
|
|
from omni import feeds, sources # noqa: E402
|
|
|
|
prefix = sys.argv[1] if len(sys.argv) > 1 else "aa_"
|
|
picked = [s for s in sources.SOURCES if s.name.startswith(prefix)]
|
|
print("sources:", len(picked))
|
|
|
|
|
|
def run(src):
|
|
try:
|
|
items = feeds.fetch(src, limit=min(20, src.limit or 20))
|
|
return src.name, len(items), [i.title[:60] for i in items[:2]], ""
|
|
except Exception as exc:
|
|
return src.name, 0, [], "%s: %s" % (type(exc).__name__, str(exc)[:70])
|
|
|
|
|
|
with ThreadPoolExecutor(max_workers=10) as ex:
|
|
rows = list(ex.map(run, picked))
|
|
|
|
live = 0
|
|
for name, n, titles, err in sorted(rows, key=lambda r: -r[1]):
|
|
flag = "LIVE" if n else "DEAD"
|
|
live += bool(n)
|
|
print("%-26s %-4s %3d %s" % (name, flag, n, err or " | ".join(titles)))
|
|
print("LIVE %d / %d, items %d" % (live, len(rows), sum(r[1] for r in rows))) |