57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Strip leading step numbers from instructions in MariaDB to avoid duplicate numbers in the UI.
|
|
"""
|
|
import os
|
|
import sys
|
|
import re
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
from app.database import get_connection
|
|
|
|
sys.stdout.reconfigure(encoding='utf-8')
|
|
|
|
STEP_REGEX = re.compile(r'^(?:Schritt\s*\d+[:.]?|\d+[\.\)\:])\s*', re.IGNORECASE)
|
|
|
|
def clean_instructions_text(text: str) -> str:
|
|
if not text:
|
|
return ""
|
|
cleaned_lines = []
|
|
for line in text.split("\n"):
|
|
line_s = line.strip()
|
|
if not line_s:
|
|
continue
|
|
cleaned = STEP_REGEX.sub('', line_s)
|
|
cleaned_lines.append(cleaned)
|
|
return "\n".join(cleaned_lines)
|
|
|
|
def main():
|
|
conn = get_connection()
|
|
cur = conn.cursor()
|
|
cur.execute("SELECT id, title, instructions FROM recipes ORDER BY id")
|
|
recipes = cur.fetchall()
|
|
|
|
updated_count = 0
|
|
total_lines_cleaned = 0
|
|
|
|
for r in recipes:
|
|
original = r['instructions'] or ""
|
|
cleaned = clean_instructions_text(original)
|
|
if cleaned != original:
|
|
cur.execute("UPDATE recipes SET instructions = %s WHERE id = %s", (cleaned, r['id']))
|
|
updated_count += 1
|
|
# count cleaned lines
|
|
for orig_line in original.split("\n"):
|
|
if STEP_REGEX.match(orig_line.strip()):
|
|
total_lines_cleaned += 1
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
print(f"Successfully cleaned instructions across {updated_count} of {len(recipes)} recipes.")
|
|
print(f"Total step number prefixes removed: {total_lines_cleaned}.")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|