eb8dbf66a1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.4 KiB
3.4 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 | |||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| resolve_obsidian_embed | function | py | obsidian | 1.0.0 | impure | def resolve_obsidian_embed(vault_dir: str, embed_name: str) -> str | Resuelve el path absoluto real de un attachment embebido buscandolo por nombre dentro de un vault de Obsidian. Obsidian resuelve los embeds !... por nombre de archivo unico (no por path), asi que esta funcion recorre el vault recursivamente (una pasada con os.walk) y devuelve el primer archivo cuyo basename coincida (case-insensitive), excluyendo .obsidian/ y .trash/. Si el embed no trae extension, acepta cualquier match de ese basename. Devuelve cadena vacia si no existe (NO lanza). Lanza si vault_dir no existe. No depende de la app GUI. |
|
false | error_go_core |
|
|
string con el path absoluto del primer archivo del vault cuyo basename coincide (case-insensitive) con embed_name, o cadena vacia '' si ningun archivo coincide. Excluye .obsidian/ y .trash/. | true |
|
python/functions/obsidian/resolve_obsidian_embed_test.py | python/functions/obsidian/resolve_obsidian_embed.py |
Ejemplo
import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from obsidian import extract_obsidian_embeds, resolve_obsidian_embed
body = "Mi DNI: ![[dni enmanuel (2).jpg]]"
for embed in extract_obsidian_embeds(body):
path = resolve_obsidian_embed("/home/me/MiVault", embed)
print(embed, "->", path or "(no encontrado)")
# dni enmanuel (2).jpg -> /home/me/MiVault/attachments/dni enmanuel (2).jpg
Cuando usarla
Usala junto a extract_obsidian_embeds cuando migres o extraigas un subgrafo de
notas y necesites el path fisico real de cada attachment para copiarlo al nuevo
destino. Replica la resolucion por-nombre de Obsidian sin abrir la app GUI:
basta con el directorio del vault en disco.
Gotchas
- Resuelve por NOMBRE de archivo, no por path. Igual que Obsidian: busca el
basename en TODO el vault. Si hay dos archivos con el mismo nombre en carpetas
distintas (
fotos/logo.pngyassets/logo.png), devuelve el PRIMERO que encuentraos.walk— el orden deos.walkno esta garantizado entre sistemas, asi que con nombres duplicados el resultado puede no ser el embed que Obsidian mostraria. Para vaults con nombres ambiguos, deduplica los nombres antes de migrar. - Si el embed no existe en el vault devuelve
""(cadena vacia), NO lanza excepcion. Comprueba el valor antes de usarlo como ruta. - SI lanza
FileNotFoundError/NotADirectoryErrorsivault_dirno existe o no es un directorio. - Es impura: recorre el filesystem en cada llamada. Si vas a resolver muchos
embeds del mismo vault, considera construir tu propio indice
basename -> pathcon un unicoos.walken lugar de llamar a esta funcion en bucle.