iel-tools 0.0.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- iel_tools-0.0.3/PKG-INFO +9 -0
- iel_tools-0.0.3/iel_tools.egg-info/PKG-INFO +9 -0
- iel_tools-0.0.3/iel_tools.egg-info/SOURCES.txt +9 -0
- iel_tools-0.0.3/iel_tools.egg-info/dependency_links.txt +1 -0
- iel_tools-0.0.3/iel_tools.egg-info/requires.txt +4 -0
- iel_tools-0.0.3/iel_tools.egg-info/top_level.txt +1 -0
- iel_tools-0.0.3/ieltools/__init__.py +0 -0
- iel_tools-0.0.3/ieltools/checkspace/__init__.py +72 -0
- iel_tools-0.0.3/ieltools/promptsql/__init__.py +115 -0
- iel_tools-0.0.3/setup.cfg +4 -0
- iel_tools-0.0.3/setup.py +16 -0
iel_tools-0.0.3/PKG-INFO
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
setup.py
|
|
2
|
+
iel_tools.egg-info/PKG-INFO
|
|
3
|
+
iel_tools.egg-info/SOURCES.txt
|
|
4
|
+
iel_tools.egg-info/dependency_links.txt
|
|
5
|
+
iel_tools.egg-info/requires.txt
|
|
6
|
+
iel_tools.egg-info/top_level.txt
|
|
7
|
+
ieltools/__init__.py
|
|
8
|
+
ieltools/checkspace/__init__.py
|
|
9
|
+
ieltools/promptsql/__init__.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ieltools
|
|
File without changes
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
|
|
2
|
+
import sqlite3
|
|
3
|
+
import pandas as pd
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
def check():
|
|
7
|
+
print("👋 ¡Bienvenido al Chequeo de Espacios de Iel Tools!")
|
|
8
|
+
|
|
9
|
+
bd = input("📂 Ingrese el nombre de la base de datos (*.db) o 'salir': ")
|
|
10
|
+
if bd.lower() == 'salir':
|
|
11
|
+
print("Salida exitosa.")
|
|
12
|
+
return
|
|
13
|
+
|
|
14
|
+
try:
|
|
15
|
+
conn = sqlite3.connect(bd)
|
|
16
|
+
print(f"✅ Conectado exitosamente a '{bd}'")
|
|
17
|
+
except Exception as e:
|
|
18
|
+
print(f"❌ Error al conectar con la base de datos: {e}")
|
|
19
|
+
return
|
|
20
|
+
|
|
21
|
+
while True:
|
|
22
|
+
print("\n" + "="*50)
|
|
23
|
+
print("🔍 NUEVA CONSULTA (Escribe 'salir' en cualquier momento para terminar)")
|
|
24
|
+
|
|
25
|
+
variable = input("1. ¿Cuál es la variable (columna)? : ")
|
|
26
|
+
if variable.lower() == 'salir': break
|
|
27
|
+
|
|
28
|
+
tabla = input("2. ¿Cuál es la tabla? : ")
|
|
29
|
+
if tabla.lower() == 'salir': break
|
|
30
|
+
|
|
31
|
+
valor = input("3. ¿Valor aproximado a buscar? : ")
|
|
32
|
+
if valor.lower() == 'salir': break
|
|
33
|
+
|
|
34
|
+
query = f"SELECT {variable} FROM {tabla} WHERE {variable} LIKE '%{valor}%' LIMIT 1"
|
|
35
|
+
|
|
36
|
+
try:
|
|
37
|
+
df_test = pd.read_sql_query(query, conn)
|
|
38
|
+
|
|
39
|
+
if not df_test.empty:
|
|
40
|
+
texto_real = str(df_test.iloc[0, 0]) # Convertir a string por seguridad
|
|
41
|
+
print("-" * 60)
|
|
42
|
+
print(f"🎯 TEXTO ENCONTRADO: '{texto_real}'")
|
|
43
|
+
print("-" * 60)
|
|
44
|
+
print(f"Pos | Char | ASCII | ¿Es Espacio?")
|
|
45
|
+
print("-" * 60)
|
|
46
|
+
|
|
47
|
+
contador_espacios = 0
|
|
48
|
+
for i, letra in enumerate(texto_real):
|
|
49
|
+
codigo_ascii = ord(letra)
|
|
50
|
+
es_espacio = ""
|
|
51
|
+
if letra == ' ':
|
|
52
|
+
es_espacio = "🔴 SI"
|
|
53
|
+
contador_espacios += 1
|
|
54
|
+
elif codigo_ascii == 160:
|
|
55
|
+
es_espacio = "👻 ESPACIO FANTASMA (160)"
|
|
56
|
+
contador_espacios += 1
|
|
57
|
+
|
|
58
|
+
print(f" {i:02d} | '{letra}' | {codigo_ascii:03d} | {es_espacio}")
|
|
59
|
+
|
|
60
|
+
print("-" * 60)
|
|
61
|
+
print(f"📊 LONGITUD TOTAL: {len(texto_real)} caracteres.")
|
|
62
|
+
print(f"🗑️ ESPACIOS TOTALES: {contador_espacios}")
|
|
63
|
+
|
|
64
|
+
else:
|
|
65
|
+
print("⚠️ No se encontró ninguna fila que coincida con esa búsqueda.")
|
|
66
|
+
|
|
67
|
+
except Exception as e:
|
|
68
|
+
print(f"❌ Error en la consulta SQL: {e}")
|
|
69
|
+
print("Verifica que la tabla y la columna existan.")
|
|
70
|
+
|
|
71
|
+
conn.close()
|
|
72
|
+
print("\n👋 ¡Gracias por usar Iel Tools! Conexión cerrada.")
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
|
|
2
|
+
import sqlite3
|
|
3
|
+
import pandas as pd
|
|
4
|
+
import io
|
|
5
|
+
import os
|
|
6
|
+
from google.colab import files
|
|
7
|
+
|
|
8
|
+
def inicio():
|
|
9
|
+
conn = None
|
|
10
|
+
nombre_db_actual = None
|
|
11
|
+
|
|
12
|
+
print("👋 ¡Bienvenido al Sistema SQL Dinámico v2.0!")
|
|
13
|
+
|
|
14
|
+
while True:
|
|
15
|
+
|
|
16
|
+
estado = f"🟢 Conectado a '{nombre_db_actual}'" if conn else "🔴 Desconectado"
|
|
17
|
+
|
|
18
|
+
print("\n" + "="*50)
|
|
19
|
+
print(f" 🛠️ MENÚ PRINCIPAL ({estado}) 🛠️")
|
|
20
|
+
print("="*50)
|
|
21
|
+
print("1. 📂 Importar Excel (Define o cambia Base de Datos)")
|
|
22
|
+
print("2. 🔍 Consultar datos (SQL: Select)")
|
|
23
|
+
print("3. ✏️ Modificar datos (SQL: Insert, Update, Delete)")
|
|
24
|
+
print("4. 🚪 Salir")
|
|
25
|
+
print("-" * 50)
|
|
26
|
+
|
|
27
|
+
opcion = input(">> Elige una opción (1-4): ")
|
|
28
|
+
|
|
29
|
+
# --- OPCIÓN 1: IMPORTAR EXCEL ---
|
|
30
|
+
if opcion == '1':
|
|
31
|
+
try:
|
|
32
|
+
print("\n📄 Paso 1: Sube tu archivo Excel (.xlsx):")
|
|
33
|
+
uploaded = files.upload()
|
|
34
|
+
|
|
35
|
+
if not uploaded:
|
|
36
|
+
print("⚠️ No se seleccionó archivo.")
|
|
37
|
+
continue
|
|
38
|
+
|
|
39
|
+
nombre_archivo_excel = list(uploaded.keys())[0]
|
|
40
|
+
|
|
41
|
+
# Configurar BD
|
|
42
|
+
cambiar_db = True
|
|
43
|
+
if conn is not None:
|
|
44
|
+
print(f"\n⚠️ Conectado a '{nombre_db_actual}'.")
|
|
45
|
+
resp = input(">> ¿Quieres cambiar de base de datos? (s/n): ").lower()
|
|
46
|
+
if resp != 's':
|
|
47
|
+
cambiar_db = False
|
|
48
|
+
|
|
49
|
+
if cambiar_db:
|
|
50
|
+
if conn: conn.close()
|
|
51
|
+
nuevo_nombre = input("\n🗄️ Paso 2: Nombre para la Base de Datos (ej: empresa.db): ")
|
|
52
|
+
if not nuevo_nombre.endswith('.db'): nuevo_nombre += '.db'
|
|
53
|
+
conn = sqlite3.connect(nuevo_nombre)
|
|
54
|
+
nombre_db_actual = nuevo_nombre
|
|
55
|
+
print(f"✅ Conectado a '{nombre_db_actual}'.")
|
|
56
|
+
|
|
57
|
+
# Cargar Excel
|
|
58
|
+
print(f" Leyendo '{nombre_archivo_excel}'...")
|
|
59
|
+
df = pd.read_excel(io.BytesIO(uploaded[nombre_archivo_excel]))
|
|
60
|
+
df.columns = df.columns.str.lower().str.replace('[^a-z0-9_]+', '_', regex=True)
|
|
61
|
+
|
|
62
|
+
nombre_tabla = input(">> Nombre para la TABLA en SQL: ")
|
|
63
|
+
df.to_sql(nombre_tabla, conn, if_exists='replace', index=False)
|
|
64
|
+
print(f"✅ Tabla '{nombre_tabla}' importada correctamente.")
|
|
65
|
+
|
|
66
|
+
except Exception as e:
|
|
67
|
+
print(f"❌ Error: {e}")
|
|
68
|
+
|
|
69
|
+
# --- OPCIÓN 2 y 3: CONSULTAR Y MODIFICAR ---
|
|
70
|
+
elif opcion in ['2', '3']:
|
|
71
|
+
# Verificar conexión
|
|
72
|
+
if conn is None:
|
|
73
|
+
print("\n⚠️ No hay conexión activa.")
|
|
74
|
+
db_input = input(">> Nombre de la base de datos a conectar (ej: empresa.db): ")
|
|
75
|
+
try:
|
|
76
|
+
conn = sqlite3.connect(db_input)
|
|
77
|
+
nombre_db_actual = db_input
|
|
78
|
+
print(f"✅ Conectado a '{nombre_db_actual}'.")
|
|
79
|
+
except Exception as e:
|
|
80
|
+
print(f"❌ Error al conectar: {e}")
|
|
81
|
+
continue
|
|
82
|
+
|
|
83
|
+
# Lógica diferenciada por opción
|
|
84
|
+
try:
|
|
85
|
+
# --- OPCIÓN 2: CONSULTAR (SELECT) ---
|
|
86
|
+
if opcion == '2':
|
|
87
|
+
print("\n🔍 Modo Consulta. Escribe tu SELECT:")
|
|
88
|
+
comando_sql = input("SQL >> ")
|
|
89
|
+
if comando_sql.strip().lower().startswith("select"):
|
|
90
|
+
resultado = pd.read_sql_query(comando_sql, conn)
|
|
91
|
+
print("\n--- RESULTADO ---")
|
|
92
|
+
print(resultado if not resultado.empty else "⚠️ Consulta vacía.")
|
|
93
|
+
else:
|
|
94
|
+
print("⚠️ En la opción 2 solo se permiten consultas SELECT.")
|
|
95
|
+
|
|
96
|
+
# --- OPCIÓN 3: MODIFICAR (INSERT/UPDATE/DELETE) ---
|
|
97
|
+
else:
|
|
98
|
+
print("\n✏️ Modo Edición. Escribe tu INSERT/UPDATE/DELETE:")
|
|
99
|
+
comando_sql = input("SQL >> ")
|
|
100
|
+
cursor = conn.cursor()
|
|
101
|
+
cursor.execute(comando_sql)
|
|
102
|
+
conn.commit()
|
|
103
|
+
print(f"✅ Comando ejecutado. Filas afectadas: {cursor.rowcount}")
|
|
104
|
+
|
|
105
|
+
except Exception as e:
|
|
106
|
+
print(f"❌ Error SQL: {e}")
|
|
107
|
+
|
|
108
|
+
# --- OPCIÓN 4: SALIR ---
|
|
109
|
+
elif opcion == '4':
|
|
110
|
+
if conn: conn.close()
|
|
111
|
+
print("👋 ¡Hasta luego!")
|
|
112
|
+
break
|
|
113
|
+
|
|
114
|
+
else:
|
|
115
|
+
print("⚠️ Opción no válida.")
|
iel_tools-0.0.3/setup.py
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from setuptools import setup, find_packages
|
|
2
|
+
|
|
3
|
+
setup(
|
|
4
|
+
name="iel-tools", # Nombre para instalar: pip install iel-tools
|
|
5
|
+
version="0.0.3",
|
|
6
|
+
author="José Manuel Martin Coronado",
|
|
7
|
+
description="Librería unificada con herramientas PromptSQL y CheckSpace",
|
|
8
|
+
packages=find_packages(),
|
|
9
|
+
|
|
10
|
+
install_requires=[
|
|
11
|
+
"pandas",
|
|
12
|
+
"numpy",
|
|
13
|
+
"openai",
|
|
14
|
+
"requests"
|
|
15
|
+
],
|
|
16
|
+
)
|