абузы: extract промокодов/сумм/ссылок в API и панели, +16 проверенных источников (TG/reddit/discourse/RSS/github/HN), чистка HTML в деталях, клэмп days
This commit is contained in:
@@ -18,6 +18,7 @@ from .abuse_sources import ABUSE as ABUSE_DEEP
|
||||
from .sources_tg_abuse import TG_ABUSE
|
||||
from .sources_ext4 import EXTRA5
|
||||
from .sources_ext5 import EXTRA6
|
||||
from .sources_fresh import fresh as _fresh_sources
|
||||
from .sources_x import X_SOURCES
|
||||
|
||||
|
||||
@@ -298,7 +299,16 @@ def _gen_sources():
|
||||
|
||||
|
||||
def all_sources():
|
||||
"""Реестр + пользовательские источники из панели, без дублей по url."""
|
||||
"""Реестр + пользовательские источники из панели, без дублей по url и по имени.
|
||||
|
||||
Дедуп по двум ключам обязателен:
|
||||
* url — одна площадка не должна обходиться дважды (двойные записи в базе);
|
||||
* name — имя источника является первичным ключом в source_flags/runs, поэтому
|
||||
зеркала одного и того же ресурса (rss.arxiv vs export.arxiv, old.reddit vs
|
||||
www.reddit) обязаны схлопываться, иначе переключение/состояние «плывут».
|
||||
Побеждает первое вхождение; порядок: реестр → сгенерированные → свежая волна →
|
||||
пользовательские → abuse-radar → panels.json.
|
||||
"""
|
||||
from . import source_state
|
||||
extra = []
|
||||
for d in source_state.custom():
|
||||
@@ -307,19 +317,20 @@ def all_sources():
|
||||
d = {k: v for k, v in d.items() if k in
|
||||
("name", "category", "kind", "url", "adapter", "tags", "limit", "detail", "extra")}
|
||||
extra.append(Source(**d))
|
||||
seen, out = set(), []
|
||||
for s in SOURCES + _gen_sources() + extra + radar_sources() + panel_sources():
|
||||
# дедуп строго по url: одна площадка = один источник, даже если пришла из
|
||||
# реестра, radar_sources и panels.json одновременно (иначе двойной обход и
|
||||
# двойные записи в базе). Побеждает первое вхождение — порядок списка выше.
|
||||
seen_url, seen_name, out = set(), set(), []
|
||||
for s in SOURCES + _gen_sources() + _fresh_sources(S) + extra + radar_sources() + panel_sources():
|
||||
key = (s.url or "").rstrip("/").lower()
|
||||
if key and key in seen:
|
||||
name = (s.name or "").strip().lower()
|
||||
if (key and key in seen_url) or (name and name in seen_name):
|
||||
continue
|
||||
if key:
|
||||
seen.add(key)
|
||||
seen_url.add(key)
|
||||
if name:
|
||||
seen_name.add(name)
|
||||
out.append(s)
|
||||
return out
|
||||
|
||||
|
||||
def enabled_sources(include_opt_in=False):
|
||||
"""Только включённые: выключенные в панели источники не дёргаем.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user