a90b7443e4
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.9 KiB
3.9 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 | |||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| open_obsidian_vault | function | py | obsidian | 1.0.0 | impure | def open_obsidian_vault(vault: str, register_if_missing: bool = True, launch: bool = True, config_path: str = '') -> dict | Abre un vault en la app de escritorio Obsidian construyendo el URI obsidian://open?vault=<name> (name = basename del path o el propio nombre, URL-encodeado) y lanzandolo desacoplado via xdg-open. Si recibe una ruta existente no registrada y register_if_missing=True, la registra antes componiendo register_obsidian_vault (open=True). Con launch=False construye el URI sin lanzar nada (util en tests). |
|
|
false | error_go_core |
|
|
dict con vault (arg original), uri (obsidian://open?vault=<name>), name (usado en el URI), launched (bool) y registered_now (bool, True si se registro en esta llamada) | true |
|
python/functions/obsidian/open_obsidian_vault_test.py | python/functions/obsidian/open_obsidian_vault.py |
Ejemplo
import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from obsidian import open_obsidian_vault
# Abrir por ruta: registra si falta y lanza Obsidian
res = open_obsidian_vault(
vault="/home/enmanuel/vaults/osint",
register_if_missing=True,
launch=True,
config_path="",
)
print(res["uri"]) # obsidian://open?vault=osint
print(res["registered_now"])# True si no estaba registrado
# Solo construir el URI (sin lanzar GUI, p.ej. para inspeccion o tests)
res = open_obsidian_vault("Mi Vault", launch=False)
print(res["uri"]) # obsidian://open?vault=Mi%20Vault
Cuando usarla
Cuando quieras abrir un vault en la app de escritorio Obsidian desde codigo o un agente: tras crear (create_obsidian_vault) y registrar (register_obsidian_vault) un vault, esta funcion lo abre en un solo paso (registra si hace falta + lanza el URI). Para construir el URI sin lanzar la GUI, usa launch=False.
Gotchas
- Single-instance (lo importante): Obsidian es de instancia unica. Si ya hay una instancia corriendo con una config vieja en memoria, el URI
obsidian://open?vault=<name>puede responder "unable to find a vault" para un vault recien registrado, hasta reiniciar la app. Si registras y abres en caliente, reinicia Obsidian para que recargueobsidian.json. - Lanza un proceso externo (
xdg-open, I/O impuro) de forma desacoplada (start_new_session=True, stdio a DEVNULL): no bloquea ni captura salida.launch=Falseevita lanzar nada. - El nombre del URI es el basename del path (Obsidian resuelve vaults por nombre, no por ruta completa). Dos vaults con el mismo basename en rutas distintas pueden colisionar en el URI; Obsidian abrira el que tenga ese nombre en su config.
- Necesita un entorno grafico: hereda
DISPLAY/WAYLAND_DISPLAYdel entorno. En una sesion headlessxdg-openpuede fallar silenciosamente (el proceso se lanza pero no abre nada). - Si
register_if_missing=Truey el vault es una ruta existente nueva, escribe la config de la app (viaregister_obsidian_vault, con su backup.bak).