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,55 @@
|
||||
---
|
||||
name: read_obsidian_note
|
||||
kind: function
|
||||
lang: py
|
||||
domain: obsidian
|
||||
version: "1.0.0"
|
||||
purity: impure
|
||||
signature: "def read_obsidian_note(path: str) -> dict"
|
||||
description: "Lee una nota Markdown de Obsidian desde disco y la descompone en frontmatter YAML, body, wikilinks [[...]] y tags normalizados. Compone las funciones puras parse_obsidian_frontmatter y extract_obsidian_wikilinks. No depende de la app GUI de Obsidian: solo lee el archivo .md plano."
|
||||
tags: [obsidian, markdown, frontmatter, wikilinks, read, notes]
|
||||
uses_functions: ["parse_obsidian_frontmatter_py_obsidian", "extract_obsidian_wikilinks_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 leer"
|
||||
output: "dict con path (str), frontmatter (dict), body (str), wikilinks (list de destinos [[...]]) y tags (list normalizada desde frontmatter['tags'], acepta CSV o lista)"
|
||||
tested: true
|
||||
tests:
|
||||
- "lee nota con frontmatter y wikilinks"
|
||||
- "normaliza tags csv a lista"
|
||||
- "nota sin frontmatter"
|
||||
- "archivo inexistente lanza filenotfounderror"
|
||||
- "directorio lanza isadirectoryerror"
|
||||
test_file_path: "python/functions/obsidian/read_obsidian_note_test.py"
|
||||
file_path: "python/functions/obsidian/read_obsidian_note.py"
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```python
|
||||
import sys, os
|
||||
sys.path.insert(0, os.path.join("python", "functions"))
|
||||
from obsidian import read_obsidian_note
|
||||
|
||||
note = read_obsidian_note("/home/me/vault/Proyectos/Idea.md")
|
||||
print(note["frontmatter"]) # {'title': 'Idea', 'tags': ['proyecto', 'wip']}
|
||||
print(note["tags"]) # ['proyecto', 'wip']
|
||||
print(note["wikilinks"]) # ['Nota Relacionada', 'Otra Idea']
|
||||
print(note["body"][:80]) # primeras lineas del cuerpo Markdown
|
||||
```
|
||||
|
||||
## Cuando usarla
|
||||
|
||||
Cuando necesites cargar el contenido de una nota de Obsidian de forma estructurada: leer su frontmatter, su cuerpo, los wikilinks que apunta o sus tags. Es el primer paso natural antes de actualizar una nota (`update_obsidian_note`) o de construir un grafo de enlaces a partir de los `wikilinks`.
|
||||
|
||||
## Gotchas
|
||||
|
||||
- **Lee de disco** (I/O impuro): el resultado refleja el estado del archivo en ese instante.
|
||||
- **No respeta locks de la app GUI**: si Obsidian esta abierto y tiene la nota con cambios sin guardar, leeras la version persistida en disco, no la del editor en memoria.
|
||||
- Lanza `FileNotFoundError` si el path no existe e `IsADirectoryError` si apunta a un directorio.
|
||||
- `tags` se normaliza siempre a lista: acepta tanto `tags: proyecto, wip` (CSV) como `tags: [proyecto, wip]` (lista YAML). Otros tipos se convierten a string en un unico tag.
|
||||
Reference in New Issue
Block a user