Init
This commit is contained in:
78
wiki_check_slugs.py
Normal file
78
wiki_check_slugs.py
Normal 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()
|
||||
Reference in New Issue
Block a user