Skip to content

About

Este repositorio contiene una suite de herramientas especializadas para trabajar con blogs y documentos Quarto. Cada script está diseñado para resolver problemas específicos en la gestión, mantenimiento y publicación de contenido académico y profesional.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

122 Commits

Folders and files

Repository files navigation

tipo readme
estado activo

quarto-studio/ — herramientas de la familia de blogs Quarto y su GUI, Quarto Studio (repo scripts_for_quarto)

Suite quarto_studio · objetivo publicacion · estado activo · python · interfaz gui

Interfaz de escritorio (PySide6) sobre los backends de la familia de blogs Quarto: render, publicación, metadatos, índices.

  • Escribe en: web, vault · simula por defecto: sí
  • Depende de: PySide6, blogs_manager, metadata_manager, pub_index_symlink

Comandos:

main.py

Bloque generado desde suite.yml por core/suites.py generar (2026-10-04); no se edita a mano.

Suites de esta carpeta (6); índice global en meta/INDICE_SCRIPTS.md. Patrón: M main · C config · L lib.

Suite Carpeta Objetivo Escribe en Simula Timer Estado Patrón
blogs_manager quarto-studio/backend/script_blogs_manager publicacion web, git, archivos no activo MCL
format_yaml quarto-studio/backend/script_format_yaml publicacion web no activo MCL
generador_publicacion_similar quarto-studio/backend/script_generador_publicacion_similar publicacion web no activo MCL
metadata_manager quarto-studio/backend/script_metadata_manager publicacion web no activo MCL
pub_index_symlink quarto-studio/backend/script_pub_index_symlink publicacion vault no activo MCL
quarto_studio quarto-studio/studio publicacion web, vault sí activo M··

Bloque generado desde los suite.yml por core/suites.py generar (2026-10-31); no se edita a mano.

Qué es

Cinco herramientas de línea de comandos (tres en Bash, dos en Python) para mantener la familia de blogs Quarto del autor: el hub web (repo website-achalma) y sus satélites pub_*, submódulos git del hub en web/_pubs/ (la lista, en web/_pubs/pubs.yml). Resuelven lo que Quarto no hace por sí solo: editar el frontmatter de cientos de posts a la vez desde un Excel, normalizar etiquetas y fechas, reparar bloques YAML, generar índices de contenido, mantener un índice por año en el vault y renderizar o publicar los doce sitios desde un solo menú.

Dos nombres para una sola cosa: la carpeta es quarto-studio y el remoto en GitHub se llama scripts_for_quarto. La aplicación de escritorio que las envuelve, Quarto Studio (suite quarto_studio), vive en este mismo repo, en studio/ (de la ola 4 al 2026-10-27 estuvo en el repo gui-suites), y encuentra estas herramientas en backend/; lo común de los studios (gui_comun) lo importa de core/py-common/.

No es un tema, un sitio ni una plantilla de Quarto: el tema de los doce sitios vive en el hub y se propaga con web/scripts/sync-theme-pubs.sh; el contenido de cada post vive en su pub. Tampoco es una biblioteca: cada herramienta es autónoma, con su suite.yml, su README y su lib/, y Quarto Studio las invoca como procesos, nunca importa su código. Depende de core/ (raíz y logger) y de web (meta/workspace.yml). Su único dato propio es el Excel de metadatos, backend/script_metadata_manager/excel_databases/quarto_metadata.xlsx, versionado a propósito como mesa de trabajo: la verdad de cada post sigue siendo su index.qmd.

Contrato con el hub

Lo que cada herramienta escribe fuera de este repo. Este repo es el proveedor: web enlaza aquí desde su CLAUDE.md y su docs/. La verdad de un post es siempre su index.qmd; el Excel es la mesa de trabajo, y lo que se edite a mano en un .qmd prevalece hasta el siguiente create-template --incremental o find-differences.

herramienta escribe dónde cómo se protege
metadata_manager el frontmatter YAML de los index.qmd web/blog/posts/ y los posts/ de cada pub --dry-run (la terminal aplica sin él); solo cambia lo que difiere; un solo escritor de YAML; nunca crea citation
format_yaml el bloque YAML de cada .qmd (delimitadores y líneas en blanco) la carpeta que se le pase idempotente; --dry-run
generador_publicacion_similar _contenido_<subblog>.qmd, fragmentos para {{< include >}} con su identidad en un comentario de la línea 1 (sin frontmatter) la carpeta de cada subblog del blog que se le pase --dry-run; si un subblog queda sin posts, borra su índice
pub_index_symlink enlaces simbólicos por año, nunca copias web/_indice/ (ignorado en git; del vault) omite lo que ya apunta bien; no toca archivos reales; --dry-run
blogs_manager _site/, _freeze/, posts nuevos, commits, respaldos hub y pubs; $DOCS_ROOT/archivo/backups-publicaciones/; el remoto git (Netlify) o quarto publish <destino> publish y git-commit simulan salvo --aplicar, empujan solo tras la puerta R6 y no hacen git add .; clean-all pide confirmación
Quarto Studio (studio/) nada propio: lanza las cinco anteriores; guarda el plan y el registro de cada operación en la caché del studio — una operación a la vez; F5 simula (la CLI o el plan de la ventana) y Ctrl+Intro aplica tras confirmar; publicar nombra el sitio y su dominio

Cómo están montados los pubs y por qué se confirma dentro del pub antes que en el hub: web/docs/pubs-submodulos.md.

Uso

/usr/bin/python3 -m venv --system-site-packages .venv && .venv/bin/pip install -r requirements.txt   # pyyaml, pandas, openpyxl (PySide6 es el del sistema)
/usr/bin/python3 studio/main.py                       # Quarto Studio, la ventana (se relanza con .venv si existe); --smoke la abre y la cierra
backend/script_blogs_manager/main.sh                  # menú interactivo; `main.sh help` lista los comandos
backend/script_blogs_manager/main.sh list             # los sitios que ve el gestor
backend/script_blogs_manager/main.sh render axiomata  # nombre corto o axiomata; también preview, publish, clean, git-*
cd backend/script_metadata_manager                    # el gestor de metadatos se ejecuta desde su carpeta
python3 main.py create-template ~/Documents --config metadata_config.yml --incremental   # Excel al día
python3 main.py update ~/Documents excel_databases/quarto_metadata.xlsx --dry-run        # simular; sin --dry-run aplica
python3 main.py normalize-tags ~/Documents --config metadata_config.yml --dry-run        # igual: sync-dates, fechas-iso, sync-pdf-urls
cd ../..
python3 backend/script_format_yaml/main.py --directory "../web/_pubs/axiomata" --recursive --dry-run
backend/script_generador_publicacion_similar/main.sh "../web/_pubs/axiomata" --dry-run
backend/script_pub_index_symlink/main.sh --dry-run    # sin --dry-run escribe web/_indice/; --check-broken, --clean-broken

Regla de oro: --dry-run antes de cualquier cambio masivo. En la terminal ninguna herramienta simula por defecto, salvo publish y git-commit de blogs_manager, que simulan sin --aplicar. En la ventana F5 siempre simula (la CLI o el plan de la ventana) y Ctrl+Intro aplica tras confirmar; publicar nombra el sitio y su dominio.

Estructura

carpeta qué es dueño / generador
backend/script_blogs_manager/ Bash, main.sh + lib/: listar, render, preview, publicar, posts APA, git, respaldos a mano
backend/script_metadata_manager/ Python, main.py + lib/: metadatos, tags, fechas y pdf-url desde el Excel de excel_databases/; metadata_config.yml; install.sh, quick_start.sh a mano; el Excel lo escribe create-template; respaldos/ ignorado
backend/script_pub_index_symlink/ Bash, main.sh + lib/: enlaces por año en web/_indice/; logs/ ignorado a mano
backend/script_format_yaml/ Python, main.py + config.py + lib/; fix_qmd_files.py es un alias a mano
backend/script_generador_publicacion_similar/ Bash, main.sh + lib/: índices _contenido_*.qmd a mano
studio/ Quarto Studio, la ventana (QML + Kirigami sobre gui-comun 2.x): main.py, paquete quarto_app, muestra.py, capturar.py, suite.yml, README; docs/rediseno.md es su diseño a mano
suite.yml (uno por backend y el de studio/) manifiesto de cada suite (core/suite.schema.yml) a mano; los bloques de README los genera core/suites.py generar --aplicar
requirements.txt · .venv/ dependencias Python de los backends de metadatos; el entorno del studio sobre el Python del sistema (ignorado) a mano; /usr/bin/python3 -m venv --system-site-packages .venv
tests/ pytest: cada suite en simulación no escribe nada; el flujo de publish/git-commit con un remoto bare local; la ventana sobre la familia de muestra (tests/studio/, tests/run.sh) a mano
docs/ referencia del Excel de metadatos y registro de decisiones; índice generado a mano; docs/README.md por core/docs.py indice
CHANGELOG.md · LICENSE versiones de cada herramienta con fecha ISO; MIT a mano

Variante suite de meta/workspace.yml: cada herramienta se documenta en su carpeta; docs/ guarda solo lo que no cabe en una puerta.

Documentación

documento para qué leerlo
CLAUDE.md reglas para el asistente: invariantes de diseño, cómo verificar, trampas
docs/rediseno.md · studio/README.md la ventana: el diseño aprobado, la arquitectura, el .venv, las vistas y las operaciones
backend/script_blogs_manager/README.md manual del gestor de blogs v3.0
backend/script_metadata_manager/README.md manual del gestor de metadatos y tags (Excel, filtros, fórmulas, columnas)
backend/script_pub_index_symlink/README.md qué cuenta como publicación, conflictos, logs
backend/script_format_yaml/README.md el formateador YAML y cómo reparar --- pegados
backend/script_generador_publicacion_similar/README.md estructuras website y blog, URL base
docs/excel-de-metadatos.md columnas, formatos y fórmulas del Excel de metadatos
docs/decisiones.md por qué el repo es como es
estado.md dónde está el repo y lo pendiente (§Por hacer)
CHANGELOG.md qué versión de cada herramienta hay y desde cuándo
web/docs/pubs-submodulos.md el hub y sus submódulos (frontera con web)
meta/INDICE_SCRIPTS.md estas suites entre las del espacio de trabajo (generado)

Límite honesto

  • Pruebas sí; lint y build, no: tests/ comprueba que cada suite en simulación no escribe nada (test_simulacion.py) y el flujo de publish/git-commit con un remoto bare local; corren con python3 -m pytest -q tests -p no:cacheprovider --basetemp ~/.cache/pytest/quarto-ola4. Lo demás es bash -n, py_compile y mirar el resultado de --dry-run en un pub.
  • Los backends no son seguros en paralelo: mutan los mismos árboles; Quarto Studio ejecuta una operación a la vez y en terminal hay que hacer lo mismo.
  • blogs_manager simula solo lo que publica: publish y git-commit piden --aplicar; clean, clean-all y render escriben de verdad; solo clean-all pide confirmación (en la GUI, también las operaciones sobre todos los blogs).
  • El Excel no es la verdad: si se edita un .qmd a mano, el Excel queda atrás hasta regenerarlo; update solo escribe donde hay diferencias, pero una celda vacía borra el campo del .qmd.
  • Solo date se sustituye línea a línea; cualquier otro cambio reescribe el bloque YAML completo (comillas y orden normalizados por field_mapper.reorder_yaml).
  • chaska publica en chaska-x.netlify.app: la URL base no se deriva del nombre de carpeta; por eso la detección vota entre los pdf-url existentes y blog_base_urls de metadata_config.yml manda.
  • El asistente de posts es interactivo (07-post-creator.sh, unas 50 preguntas): no se automatiza; la GUI lo sustituye con post_service.py, que genera el mismo index.qmd.
  • Un solo camino de instalación documentado: pip install -r requirements.txt; backend/script_metadata_manager/install.sh (con conda) es una alternativa, no un requisito.
  • Licencia MIT (LICENSE); el contenido de los blogs es del autor y vive en sus repos.

About

Este repositorio contiene una suite de herramientas especializadas para trabajar con blogs y documentos Quarto. Cada script está diseñado para resolver problemas específicos en la gestión, mantenimiento y publicación de contenido académico y profesional.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages