40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
"""
|
|
FILE: app/core/parsing/parsing_scanner.py
|
|
DESCRIPTION: Pre-Scan für den LocalBatchCache (Pass 1).
|
|
AUDIT v1.1.0: Dynamisierung der Scan-Parameter (WP-14).
|
|
"""
|
|
import os
|
|
import re
|
|
from typing import Optional, Dict, Any
|
|
from .parsing_models import NoteContext
|
|
from .parsing_markdown import read_markdown
|
|
|
|
def pre_scan_markdown(path: str, registry: Optional[Dict[str, Any]] = None) -> Optional[NoteContext]:
|
|
"""
|
|
Extrahiert Identität und Kurz-Kontext zur Validierung.
|
|
WP-14: Scan-Tiefe und Summary-Länge sind nun über die Registry steuerbar.
|
|
"""
|
|
parsed = read_markdown(path)
|
|
if not parsed: return None
|
|
|
|
# WP-14: Konfiguration laden oder Standardwerte nutzen
|
|
reg = registry or {}
|
|
summary_cfg = reg.get("summary_settings", {})
|
|
scan_depth = summary_cfg.get("pre_scan_depth", 600)
|
|
max_len = summary_cfg.get("max_summary_length", 500)
|
|
|
|
fm = parsed.frontmatter
|
|
# ID-Findung: Frontmatter ID oder Dateiname als Fallback
|
|
note_id = str(fm.get("id") or os.path.splitext(os.path.basename(path))[0])
|
|
|
|
# Erstelle Kurz-Zusammenfassung mit dynamischen Limits
|
|
clean_body = re.sub(r'[#*`>]', '', parsed.body[:scan_depth]).strip()
|
|
summary = clean_body[:max_len] + "..." if len(clean_body) > max_len else clean_body
|
|
|
|
return NoteContext(
|
|
note_id=note_id,
|
|
title=str(fm.get("title", note_id)),
|
|
type=str(fm.get("type", "concept")),
|
|
summary=summary,
|
|
tags=fm.get("tags", []) if isinstance(fm.get("tags"), list) else []
|
|
) |