omni: реестр 113 источников (papers/company/cn/kr/community/security/forum/models/benchmark) + команды sources и feed
This commit is contained in:
45
omni/cli.py
45
omni/cli.py
@@ -5,6 +5,7 @@ import json
|
||||
import sys
|
||||
|
||||
from . import config, rank, store
|
||||
from . import feeds, sources
|
||||
from . import filter as flt
|
||||
from .providers import FUNCS, MODULES, get, status
|
||||
|
||||
@@ -146,6 +147,34 @@ def cmd_stats(args):
|
||||
return 0
|
||||
|
||||
|
||||
def cmd_sources(args):
|
||||
st = sources.stats()
|
||||
print("источников:", len(sources.SOURCES), "| по категориям:",
|
||||
", ".join(f"{k}={v}" for k, v in st.items()))
|
||||
if args.list:
|
||||
for s in sources.pick(args.category, args.only, args.tags):
|
||||
print(f" {s.category:<12} {s.adapter:<18} {s.name:<26} {s.url[:70]}")
|
||||
return 0
|
||||
|
||||
|
||||
def cmd_feed(args):
|
||||
picked = sources.pick(args.category, args.only, args.tags)
|
||||
if not picked:
|
||||
print("нет источников под фильтр")
|
||||
return 1
|
||||
print(f"обход {len(picked)} источников, лимит {args.limit} на источник")
|
||||
items, report = feeds.fetch_many(picked, limit=args.limit, workers=args.workers)
|
||||
items = rank.rank(items)
|
||||
new, dup = store.add(items)
|
||||
bad = [(n, c) for n, c in report if c == 0]
|
||||
for name, cnt in sorted(report, key=lambda x: -x[1])[:20]:
|
||||
print(f" {name:<28} {cnt}")
|
||||
print(f"пусто: {len(bad)}/{len(report)} | собрано {len(items)}, новых {new}, дублей {dup}")
|
||||
if bad and args.verbose:
|
||||
print("без отдачи:", ", ".join(n for n, _ in bad))
|
||||
return 0
|
||||
|
||||
|
||||
def cmd_export(args):
|
||||
n, path = store.export(args.out, args.fmt, args.limit)
|
||||
print(f"выгружено {n} записей -> {path}")
|
||||
@@ -201,6 +230,22 @@ def main(argv=None):
|
||||
sp = sub.add_parser("stats", help="сводка базы")
|
||||
sp.set_defaults(fn=cmd_stats)
|
||||
|
||||
sp = sub.add_parser("sources", help="реестр источников")
|
||||
sp.add_argument("--category", default=None)
|
||||
sp.add_argument("--only", default=None)
|
||||
sp.add_argument("--tags", default=None)
|
||||
sp.add_argument("--list", action="store_true")
|
||||
sp.set_defaults(fn=cmd_sources)
|
||||
|
||||
sp = sub.add_parser("feed", help="обход реестра источников без запроса")
|
||||
sp.add_argument("--category", default=None)
|
||||
sp.add_argument("--only", default=None)
|
||||
sp.add_argument("--tags", default=None)
|
||||
sp.add_argument("--limit", type=int, default=15)
|
||||
sp.add_argument("--workers", type=int, default=8)
|
||||
sp.add_argument("--verbose", action="store_true")
|
||||
sp.set_defaults(fn=cmd_feed)
|
||||
|
||||
sp = sub.add_parser("export", help="выгрузка jsonl/csv")
|
||||
sp.add_argument("--out", default="data/top.jsonl")
|
||||
sp.add_argument("--fmt", default="jsonl", choices=["jsonl", "csv"])
|
||||
|
||||
Reference in New Issue
Block a user