feat(infra): auto-commit con 88 cambios

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-11 00:16:46 +02:00
parent 6bc97df5c0
commit eb8dbf66a1
126 changed files with 10933 additions and 287 deletions
@@ -0,0 +1,70 @@
"""Extrae los embeds ![[...]] (attachments incrustados) de una nota de Obsidian.
Funcion pura: solo procesa texto. A diferencia de extract_obsidian_wikilinks,
ignora los wikilinks normales [[...]] y devuelve unicamente los embeds ![[...]].
"""
import re
# Matchea SOLO embeds: el '!' inicial es obligatorio (?<! evitaria capturar
# un '[[' precedido de '!', pero aqui exigimos el '!' como parte del match).
# Captura el contenido entre los dobles corchetes del embed.
_EMBED_RE = re.compile(r"!\[\[([^\[\]]+?)\]\]")
def extract_obsidian_embeds(body: str) -> list:
"""Extrae SOLO los embeds ``![[...]]`` del cuerpo de una nota de Obsidian.
Un embed `![[archivo.jpg]]` incrusta un attachment (imagen, pdf, otra nota)
dentro de la nota. Esta funcion devuelve el target de cada embed, mientras
que los wikilinks normales `[[...]]` (que NO empiezan por `!`) se ignoran.
Para cada embed se normaliza el target:
![[imagen.jpg]] -> "imagen.jpg"
![[imagen.jpg|300]] -> "imagen.jpg" (se quita el alias |...)
![[nota#Seccion]] -> "nota" (se quita el ancla #...)
![[dni enmanuel (2).jpg]] -> "dni enmanuel (2).jpg"
Los targets se deduplican preservando el orden de primera aparicion. Pura y
deterministica: no hace I/O ni muta nada.
Args:
body: Cuerpo Markdown de una nota de Obsidian (idealmente sin
frontmatter).
Returns:
Lista de strings con los nombres de los attachments embebidos, unicos y
en orden de aparicion. Lista vacia si no hay embeds.
"""
if not body:
return []
seen = set()
targets = []
for match in _EMBED_RE.finditer(body):
inner = match.group(1)
# Quitar alias tras el primer '|'.
target = inner.split("|", 1)[0]
# Quitar ancla/heading tras el primer '#'.
target = target.split("#", 1)[0]
target = target.strip()
if not target:
continue
if target in seen:
continue
seen.add(target)
targets.append(target)
return targets
if __name__ == "__main__":
body = (
"Texto con [[Nota normal]] y un embed ![[imagen.jpg]]. "
"Otra cosa [[Otra Nota|alias]] y ![[doc.pdf]] y ![[imagen.jpg]]."
)
assert extract_obsidian_embeds(body) == ["imagen.jpg", "doc.pdf"], body
assert extract_obsidian_embeds("") == []
assert extract_obsidian_embeds("solo [[wikilink]] aqui") == []
assert extract_obsidian_embeds("![[dni enmanuel (2).jpg]]") == ["dni enmanuel (2).jpg"]
print("extract_obsidian_embeds smoke OK")