import os
import sqlite3
import json
from flask import Flask, render_template_string, request, jsonify, send_from_directory
DB_PATH = os.environ.get('DB_PATH', '/app/data/consulting.db')
app = Flask(__name__, static_folder='static', static_url_path='/python-editor/static')
HTML = '''
Architectuur Designer — Mek-Tech
'''
@app.route('/python-editor/')
def index():
diagram_id = request.args.get('id')
nodes_json = '[]'
edges_json = '[]'
if diagram_id:
try:
conn = sqlite3.connect(DB_PATH)
c = conn.cursor()
c.execute('SELECT nodes FROM data_diagrams WHERE id=?', (diagram_id,))
row = c.fetchone()
conn.close()
if row:
data = json.loads(row[0])
nodes_json = json.dumps(data.get('nodes', []))
edges_json = json.dumps(data.get('edges', []))
except: pass
return render_template_string(HTML, diagram_id=diagram_id or '', nodes_json=nodes_json, edges_json=edges_json)
@app.route('/python-editor/api/clients')
def api_clients():
conn = sqlite3.connect(DB_PATH)
c = conn.cursor()
c.execute('SELECT id, name FROM clients ORDER BY name')
clients = [{'id': r[0], 'name': r[1]} for r in c.fetchall()]
conn.close()
return jsonify(clients)
@app.route('/python-editor/api/save', methods=['POST'])
def api_save():
data = request.get_json()
name = data.get('name')
client_id = data.get('client_id')
nodes = json.dumps(data.get('nodes', []))
edges = json.dumps(data.get('edges', []))
diagram_id = data.get('id')
conn = sqlite3.connect(DB_PATH)
c = conn.cursor()
if diagram_id:
c.execute('UPDATE data_diagrams SET name=?, client_id=?, nodes=?, edges=?, updated_at=datetime(\'now\') WHERE id=?',
(name, client_id, nodes, edges, diagram_id))
else:
c.execute('INSERT INTO data_diagrams (client_id, name, nodes, edges, diagram_type) VALUES (?,?,?,?,?)',
(client_id, name, nodes, edges, 'data_architecture'))
diagram_id = c.lastrowid
conn.commit()
conn.close()
return jsonify({'id': diagram_id})
if __name__ == '__main__':
port = int(os.environ.get('PY_PORT', 3001))
app.run(host='0.0.0.0', port=port, debug=False)