Agregada la opcion de ver una descripcion mas detallada de cada script
This commit is contained in:
parent
006e2ed7d6
commit
a246c0265c
2
app.py
2
app.py
|
@ -139,7 +139,7 @@ def get_scripts(group):
|
||||||
# list_scripts ahora devuelve detalles y filtra los ocultos
|
# list_scripts ahora devuelve detalles y filtra los ocultos
|
||||||
scripts = config_manager.list_scripts(group)
|
scripts = config_manager.list_scripts(group)
|
||||||
# El frontend espera 'name' y 'description', mapeamos desde 'display_name' y 'short_description'
|
# El frontend espera 'name' y 'description', mapeamos desde 'display_name' y 'short_description'
|
||||||
return jsonify([{"name": s['display_name'], "description": s['short_description'], "filename": s['filename']} for s in scripts])
|
return jsonify([{"name": s['display_name'], "description": s['short_description'], "filename": s['filename'], "long_description": s['long_description']} for s in scripts])
|
||||||
|
|
||||||
|
|
||||||
@app.route("/api/working-directory", methods=["POST"])
|
@app.route("/api/working-directory", methods=["POST"])
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
"x0_main.py": {
|
||||||
|
"display_name": "Procesar Exportación XML",
|
||||||
|
"short_description": "LadderToSCL - Conversor de Siemens LAD/FUP XML a SCL",
|
||||||
|
"long_description": "Este script es el punto de entrada y orquestador principal para el proceso de conversión de archivos XML de Siemens TIA Portal (LAD/FUP) a código SCL y la generación de documentación relacionada.\n\n**Lógica Principal:**\n\n1. **Configuración:** Carga parámetros desde `ParamManagerScripts` (directorio de trabajo, nombres de carpetas de salida, etc.).\n2. **Logging:** Inicia un archivo `log.txt` para registrar detalladamente el progreso y los errores.\n3. **Descubrimiento:** Busca recursivamente todos los archivos `.xml` dentro del subdirectorio `PLC` del directorio de trabajo configurado.\n4. **Procesamiento Individual (Pasos x1-x3):**\n * Itera sobre cada archivo XML encontrado.\n * Implementa lógica para **saltar** pasos si el XML no ha cambiado y las salidas ya existen y están actualizadas.\n * Llama a funciones de `x1_to_json.py`, `x2_process.py`, y `x3_generate_scl.py` para convertir XML -> JSON intermedio -> JSON procesado -> archivo SCL/Markdown final.\n5. **Referencias Cruzadas (Paso x4):** Llama a una función de `x4_cross_reference.py` para generar análisis de llamadas, uso de DBs, etc., basándose en los archivos procesados.\n6. **Agregación (Paso x5):** Llama a una función de `x5_aggregate.py` para combinar las salidas SCL/Markdown y las referencias cruzadas en un único archivo Markdown resumen.\n7. **Resumen y Salida:** Registra un resumen final del proceso (éxitos, saltos, fallos) y finaliza con un código de estado (0 para éxito, 1 si hubo errores).\n",
|
||||||
|
"hidden": false
|
||||||
|
},
|
||||||
|
"x1_to_json.py": {
|
||||||
|
"display_name": "x1_to_json",
|
||||||
|
"short_description": "LadderToSCL - Conversor de Siemens LAD/FUP XML a SCL",
|
||||||
|
"long_description": "",
|
||||||
|
"hidden": true
|
||||||
|
},
|
||||||
|
"x2_process.py": {
|
||||||
|
"display_name": "x2_process",
|
||||||
|
"short_description": "LadderToSCL - Conversor de Siemens LAD/FUP XML a SCL",
|
||||||
|
"long_description": "",
|
||||||
|
"hidden": true
|
||||||
|
},
|
||||||
|
"x3_generate_scl.py": {
|
||||||
|
"display_name": "x3_generate_scl",
|
||||||
|
"short_description": "LadderToSCL - Conversor de Siemens LAD/FUP XML a SCL",
|
||||||
|
"long_description": "",
|
||||||
|
"hidden": true
|
||||||
|
},
|
||||||
|
"x4_cross_reference.py": {
|
||||||
|
"display_name": "x4_cross_reference",
|
||||||
|
"short_description": "LadderToSCL - Conversor de Siemens LAD/FUP XML a SCL",
|
||||||
|
"long_description": "",
|
||||||
|
"hidden": true
|
||||||
|
},
|
||||||
|
"x5_aggregate.py": {
|
||||||
|
"display_name": "x5_aggregate",
|
||||||
|
"short_description": "LadderToSCL - Conversor de Siemens LAD/FUP XML a SCL",
|
||||||
|
"long_description": "",
|
||||||
|
"hidden": true
|
||||||
|
}
|
||||||
|
}
|
44
data/log.txt
44
data/log.txt
|
@ -1,44 +0,0 @@
|
||||||
[20:54:12] Iniciando ejecución de x1.py en C:\Estudio...
|
|
||||||
[20:54:12] === Ejecutando Script de Prueba 1 ===
|
|
||||||
[20:54:12] Configuraciones cargadas:
|
|
||||||
[20:54:12] Nivel 1: {
|
|
||||||
[20:54:12] "api_key": "your-api-key-here",
|
|
||||||
[20:54:12] "model": "gpt-3.5-turbo"
|
|
||||||
[20:54:12] }
|
|
||||||
[20:54:12] Nivel 2: {
|
|
||||||
[20:54:12] "input_dir": "D:/Datos/Entrada",
|
|
||||||
[20:54:12] "output_dir": "D:/Datos/Salida",
|
|
||||||
[20:54:12] "batch_size": 50
|
|
||||||
[20:54:12] }
|
|
||||||
[20:54:12] Nivel 3: {}
|
|
||||||
[20:54:12] Simulando procesamiento...
|
|
||||||
[20:54:13] Progreso: 20%
|
|
||||||
[20:54:14] Progreso: 40%
|
|
||||||
[20:54:15] Progreso: 60%
|
|
||||||
[20:54:16] Progreso: 80%
|
|
||||||
[20:54:17] Progreso: 100%
|
|
||||||
[20:54:17] ¡Proceso completado!
|
|
||||||
[20:54:17] Ejecución de x1.py finalizada (success). Duración: 0:00:05.196719.
|
|
||||||
[20:54:17] Log completo guardado en: d:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\example_group\log_x1.txt
|
|
||||||
[21:21:53] Iniciando ejecución de x1.py en C:\Estudio...
|
|
||||||
[21:21:53] === Ejecutando Script de Prueba 1 ===
|
|
||||||
[21:21:53] Configuraciones cargadas:
|
|
||||||
[21:21:53] Nivel 1: {
|
|
||||||
[21:21:53] "api_key": "your-api-key-here",
|
|
||||||
[21:21:53] "model": "gpt-3.5-turbo"
|
|
||||||
[21:21:53] }
|
|
||||||
[21:21:53] Nivel 2: {
|
|
||||||
[21:21:53] "input_dir": "D:/Datos/Entrada",
|
|
||||||
[21:21:53] "output_dir": "D:/Datos/Salida",
|
|
||||||
[21:21:53] "batch_size": 50
|
|
||||||
[21:21:53] }
|
|
||||||
[21:21:53] Nivel 3: {}
|
|
||||||
[21:21:53] Simulando procesamiento...
|
|
||||||
[21:21:54] Progreso: 20%
|
|
||||||
[21:21:55] Progreso: 40%
|
|
||||||
[21:21:56] Progreso: 60%
|
|
||||||
[21:21:57] Progreso: 80%
|
|
||||||
[21:21:58] Progreso: 100%
|
|
||||||
[21:21:58] ¡Proceso completado!
|
|
||||||
[21:21:58] Ejecución de x1.py finalizada (success). Duración: 0:00:05.144464.
|
|
||||||
[21:21:58] Log completo guardado en: d:\Proyectos\Scripts\ParamManagerScripts\backend\script_groups\example_group\log_x1.txt
|
|
|
@ -256,7 +256,7 @@ class ConfigurationManager:
|
||||||
"filename": filename, # Nombre real del archivo
|
"filename": filename, # Nombre real del archivo
|
||||||
"display_name": details.get("display_name", filename.replace('.py', '')),
|
"display_name": details.get("display_name", filename.replace('.py', '')),
|
||||||
"short_description": details.get("short_description", "Sin descripción corta."),
|
"short_description": details.get("short_description", "Sin descripción corta."),
|
||||||
# No necesitamos enviar la descripción larga aquí
|
"long_description": details.get("long_description", "") # Añadir descripción larga
|
||||||
})
|
})
|
||||||
|
|
||||||
if updated:
|
if updated:
|
||||||
|
|
|
@ -177,8 +177,23 @@ async function loadScripts(group) {
|
||||||
div.className = 'script-item p-4 border rounded bg-white shadow-sm flex justify-between items-start gap-4';
|
div.className = 'script-item p-4 border rounded bg-white shadow-sm flex justify-between items-start gap-4';
|
||||||
div.innerHTML = `
|
div.innerHTML = `
|
||||||
<div>
|
<div>
|
||||||
<div class="font-bold text-lg">${script.name}</div>
|
<div class="font-bold text-lg mb-1">${script.name}</div>
|
||||||
<div class="text-gray-600 text-sm mt-1">${script.description}</div>
|
<div class="flex items-center gap-2">
|
||||||
|
<span class="text-gray-600 text-sm">${script.description}</span>
|
||||||
|
${script.long_description ? `
|
||||||
|
<button class="toggle-long-desc-button text-blue-500 hover:text-blue-700 p-0.5 rounded" data-target-id="long-desc-${script.filename}" title="Mostrar/Ocultar detalles">
|
||||||
|
<svg class="w-4 h-4 chevron-down" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
||||||
|
</svg>
|
||||||
|
<svg class="w-4 h-4 chevron-up hidden" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 15l7-7 7 7"></path>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
` : ''}
|
||||||
|
</div>
|
||||||
|
<div id="long-desc-${script.filename}" class="long-description-content prose prose-sm max-w-none mt-2 border-t pt-2 hidden">
|
||||||
|
${script.long_description ? marked.parse(script.long_description) : ''}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2 flex-shrink-0">
|
<div class="flex items-center gap-2 flex-shrink-0">
|
||||||
<div class="flex flex-col items-center">
|
<div class="flex flex-col items-center">
|
||||||
|
@ -208,6 +223,21 @@ async function loadScripts(group) {
|
||||||
editButton.addEventListener('click', () => {
|
editButton.addEventListener('click', () => {
|
||||||
editScriptDetails(group, script.filename);
|
editScriptDetails(group, script.filename);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Añadir event listener para el botón de descripción larga (si existe)
|
||||||
|
const toggleDescButton = div.querySelector('.toggle-long-desc-button');
|
||||||
|
if (toggleDescButton) {
|
||||||
|
toggleDescButton.addEventListener('click', (e) => {
|
||||||
|
const button = e.currentTarget;
|
||||||
|
const targetId = button.dataset.targetId;
|
||||||
|
const targetElement = document.getElementById(targetId);
|
||||||
|
if (targetElement) {
|
||||||
|
targetElement.classList.toggle('hidden');
|
||||||
|
button.querySelector('.chevron-down').classList.toggle('hidden');
|
||||||
|
button.querySelector('.chevron-up').classList.toggle('hidden');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1168,8 +1198,11 @@ function clearLogs() {
|
||||||
// Necesitarás una función showToast o similar si la usas
|
// Necesitarás una función showToast o similar si la usas
|
||||||
function showToast(message, type = 'success') {
|
function showToast(message, type = 'success') {
|
||||||
// Implementa tu lógica de Toast aquí
|
// Implementa tu lógica de Toast aquí
|
||||||
console.log(`Toast (${type}): ${message}`);
|
console.log(`UI (${type}): ${message}`); // Siempre loguea en consola
|
||||||
alert(`Toast (${type}): ${message}`); // Simple alert como placeholder
|
|
||||||
|
if (type === 'error') {
|
||||||
|
alert(`Error: ${message}`); // Muestra alerta solo para errores
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Llama a fetchLogs al cargar la página si es necesario
|
// Llama a fetchLogs al cargar la página si es necesario
|
||||||
|
|
|
@ -251,6 +251,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Corregir la ruta del script -->
|
<!-- Corregir la ruta del script -->
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script> <!-- Librería Markdown -->
|
||||||
<script src="{{ url_for('static', filename='js/scripts.js') }}" defer></script>
|
<script src="{{ url_for('static', filename='js/scripts.js') }}" defer></script>
|
||||||
<script>
|
<script>
|
||||||
window.addEventListener('load', () => {
|
window.addEventListener('load', () => {
|
||||||
|
|
Loading…
Reference in New Issue