Obsidean_VM/07 - Desarrolo de Proyectos.../Group Scripts Manager.md

230 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.