Files
wiki_embedding/wiki_check_slugs.py
Тимур Абайдулин 84b8246562 Init
2026-03-10 16:33:39 +03:00

79 lines
2.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Проверка покрытия 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()