eb8dbf66a1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.8 KiB
2.8 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 | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| format_obsidian_note | function | py | obsidian | 1.0.0 | pure | def format_obsidian_note(frontmatter: dict, body: str) -> str | Serializa una nota completa de Obsidian a partir de un dict de frontmatter y un body. Si frontmatter no esta vacio, emite '---\n<yaml>---\n\n<body>' usando yaml.safe_dump(frontmatter, sort_keys=False, allow_unicode=True). Si frontmatter es vacio o None, devuelve solo el body. Es la inversa de parse_obsidian_frontmatter para un round-trip razonable. Pura, sin I/O. |
|
false |
|
|
String con el texto completo de la nota. Con frontmatter: '---\n<yaml>---\n\n<body>' (unicode literal, orden de claves preservado). Sin frontmatter: solo el body. | true |
|
python/functions/obsidian/format_obsidian_note_test.py | python/functions/obsidian/format_obsidian_note.py |
Ejemplo
out = format_obsidian_note({"title": "My Note", "tags": ["a", "b"]}, "Hello.")
# "---\ntitle: My Note\ntags:\n- a\n- b\n---\n\nHello."
format_obsidian_note({}, "just a body")
# "just a body"
Cuando usarla
Usala como ultimo paso del round-trip parse -> modificar -> format: tras leer
una nota con parse_obsidian_frontmatter, mutar el dict de frontmatter (anadir
un tag, cambiar status, actualizar una fecha) y volver a serializar la nota
lista para escribir a disco. Tambien para generar notas nuevas desde cero con
metadatos.
Gotchas
- Inserta una linea en blanco entre el bloque frontmatter y el body (
---\n\n). En el round-trip conparse_obsidian_frontmatter, el body recuperado lleva un salto de linea inicial extra; comparar con.strip()o asumir ese separador. La inversa es "razonable", no byte-a-byte. yaml.safe_dumpreformatea el YAML a su estilo canonico: las listas salen en estilo bloque sin indentar (tags:\n- a), las claves no se reordenan (sort_keys=False) y el unicode queda literal (allow_unicode=True). El texto exacto del frontmatter original puede no preservarse aunque el mapping si.- Un dict vacio o
Noneproduce solo el body (sin---), coherente con queparse_obsidian_frontmattertrate un frontmatter vacio como ausente.