927437a8d8
Sistema FleetView para centralizar la flota de procesos Claude Code vivos en una sola ventana kitty + tmux (socket aislado -L fleet) con un panel TUI: - list_claude_fleet (+ tipo claude_fleet): escanea ~/.claude/sessions + goals + runtime, valida procesos vivos (anti-PID-reciclado), join por sessionId. - list_resumable_claudes (+ tipo resumable_claude): sesiones cerradas reanudables. - wrappers tmux: tmux_new_claude_window (con --resume), tmux_swap_window_into_console (preserva ancho del sidebar), tmux_map_claude_panes. - launch_kittyclaude: comando entrypoint; instala atajos alt+flechas/enter/n/0/k/r, mouse on, remain-on-exit off; fija el ancho del sidebar con hooks. - docs/capabilities/claude-fleet.md + entrada en el INDEX. Incluye ademas funciones datascience en progreso (excel/duckdb/postgres) y ajustes varios de docs e infra de otra sesion, agrupados aqui para no perderlos. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
6.8 KiB
6.8 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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| add_xlsx_chart | function | py | infra | 1.0.0 | impure | def add_xlsx_chart(xlsx_path: str, sheet_name: str, chart_type: str, data_range: str, cats_range: str = None, anchor: str = 'H2', title: str = '', x_title: str = '', y_title: str = '') -> dict | Anade un grafico nativo de openpyxl a una hoja EXISTENTE de un libro .xlsx existente, refiriendo rangos de celdas ya escritos. chart_type en {bar, line, pie, scatter} (BarChart/LineChart/PieChart/ScatterChart). data_range y cats_range en notacion Excel tipo 'B1:B10' (se convierten a Reference). anchor = celda destino del chart (ej. 'H2'). Acepta titulo del grafico y de los ejes X/Y. Guarda el libro. Es la pieza que completa el grupo excel para generar hojas con graficos: primero escribir datos (write_xlsx_sheets) y luego anadir el chart. Impura: escribe disco y NO lanza: en fallo (hoja/libro inexistente, chart_type invalido, rango invalido) devuelve {status: 'error', error}. |
|
false | error_go_core |
|
|
Dict. En exito: {status: 'ok', chart_type: <str normalizado>, sheet: <str>, anchor: <str>}. En error: {status: 'error', error: '<mensaje>'}. | true |
|
python/functions/infra/add_xlsx_chart_test.py | python/functions/infra/add_xlsx_chart.py |
Ejemplo
import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from infra.write_xlsx_sheets import write_xlsx_sheets
from infra.add_xlsx_chart import add_xlsx_chart
# 1) Escribe los datos (cabecera + filas)
write_xlsx_sheets("/tmp/ventas_chart.xlsx", {
"Ventas": [
["Mes", "Unidades"],
["Ene", 120],
["Feb", 150],
["Mar", 90],
["Abr", 200],
],
})
# 2) Anade un grafico de barras refiriendo los rangos ya escritos
res = add_xlsx_chart(
xlsx_path="/tmp/ventas_chart.xlsx",
sheet_name="Ventas",
chart_type="bar",
data_range="B1:B5", # incluye la cabecera 'Unidades' -> nombre de la serie
cats_range="A2:A5", # meses como categorias del eje X
anchor="D2", # esquina superior izquierda del chart
title="Unidades por mes",
x_title="Mes",
y_title="Unidades",
)
print(res)
# {'status': 'ok', 'chart_type': 'bar', 'sheet': 'Ventas', 'anchor': 'D2'}
# Verificar que el chart quedo en la hoja
from openpyxl import load_workbook
wb = load_workbook("/tmp/ventas_chart.xlsx")
print(len(wb["Ventas"]._charts)) # 1
Cuando usarla
Usala cuando necesites generar una hoja de Excel con un grafico a partir de
datos que ya escribiste en el libro: dashboards exportables, reports con
visualizacion embebida, resumenes que se abren en Excel/OnlyOffice mostrando el
chart. Es el ultimo paso del flujo del grupo excel: write_xlsx_sheets
(o upsert_xlsx_sheet) escribe los datos, y esta funcion les anade el grafico
refiriendo sus rangos. Llamala una vez por grafico (puedes anadir varios a la
misma hoja con distintos anchor).
Gotchas
- Impura — escribe en disco. Reabre el libro, anade el chart y lo GUARDA.
No lanza: devuelve
{"status": "error", ...}ante libro inexistente, hoja inexistente,chart_typeinvalido, rango invalido o openpyxl ausente. - El libro DEBE existir. Esta funcion no crea el .xlsx ni escribe datos:
los rangos (
data_range,cats_range) deben apuntar a celdas YA escritas. Escribe primero conwrite_xlsx_sheets/upsert_xlsx_sheet. - openpyxl carga el libro entero en memoria para reabrirlo y reescribirlo. Para libros muy grandes esto consume RAM proporcional al tamano.
- Los
Referencede openpyxl son 1-indexed (fila 1, columna 1 = A1). La conversion desde notacion'B1:B10'la hacerange_boundariesinternamente; si pasas un rango mal formado, devuelve error en vez de un chart vacio. titles_from_data: sidata_rangeincluye la fila 1 (cabecera), el nombre de la serie se toma de esa primera celda. Si tudata_rangeempieza en fila 2 (solo datos), la serie queda sin nombre — incluye la cabecera para etiquetarla.- scatter es distinto: usa
data_rangecomo valores Y ycats_rangecomo valores X (xvalues) de una unica serie viaSeries. No usaset_categoriescomo bar/line/pie. Para scatter, pasa rangos de SOLO datos (sin cabecera) en ambos. - pie ignora
x_title/y_title(no tiene ejes). Pasarlos no falla, se ignoran silenciosamente. - El chart NO se recalcula solo: openpyxl escribe la definicion del grafico; Excel/LibreOffice lo renderiza al abrir. Si cambias los datos despues, vuelve a llamar a la funcion o edita el rango — el chart referencia celdas, asi que reflejara el valor que tengan al abrir el libro.
- Requiere openpyxl (ya instalado en
python/.venv, version 3.1.5).