Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -2,7 +2,7 @@ import os
|
|
| 2 |
import time
|
| 3 |
import uuid
|
| 4 |
import psutil
|
| 5 |
-
import
|
| 6 |
from flask import Flask, jsonify, request, abort, render_template_string
|
| 7 |
|
| 8 |
app = Flask(__name__)
|
|
@@ -135,7 +135,15 @@ def get_mysql_connection(database=None):
|
|
| 135 |
cfg = MYSQL_CONFIG.copy()
|
| 136 |
if database:
|
| 137 |
cfg["database"] = database
|
| 138 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 139 |
|
| 140 |
def get_system_stats():
|
| 141 |
cpu_percent = psutil.cpu_percent(interval=0.1)
|
|
@@ -224,26 +232,22 @@ def create_db():
|
|
| 224 |
return jsonify({"error": f"size_mb must be between {MIN_DB_MB} and {MAX_DB_MB} MB"}), 400
|
| 225 |
if total_allocated_mb() + size_mb > TOTAL_MAX_MB:
|
| 226 |
return jsonify({"error": "Total allocated size would exceed 25GB limit"}), 400
|
| 227 |
-
|
| 228 |
db_uuid = str(uuid.uuid4())
|
| 229 |
db_name = f"db_{db_uuid.replace('-', '')[:16]}"
|
| 230 |
-
|
| 231 |
try:
|
| 232 |
conn = get_mysql_connection()
|
| 233 |
-
conn.autocommit
|
| 234 |
cur = conn.cursor()
|
| 235 |
cur.execute(f"CREATE DATABASE `{db_name}`")
|
| 236 |
cur.close()
|
| 237 |
conn.close()
|
| 238 |
except Exception as e:
|
| 239 |
return jsonify({"error": f"Failed to create database: {e}"}), 500
|
| 240 |
-
|
| 241 |
db_registry[db_uuid] = {
|
| 242 |
"db_name": db_name,
|
| 243 |
"size_mb": size_mb,
|
| 244 |
"created_at": time.time(),
|
| 245 |
}
|
| 246 |
-
|
| 247 |
return jsonify({
|
| 248 |
"uuid": db_uuid,
|
| 249 |
"db_name": db_name,
|
|
@@ -255,28 +259,22 @@ def create_db():
|
|
| 255 |
def db_query(db_uuid):
|
| 256 |
if db_uuid not in db_registry:
|
| 257 |
abort(404, description="Unknown database UUID")
|
| 258 |
-
|
| 259 |
data = request.get_json(silent=True) or {}
|
| 260 |
query = data.get("query")
|
| 261 |
if not query:
|
| 262 |
return jsonify({"status": "error", "error": "Missing 'query' in JSON body"}), 400
|
| 263 |
-
|
| 264 |
db_name = db_registry[db_uuid]["db_name"]
|
| 265 |
try:
|
| 266 |
conn = get_mysql_connection(database=db_name)
|
| 267 |
cur = conn.cursor()
|
| 268 |
cur.execute(query)
|
| 269 |
-
|
| 270 |
rows = None
|
| 271 |
if cur.description is not None:
|
| 272 |
-
|
| 273 |
-
rows = [dict(zip(cols, r)) for r in cur.fetchall()]
|
| 274 |
-
|
| 275 |
try:
|
| 276 |
conn.commit()
|
| 277 |
except Exception:
|
| 278 |
conn.rollback()
|
| 279 |
-
|
| 280 |
cur.close()
|
| 281 |
conn.close()
|
| 282 |
return jsonify({
|
|
|
|
| 2 |
import time
|
| 3 |
import uuid
|
| 4 |
import psutil
|
| 5 |
+
import pymysql
|
| 6 |
from flask import Flask, jsonify, request, abort, render_template_string
|
| 7 |
|
| 8 |
app = Flask(__name__)
|
|
|
|
| 135 |
cfg = MYSQL_CONFIG.copy()
|
| 136 |
if database:
|
| 137 |
cfg["database"] = database
|
| 138 |
+
return pymysql.connect(
|
| 139 |
+
host=cfg["host"],
|
| 140 |
+
port=cfg["port"],
|
| 141 |
+
user=cfg["user"],
|
| 142 |
+
password=cfg["password"],
|
| 143 |
+
database=cfg.get("database"),
|
| 144 |
+
autocommit=False,
|
| 145 |
+
cursorclass=pymysql.cursors.DictCursor,
|
| 146 |
+
)
|
| 147 |
|
| 148 |
def get_system_stats():
|
| 149 |
cpu_percent = psutil.cpu_percent(interval=0.1)
|
|
|
|
| 232 |
return jsonify({"error": f"size_mb must be between {MIN_DB_MB} and {MAX_DB_MB} MB"}), 400
|
| 233 |
if total_allocated_mb() + size_mb > TOTAL_MAX_MB:
|
| 234 |
return jsonify({"error": "Total allocated size would exceed 25GB limit"}), 400
|
|
|
|
| 235 |
db_uuid = str(uuid.uuid4())
|
| 236 |
db_name = f"db_{db_uuid.replace('-', '')[:16]}"
|
|
|
|
| 237 |
try:
|
| 238 |
conn = get_mysql_connection()
|
| 239 |
+
conn.autocommit(True)
|
| 240 |
cur = conn.cursor()
|
| 241 |
cur.execute(f"CREATE DATABASE `{db_name}`")
|
| 242 |
cur.close()
|
| 243 |
conn.close()
|
| 244 |
except Exception as e:
|
| 245 |
return jsonify({"error": f"Failed to create database: {e}"}), 500
|
|
|
|
| 246 |
db_registry[db_uuid] = {
|
| 247 |
"db_name": db_name,
|
| 248 |
"size_mb": size_mb,
|
| 249 |
"created_at": time.time(),
|
| 250 |
}
|
|
|
|
| 251 |
return jsonify({
|
| 252 |
"uuid": db_uuid,
|
| 253 |
"db_name": db_name,
|
|
|
|
| 259 |
def db_query(db_uuid):
|
| 260 |
if db_uuid not in db_registry:
|
| 261 |
abort(404, description="Unknown database UUID")
|
|
|
|
| 262 |
data = request.get_json(silent=True) or {}
|
| 263 |
query = data.get("query")
|
| 264 |
if not query:
|
| 265 |
return jsonify({"status": "error", "error": "Missing 'query' in JSON body"}), 400
|
|
|
|
| 266 |
db_name = db_registry[db_uuid]["db_name"]
|
| 267 |
try:
|
| 268 |
conn = get_mysql_connection(database=db_name)
|
| 269 |
cur = conn.cursor()
|
| 270 |
cur.execute(query)
|
|
|
|
| 271 |
rows = None
|
| 272 |
if cur.description is not None:
|
| 273 |
+
rows = cur.fetchall()
|
|
|
|
|
|
|
| 274 |
try:
|
| 275 |
conn.commit()
|
| 276 |
except Exception:
|
| 277 |
conn.rollback()
|
|
|
|
| 278 |
cur.close()
|
| 279 |
conn.close()
|
| 280 |
return jsonify({
|