Files
fn_registry/python/functions/obsidian/parse_obsidian_frontmatter.md
T
egutierrez eb8dbf66a1 feat(infra): auto-commit con 88 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-11 00:16:46 +02:00

2.7 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
parse_obsidian_frontmatter function py obsidian 1.0.0 pure def parse_obsidian_frontmatter(content: str) -> dict Separa una nota de Obsidian (Markdown plano) en su frontmatter YAML y su cuerpo. Parsea el bloque YAML delimitado por --- al inicio del archivo con yaml.safe_load. Si no hay frontmatter valido al inicio, devuelve frontmatter vacio y el contenido completo como body. Soporta finales de linea \n y \r\n. Pura, sin I/O.
obsidian
frontmatter
yaml
markdown
parse
note
false
yaml
name desc
content Texto completo de una nota de Obsidian/Markdown. El frontmatter, si existe, debe ser un bloque YAML delimitado por lineas '---' que empieza en la primera linea del archivo.
Dict con dos claves: 'frontmatter' (dict con el mapping YAML parseado, o {} si no hay frontmatter valido) y 'body' (str con el cuerpo de la nota tras el bloque frontmatter, o el contenido completo cuando no hay frontmatter valido). true
frontmatter basico
crlf line endings
sin frontmatter devuelve content completo
frontmatter sin cierre es body
frontmatter vacio
yaml invalido es body
content vacio
python/functions/obsidian/parse_obsidian_frontmatter_test.py python/functions/obsidian/parse_obsidian_frontmatter.py

Ejemplo

note = "---\ntitle: My Note\ntags:\n  - a\n  - b\n---\n\nHello [[other]]."
result = parse_obsidian_frontmatter(note)
# {
#   "frontmatter": {"title": "My Note", "tags": ["a", "b"]},
#   "body": "\nHello [[other]].",
# }

plain = "just a body, no frontmatter"
parse_obsidian_frontmatter(plain)
# {"frontmatter": {}, "body": "just a body, no frontmatter"}

Cuando usarla

Usala al leer una nota de Obsidian desde disco cuando necesites acceder a sus metadatos YAML (tags, aliases, status, fechas) por separado del texto, o antes de modificar el frontmatter y volver a serializar con format_obsidian_note. Es el primer paso del round-trip parse -> modificar -> format.

Gotchas

  • Un bloque frontmatter vacio (---\n---) parsea a None en YAML, que no es un dict, por lo que se trata como "sin frontmatter" y el contenido completo vuelve como body. Esto es intencional para mantener la inversa con format_obsidian_note (que omite frontmatter vacio).
  • El --- de apertura debe estar en la primera linea exacta del contenido. Un --- precedido de lineas en blanco o texto NO se considera frontmatter.
  • YAML invalido se trata como "sin frontmatter": devuelve el contenido como body en lugar de lanzar excepcion (funcion pura, sin error_type).