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,64 @@
|
||||
---
|
||||
name: update_obsidian_note
|
||||
kind: function
|
||||
lang: py
|
||||
domain: obsidian
|
||||
version: "1.0.0"
|
||||
purity: impure
|
||||
signature: "def update_obsidian_note(path: str, body: str = None, set_frontmatter: dict = None, append: str = None) -> str"
|
||||
description: "Actualiza una nota Markdown de Obsidian existente. Lee el estado actual con parse_obsidian_frontmatter, hace merge de claves del frontmatter (set_frontmatter), reemplaza el body (body) o concatena texto al final (append), y reescribe con la funcion pura format_obsidian_note. No depende de la app GUI de Obsidian: solo lee y reescribe el archivo .md plano."
|
||||
tags: [obsidian, markdown, frontmatter, update, write, notes]
|
||||
uses_functions: ["parse_obsidian_frontmatter_py_obsidian", "format_obsidian_note_py_obsidian"]
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: "error_go_core"
|
||||
imports: ["os"]
|
||||
params:
|
||||
- name: path
|
||||
desc: "ruta al archivo .md de la nota a actualizar"
|
||||
- name: body
|
||||
desc: "si no es None, reemplaza por completo el cuerpo de la nota"
|
||||
- name: set_frontmatter
|
||||
desc: "dict que se mergea (update de claves) sobre el frontmatter actual; las no mencionadas se conservan"
|
||||
- name: append
|
||||
desc: "texto que se concatena al final del cuerpo (separado por salto de linea); se aplica despues de body"
|
||||
output: "la ruta (str) del archivo actualizado"
|
||||
tested: true
|
||||
tests:
|
||||
- "merge frontmatter conserva claves previas"
|
||||
- "reemplazo de body"
|
||||
- "append concatena al final"
|
||||
- "body y append combinados"
|
||||
- "nota inexistente lanza filenotfounderror"
|
||||
- "directorio lanza isadirectoryerror"
|
||||
test_file_path: "python/functions/obsidian/update_obsidian_note_test.py"
|
||||
file_path: "python/functions/obsidian/update_obsidian_note.py"
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```python
|
||||
import sys, os
|
||||
sys.path.insert(0, os.path.join("python", "functions"))
|
||||
from obsidian import update_obsidian_note
|
||||
|
||||
# Marcar como hecha y anadir una linea de log al final
|
||||
update_obsidian_note(
|
||||
"/home/me/vault/Tareas/Revisar PR.md",
|
||||
set_frontmatter={"status": "done", "closed": "2026-06-09"},
|
||||
append="- Cerrada tras revisar [[PR 42]].",
|
||||
)
|
||||
```
|
||||
|
||||
## Cuando usarla
|
||||
|
||||
Cuando necesites modificar una nota existente sin reescribirla entera: cambiar campos del frontmatter (status, fechas, tags), reemplazar el cuerpo, o ir anadiendo entradas a un log/diario al final. El merge de `set_frontmatter` permite tocar solo las claves que cambian sin perder el resto.
|
||||
|
||||
## Gotchas
|
||||
|
||||
- **Lee y reescribe en disco** (I/O impuro): sobreescribe el archivo completo con el contenido reserializado por `format_obsidian_note`. El formato/orden del frontmatter puede normalizarse respecto al original escrito a mano.
|
||||
- **No respeta locks de la app GUI**: si Obsidian tiene la nota abierta con cambios sin guardar, esos cambios en memoria se perderan cuando esta funcion reescriba el archivo (la app puede recargarlo o sobreescribirlo de vuelta). Cierra/guarda en Obsidian antes de editar desde codigo.
|
||||
- `set_frontmatter` hace **merge superficial** (`dict.update`): claves nuevas se anaden, existentes se reemplazan, las demas se conservan. No borra claves.
|
||||
- `append` se aplica **despues** de un eventual reemplazo de `body`, garantizando un salto de linea de separacion.
|
||||
- Lanza `FileNotFoundError` si la nota no existe (no la crea — usa `create_obsidian_note` para eso).
|
||||
Reference in New Issue
Block a user