feat(infra): auto-commit con 88 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
---
|
||||
name: parse_obsidian_frontmatter
|
||||
kind: function
|
||||
lang: py
|
||||
domain: obsidian
|
||||
version: "1.0.0"
|
||||
purity: pure
|
||||
signature: "def parse_obsidian_frontmatter(content: str) -> dict"
|
||||
description: "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."
|
||||
tags: [obsidian, frontmatter, yaml, markdown, parse, note]
|
||||
uses_functions: []
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: ""
|
||||
imports: ["yaml"]
|
||||
params:
|
||||
- name: content
|
||||
desc: "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."
|
||||
output: "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)."
|
||||
tested: true
|
||||
tests:
|
||||
- "frontmatter basico"
|
||||
- "crlf line endings"
|
||||
- "sin frontmatter devuelve content completo"
|
||||
- "frontmatter sin cierre es body"
|
||||
- "frontmatter vacio"
|
||||
- "yaml invalido es body"
|
||||
- "content vacio"
|
||||
test_file_path: "python/functions/obsidian/parse_obsidian_frontmatter_test.py"
|
||||
file_path: "python/functions/obsidian/parse_obsidian_frontmatter.py"
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```python
|
||||
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).
|
||||
Reference in New Issue
Block a user