This commit is contained in:
Тимур Абайдулин
2026-03-10 16:33:39 +03:00
commit 84b8246562
11 changed files with 1898 additions and 0 deletions

78
wiki_check_slugs.py Normal file
View File

@@ -0,0 +1,78 @@
"""
Проверка покрытия ROOT_SLUGS: находит страницы в wiki_pages с {% tree %},
которые не добавлены в ROOT_SLUGS — у них могут быть необнаруженные дочерние страницы.
Запуск:
python wiki_check_slugs.py
"""
import sys
from pathlib import Path
from dotenv import load_dotenv
load_dotenv(Path(__file__).parent / '.env')
sys.path.insert(0, str(Path(__file__).parent))
from supabase import SupabaseManager
# ROOT_SLUGS из wiki_sync.py — поддерживай синхронно
from wiki_sync import ROOT_SLUGS
def main():
db = SupabaseManager()
if not db.connect():
sys.exit(1)
try:
# Все slug-и в базе
db.cursor.execute("SELECT slug FROM wiki_pages ORDER BY slug")
all_slugs = {row[0] for row in db.cursor.fetchall()}
# Страницы с {% tree %} — у них могут быть необнаруженные дети
db.cursor.execute("""
SELECT slug, value->>'title' AS title
FROM wiki_pages
WHERE value->>'content' LIKE '%{%% tree%%}%'
ORDER BY slug
""")
tree_pages = db.cursor.fetchall()
finally:
db.close()
root_slugs_set = set(ROOT_SLUGS)
# Страницы с {% tree %}, которых нет в ROOT_SLUGS
missing_from_roots = [(s, t) for s, t in tree_pages if s not in root_slugs_set]
# ROOT_SLUGS которых нет в базе (удалены или никогда не синхронизировались)
missing_from_db = root_slugs_set - all_slugs
print(f'Всего страниц в wiki_pages: {len(all_slugs)}')
print(f'Страниц с {{% tree %}}: {len(tree_pages)}')
print(f'ROOT_SLUGS: {len(ROOT_SLUGS)}')
print()
if missing_from_roots:
print('⚠️ Страницы с {% tree %}, НЕ добавленные в ROOT_SLUGS:')
print(' (у них могут быть дочерние страницы, которые краулер не найдёт)')
print()
for slug, title in missing_from_roots:
print(f' + {slug}')
print(f' «{title}»')
print(f' https://wiki.yandex.ru/{slug}')
print()
else:
print('Все страницы с {% tree %} уже есть в ROOT_SLUGS')
if missing_from_db:
print('⚠️ ROOT_SLUGS которых НЕТ в базе (не были синхронизированы или удалены):')
for slug in sorted(missing_from_db):
print(f' - {slug}')
print()
else:
print('Все ROOT_SLUGS присутствуют в базе')
if __name__ == '__main__':
main()