230 lines
14 KiB
Markdown
230 lines
14 KiB
Markdown
|
|
|||
|
Tengo una serie de grupos de scripts Python que realizan tareas diferentes pero que en todos los casos trabajan con ciertos parametros y un directorio de trabajo. Los parametros los quiero dividir en 3 niveles. Estos grupos de scripts comienzan con x1 a xn. Los grupos de scripts estan bajo el directorio backend/script_groups/{script_groups_name} donde {script_groups_name} sera el nombre de cada grupo.
|
|||
|
La aplicacion que quiero desarrollar tiene que buscar cada grupo de scripts y cargar una combo list con los nombres {name} para que el usuario pueda elegir que grupo usar. Ademas el manager debe gestionar 3 niveles de parametros de configuracion. Debe funcionar como servicio web con Flask usando https://cdn.tailwindcss.com para evitar configuraciones CSS, sin paginas modal. Quiero que los 3 niveles se presenten en una unica pagina.
|
|||
|
Los datos de configuracion:
|
|||
|
En nivel mas alto estaran los datos a nivel general como el modelo LLM a usar, las APIkey, etc.
|
|||
|
En el segundo nivel las configuraciones de nivel de grupo de scripts.
|
|||
|
En el tercer nivel estaran los datos de configuracion de nivel de directorio.
|
|||
|
El esquema de datos de cada nivel se divide en dos archivos json: uno de definicion de esquema esquema.json y otro con los datos data.json.
|
|||
|
|
|||
|
Creo que seria ideal crear una clase manager de configuración para los 3 niveles. Cada configuracion se debe poder modificar el esquema de datos con un boton de modificacion de esquema. Todos los parametros seran expuestos en la pagina pricipal en el siguiente orden:
|
|||
|
1. Formulario de edicion de Parametros de nivel 1. Boton de modificacion de esquema de nivel 1.
|
|||
|
2. El archivo data.json de nivel 1 estara en el directorio /data. El archivo esquema.json estara bajo el directorio /data
|
|||
|
3. Combo list con los directorios de grupos de scripts para poder elegir el grupo {script_groups_name} a usar.
|
|||
|
4. Formulario de edicion de Parametros de nivel 2. Boton de modificacion de esquema de nivel 2.
|
|||
|
5. El archivo data.json de nivel 2 estara en el directorio backend/script_groups/{script_groupsname}. El archivo esquema.json estara bajo el directorio backend/script_groups/
|
|||
|
6. Campo de texto y un boton para obtener el Directorio de trabajo del grupo de scripts.
|
|||
|
7. Formulario de edicion de Parametros de nivel 3. Boton de modificacion de esquema de nivel 3.
|
|||
|
8. El archivo data.json de nivel 3 estara en el directorio de trabajo. El archivo esquema.json estara bajo el directorio backend/script_groups/{script_groupsname}
|
|||
|
9. Una descripcion que se obtiene de cada x1.py a xn.py que exista en el directorio {script_groupsname} y un boton para ejecutar el script. Al ejecutar el script se le debe pasar como parametro los datos de nivel 1,2 y 3. Todo lo que se muestre por consola en el script debe agregarse al log.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# Especificación Completa: Gestor de Configuraciones y Ejecución de Scripts
|
|||
|
|
|||
|
## 1. Resumen y Objetivo
|
|||
|
|
|||
|
El software es una aplicación web desarrollada con **Flask** y **Tailwind CSS** (vía [cdn.tailwindcss.com](https://cdn.tailwindcss.com)) destinada a funcionar en una única PC con Windows (sin autenticación). La aplicación sirve para gestionar configuraciones en tres niveles y para ejecutar grupos de scripts Python. Cada grupo de scripts tiene sus propios parámetros y se ejecuta en un directorio de trabajo distinto. Además, la aplicación incluye un bloque de logs que muestra en tiempo real la salida y resultados de la ejecución de los scripts, con un botón para limpiar el log.
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
## 2. Requisitos Funcionales
|
|||
|
|
|||
|
### 2.1. Gestión de Configuraciones
|
|||
|
|
|||
|
La aplicación debe gestionar tres niveles de configuración:
|
|||
|
|
|||
|
1. **Nivel 1 – Configuración General**
|
|||
|
|
|||
|
- **Propósito:** Parámetros globales (ej. modelo LLM, API keys, etc.).
|
|||
|
- **Archivos:**
|
|||
|
- `data.json`: Contiene los valores actuales.
|
|||
|
- `esquema.json`: Define la estructura, validaciones y posibles tipos de los parámetros.
|
|||
|
- **Ubicación:** Directorio `/data`.
|
|||
|
2. **Nivel 2 – Configuración del Grupo de Scripts**
|
|||
|
|
|||
|
- **Propósito:** Parámetros específicos para cada grupo de scripts (ej. rutas, opciones de ejecución).
|
|||
|
- **Archivos:**
|
|||
|
- `data.json`: Existe uno por cada grupo, ubicado en `backend/script_groups/{script_groups_name}`.
|
|||
|
- `esquema.json`: Único y común para todos los grupos, ubicado en `backend/script_groups/`.
|
|||
|
3. **Nivel 3 – Configuración del Directorio de Trabajo**
|
|||
|
|
|||
|
- **Propósito:** Parámetros específicos para el entorno de trabajo donde se ejecutan los scripts.
|
|||
|
- **Archivos:**
|
|||
|
- `data.json`: Contiene la configuración específica y se almacena en el directorio de trabajo.
|
|||
|
- `esquema.json`: Define la estructura para el nivel 3 y se encuentra en `backend/script_groups/{script_groups_name}`.
|
|||
|
|
|||
|
Cada nivel debe permitir modificar tanto los datos (data.json) como el esquema (esquema.json) mediante botones específicos en la interfaz.
|
|||
|
|
|||
|
### 2.2. Ejecución de Scripts
|
|||
|
|
|||
|
- **Detección de Scripts:**
|
|||
|
Cada grupo de scripts (ubicado en `backend/script_groups/{script_groups_name}`) contiene archivos Python denominados `x1.py`, `x2.py`, …, `xn.py`.
|
|||
|
- **Descripción:**
|
|||
|
Para cada script se debe mostrar una breve descripción obtenida (por ejemplo) de su docstring o comentario inicial.
|
|||
|
- **Ejecución:**
|
|||
|
Cada script se ejecuta mediante un botón “Ejecutar” asociado, pasando como parámetros los datos actuales de los niveles 1, 2 y 3.
|
|||
|
- **Captura de Salida:**
|
|||
|
Toda la salida que se genere en consola durante la ejecución se redirige y se muestra en el bloque de logs de la aplicación.
|
|||
|
|
|||
|
### 2.3. Bloque de Logs
|
|||
|
|
|||
|
- **Visualización:**
|
|||
|
La página principal incluirá un área destinada a mostrar en tiempo real la salida de los scripts y otras acciones del sistema.
|
|||
|
- **Acciones:**
|
|||
|
Un botón “Limpiar” permite borrar el contenido del log.
|
|||
|
|
|||
|
### 2.4. Persistencia
|
|||
|
|
|||
|
- **Persistencia en Combo List:**
|
|||
|
Las opciones seleccionadas en la lista desplegable (combo list) de grupos de scripts deben mantenerse entre recargas de la página para que el usuario no pierda la selección.
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
## 3. Estructura de Archivos y Directorios
|
|||
|
|
|||
|
La organización de directorios y archivos es la siguiente:
|
|||
|
|
|||
|
bash
|
|||
|
|
|||
|
Copiar
|
|||
|
|
|||
|
`/data ├── data.json # Configuración general (Nivel 1) └── esquema.json # Esquema para Nivel 1 /backend └── script_groups ├── esquema.json # Esquema común para Nivel 2 (configuración del grupo) ├── {script_groups_name_1} │ ├── data.json # Configuración del grupo (Nivel 2) para {script_groups_name_1} │ ├── x1.py # Script 1 │ ├── x2.py # Script 2 │ └── esquema.json # Esquema para Nivel 3 (configuración del directorio de trabajo) ├── {script_groups_name_2} │ ├── data.json # Configuración del grupo (Nivel 2) para {script_groups_name_2} │ ├── x1.py │ └── esquema.json # Esquema para Nivel 3 └── ... (otros grupos) /directorio_de_trabajo └── (Puede variar, se define dinámicamente) └── data.json # Configuración del directorio de trabajo (Nivel 3)`
|
|||
|
|
|||
|
> **Nota:** El “directorio de trabajo” es un directorio distinto al de los grupos de scripts y se ingresa o selecciona mediante un campo en la interfaz.
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
## 4. Arquitectura y Componentes del Software
|
|||
|
|
|||
|
### 4.1. Backend – Flask
|
|||
|
|
|||
|
- **Servidor Flask:**
|
|||
|
Servirá la página principal y gestionará las peticiones para cargar, guardar y validar las configuraciones.
|
|||
|
- **Rutas API:**
|
|||
|
- Para obtener y actualizar configuraciones (niveles 1, 2 y 3).
|
|||
|
- Para listar los grupos de scripts.
|
|||
|
- Para ejecutar scripts y redirigir su salida a la interfaz de logs.
|
|||
|
|
|||
|
### 4.2. Clase Configuration Manager
|
|||
|
|
|||
|
Esta clase será responsable de:
|
|||
|
|
|||
|
- Leer y parsear los archivos `data.json` y `esquema.json` de cada nivel.
|
|||
|
- Validar y actualizar los datos conforme a los esquemas.
|
|||
|
- Guardar cambios en los archivos correspondientes.
|
|||
|
- Detectar y gestionar dinámicamente los grupos de scripts y sus configuraciones.
|
|||
|
|
|||
|
### 4.3. Frontend – Página Única
|
|||
|
|
|||
|
Utilizando HTML y Tailwind CSS, la página única contendrá los siguientes componentes:
|
|||
|
|
|||
|
- Formularios para editar configuraciones (Nivel 1, Nivel 2 y Nivel 3).
|
|||
|
- Botones “Modificar esquema” para cada nivel.
|
|||
|
- Combo list para seleccionar el grupo de scripts.
|
|||
|
- Campo de texto y botón para definir el directorio de trabajo.
|
|||
|
- Listado de scripts (con descripción y botón “Ejecutar” para cada script).
|
|||
|
- Bloque de logs con botón “Limpiar”.
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
## 5. Interfaz de Usuario – Detalle de Componentes
|
|||
|
|
|||
|
La página principal se organiza en secciones, que se describen a continuación:
|
|||
|
|
|||
|
### Sección 1: Configuración Nivel 1 (General)
|
|||
|
|
|||
|
- **Formulario de edición:**
|
|||
|
- Campos para modificar parámetros generales (por ejemplo, modelo LLM, API keys).
|
|||
|
- Se leen desde `/data/data.json`.
|
|||
|
- **Botón “Modificar esquema”:**
|
|||
|
- Permite editar el esquema definido en `/data/esquema.json`.
|
|||
|
- **Indicador de ubicación:**
|
|||
|
- Muestra que los archivos de Nivel 1 se encuentran en el directorio `/data`.
|
|||
|
|
|||
|
### Sección 2: Selección de Grupo de Scripts
|
|||
|
|
|||
|
- **Combo list:**
|
|||
|
- Lista los nombres de los grupos de scripts detectados en `backend/script_groups/`.
|
|||
|
- La selección se guarda y persiste entre recargas.
|
|||
|
|
|||
|
### Sección 3: Configuración Nivel 2 (Grupo de Scripts)
|
|||
|
|
|||
|
- **Formulario de edición:**
|
|||
|
- Muestra los parámetros del grupo seleccionado, leídos desde `backend/script_groups/{script_groups_name}/data.json`.
|
|||
|
- **Botón “Modificar esquema”:**
|
|||
|
- Permite editar el esquema común ubicado en `backend/script_groups/esquema.json`.
|
|||
|
- **Indicador de ubicación:**
|
|||
|
- Informa que el archivo de datos se encuentra en el subdirectorio del grupo y el esquema en el directorio superior.
|
|||
|
|
|||
|
### Sección 4: Directorio de Trabajo
|
|||
|
|
|||
|
- **Campo de texto:**
|
|||
|
- Permite ingresar o mostrar el directorio de trabajo (diferente al directorio del grupo).
|
|||
|
- **Botón “Obtener/Confirmar”:**
|
|||
|
- Confirma la selección del directorio de trabajo, el cual es utilizado para cargar la configuración de Nivel 3.
|
|||
|
|
|||
|
### Sección 5: Configuración Nivel 3 (Directorio de Trabajo)
|
|||
|
|
|||
|
- **Formulario de edición:**
|
|||
|
- Muestra los parámetros específicos del directorio de trabajo, leídos desde el `data.json` del directorio de trabajo.
|
|||
|
- **Botón “Modificar esquema”:**
|
|||
|
- Permite actualizar el esquema para este nivel, ubicado en `backend/script_groups/{script_groups_name}/esquema.json`.
|
|||
|
- **Indicador de ubicación:**
|
|||
|
- Indica que el archivo `data.json` de Nivel 3 se encuentra en el directorio de trabajo y el esquema en el directorio del grupo.
|
|||
|
|
|||
|
### Sección 6: Listado y Ejecución de Scripts
|
|||
|
|
|||
|
- **Listado de scripts:**
|
|||
|
- Se muestran todos los archivos `x1.py` a `xn.py` que existen en el directorio del grupo seleccionado.
|
|||
|
- **Descripción de cada script:**
|
|||
|
- Se extrae una breve descripción (por ejemplo, del docstring o comentario inicial).
|
|||
|
- **Botón “Ejecutar”:**
|
|||
|
- Al pulsar, se ejecuta el script seleccionado.
|
|||
|
- Se le pasan como parámetros los datos actuales de Nivel 1, 2 y 3.
|
|||
|
- Toda la salida del script (lo que se imprima en consola) se captura y se envía al bloque de logs.
|
|||
|
|
|||
|
### Sección 7: Bloque de Logs
|
|||
|
|
|||
|
- **Área de visualización:**
|
|||
|
- Muestra en tiempo real los logs generados por la ejecución de los scripts y otras actividades del sistema.
|
|||
|
- **Botón “Limpiar”:**
|
|||
|
- Permite borrar el contenido del log.
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
## 6. Flujo de Uso y Lógica de Ejecución
|
|||
|
|
|||
|
4. **Carga Inicial:**
|
|||
|
|
|||
|
- Al iniciar la aplicación, el servidor Flask:
|
|||
|
- Escanea `backend/script_groups/` para detectar los grupos de scripts y poblar el combo list.
|
|||
|
- Carga la configuración general desde `/data/data.json` y su esquema desde `/data/esquema.json`.
|
|||
|
5. **Selección de Grupo de Scripts:**
|
|||
|
|
|||
|
- El usuario selecciona un grupo mediante el combo list.
|
|||
|
- La aplicación carga la configuración de Nivel 2 del grupo seleccionado (desde `backend/script_groups/{script_groups_name}/data.json`) y utiliza el esquema común de Nivel 2 (`backend/script_groups/esquema.json`).
|
|||
|
6. **Definición del Directorio de Trabajo:**
|
|||
|
|
|||
|
- El usuario ingresa o verifica el directorio de trabajo en el campo correspondiente y lo confirma.
|
|||
|
- La configuración de Nivel 3 se carga desde el `data.json` del directorio de trabajo, y el esquema se lee desde `backend/script_groups/{script_groups_name}/esquema.json`.
|
|||
|
7. **Edición y Actualización de Configuraciones:**
|
|||
|
|
|||
|
- Cada sección (Niveles 1, 2 y 3) permite editar sus parámetros.
|
|||
|
- Los botones “Modificar esquema” permiten actualizar la estructura (esquema) de cada nivel.
|
|||
|
- Una vez modificados, la clase Configuration Manager valida y guarda los cambios en los archivos correspondientes.
|
|||
|
8. **Ejecución de Scripts:**
|
|||
|
|
|||
|
- El listado de scripts se muestra con sus descripciones.
|
|||
|
- Al pulsar el botón “Ejecutar” de un script:
|
|||
|
- Se invoca el script, pasándole como parámetros los datos actuales de los tres niveles.
|
|||
|
- La salida del script (todo lo que se imprima en consola) se captura y se redirige al bloque de logs en la interfaz.
|
|||
|
9. **Gestión de Logs:**
|
|||
|
|
|||
|
- El área de logs muestra en tiempo real todas las actividades y salidas de la ejecución.
|
|||
|
- El botón “Limpiar” permite borrar el contenido del log para mantener la claridad de la información.
|
|||
|
10. **Persistencia en Selección:**
|
|||
|
|
|||
|
- La opción seleccionada en el combo list de grupos de scripts se mantiene persistente entre recargas, asegurando que la selección del usuario no se pierda.
|
|||
|
|