Spaces:
Configuration error
Configuration error
File size: 4,555 Bytes
c132e32 e629239 dfab724 1022169 c132e32 dfab724 c132e32 dfab724 c132e32 8cfbb4d c132e32 dfab724 4d7c2c6 1022169 dfab724 c132e32 ca09a0b c132e32 1808c39 c132e32 dfab724 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
from flask import Flask, jsonify, request
from flask_cors import CORS
import socket
import argparse
# import importlib
# import asyncio
# from multiprocessing import Process
import gradio as gr
from proxmoxer import ProxmoxAPI
app = Flask(__name__)
CORS(app)
def portConnection(port : int):
s = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
result = s.connect_ex(("localhost", port))
if result == 0: return True
return False
global visable
global process_map
visable = []
process_map = {}
@app.route("/")
def Root():
return jsonify({"message" :"everything is up amd running... 🚀",})
# def IS_STREAMABLE():
# pass
# async def subprocess(metadata):
# # fetch the module
# try :
# DONT_LISTEN_TO = ['GradioModule', 'register']
# mode = importlib.import_module(metadata)
# fn, names = [], []
# for fn_key in dir(mode):
# # print(fn_key, type(getattr(mode, fn_key)))
# attr = getattr(mode, fn_key)
# # p = print(dir(attr)) if fn_key == "Hello_World" else None
# if callable(attr) and not fn_key.startswith("__") and "__decorator__" in dir(attr) and attr.__decorator__ == "__gradio__":
# fn.append((getattr(mode, fn_key)))
# names.append(getattr(mode, fn_key)().__name__)
# print(fn, names)
# except Exception as e:
# print(e)
# raise e
# asyncio.create_task(src.resources.module.tabularGradio(fn, names, listen=2000, metadata=metadata, name=metadata.split('.')[-1]))
# return
# @app.route("/api/append/module" , methods=["POST"])
# def append_module():
# current = request.json
# # task_cb = Process(target=subprocess, args=(current['module'],))
# asyncio.run(subprocess(current['module']))
# # run module until
# return jsonify({"executed" : True,
# "process" : "ended" })
@app.route("/api/iframe/source", methods=["POST"])
def iframe_source():
data = request.json
if data['type'] == 'gradio':
port = data['port']
src_href = f'http://localhost:{port}'
return jsonify({"iframe_src": src_href})
return jsonify({"error": "Invalid iframe type"}), 400
@app.route("/api/preview_vnc", methods=["POST"])
def preview_vnc():
data = request.json
vmid = data['vmID']
nodeid = data['nodeid']
proxmox = ProxmoxAPI('proxmox-domain', user='api', password='password', verify_ssl=False)
config = proxmox.nodes(nodeid).qemu(vmid).vncproxy.create(websocket=1)
ticket = proxmox.access.ticket.post(username='api', password='password')['data']['ticket']
port = config['data']['port']
host = 'proxmox-domain'
src_href = f'https://{host}:8006/?console=kvm&novnc=1&node={nodeid}&resize=1&vmid={vmid}&path=api2/json/nodes/{nodeid}/qemu/{vmid}/vncwebsocket/port/{port}/vncticket/{ticket}'
return jsonify({"iframe_src": src_href})
@app.route("/api/proxmox/vnc", methods=["POST"])
def create_proxmox_vnc():
data = request.json
vmid = data['vmid']
node = data['node']
proxmox = ProxmoxAPI('proxmox-domain', user='user@pam', password='password', verify_ssl=False)
config = proxmox.nodes(node).qemu(vmid).vncproxy.create(websocket=1)
ticket = proxmox.access.ticket.post(username='user@pam', password='password')['data']['ticket']
port = config['data']['port']
host = 'proxmox-domain'
src_href = f'https://{host}:8006/?console=kvm&novnc=1&node={node}&resize=1&vmid={vmid}&path=api2/json/nodes/{node}/qemu/{vmid}/vncwebsocket/port/{port}/vncticket/{ticket}'
return jsonify({"iframe_src": src_href})
@app.route("/api/append/port" , methods=["POST"])
def append_port():
current = request.json
visable.append(current)
return jsonify({"executed" : True})
@app.route("/api/append/connection", methods=["POST"])
def append_connection():
current = request.json
return jsonify({"executed" : True})
@app.route("/api/remove/port" , methods=["POST"])
def remove_port():
current = request.json
print(current)
visable.remove(current)
return jsonify({"executed" : True,
"ports" : current['port']})
@app.route("/api/open/ports", methods=["GET"])
def open_ports():
return jsonify(visable)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--port", help="location of flask api port on local host", default=5000)
args = parser.parse_args()
app.run(host="0.0.0.0", port=args.port, debug=True)
|