funcnodes-react-flow 0.2.0__py3-none-any.whl → 0.2.2__py3-none-any.whl
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.
- funcnodes_react_flow/run.py +9 -151
- funcnodes_react_flow/{asset-manifest.json → static/asset-manifest.json} +1 -1
- funcnodes_react_flow/{css → static/css}/style.css +1 -1
- funcnodes_react_flow/static/index.html +1 -0
- funcnodes_react_flow/{js → static/js}/830.js +1 -1
- funcnodes_react_flow/static/js/main.js +2 -0
- funcnodes_react_flow/{js → static/js}/main.js.LICENSE.txt +308 -0
- {funcnodes_react_flow-0.2.0.dist-info → funcnodes_react_flow-0.2.2.dist-info}/METADATA +2 -2
- funcnodes_react_flow-0.2.2.dist-info/RECORD +26 -0
- funcnodes_react_flow/index.html +0 -1
- funcnodes_react_flow/js/main.js +0 -2
- funcnodes_react_flow-0.2.0.dist-info/RECORD +0 -26
- /funcnodes_react_flow/{android-chrome-192x192.png → static/android-chrome-192x192.png} +0 -0
- /funcnodes_react_flow/{android-chrome-512x512.png → static/android-chrome-512x512.png} +0 -0
- /funcnodes_react_flow/{apple-touch-icon.png → static/apple-touch-icon.png} +0 -0
- /funcnodes_react_flow/{favicon-16x16.png → static/favicon-16x16.png} +0 -0
- /funcnodes_react_flow/{favicon-32x32.png → static/favicon-32x32.png} +0 -0
- /funcnodes_react_flow/{favicon.ico → static/favicon.ico} +0 -0
- /funcnodes_react_flow/{js → static/js}/830.js.LICENSE.txt +0 -0
- /funcnodes_react_flow/{logo.png → static/logo.png} +0 -0
- /funcnodes_react_flow/{logo192.png → static/logo192.png} +0 -0
- /funcnodes_react_flow/{logo512.png → static/logo512.png} +0 -0
- /funcnodes_react_flow/{manifest.json → static/manifest.json} +0 -0
- /funcnodes_react_flow/{robots.txt → static/robots.txt} +0 -0
- {funcnodes_react_flow-0.2.0.dist-info → funcnodes_react_flow-0.2.2.dist-info}/LICENSE +0 -0
- {funcnodes_react_flow-0.2.0.dist-info → funcnodes_react_flow-0.2.2.dist-info}/WHEEL +0 -0
- {funcnodes_react_flow-0.2.0.dist-info → funcnodes_react_flow-0.2.2.dist-info}/entry_points.txt +0 -0
funcnodes_react_flow/run.py
CHANGED
@@ -1,157 +1,15 @@
|
|
1
|
-
from typing import Optional
|
2
|
-
import http.server
|
3
|
-
import socketserver
|
4
|
-
import webbrowser
|
5
1
|
import os
|
6
|
-
import
|
7
|
-
import threading
|
8
|
-
import asyncio
|
9
|
-
import funcnodes as fn
|
10
|
-
import websockets
|
2
|
+
from funcnodes.runner import BaseServer
|
11
3
|
|
12
|
-
PORT = 8029
|
13
4
|
|
5
|
+
class FuncnodesreactflowServer(BaseServer):
|
6
|
+
STATIC_PATH = os.path.join(os.path.dirname(__file__), "static")
|
7
|
+
STATIC_URL = "/static"
|
14
8
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
self.get_worker_manager()
|
19
|
-
else:
|
20
|
-
# Call the superclass method to handle standard requests
|
21
|
-
super().do_GET()
|
9
|
+
async def index(self, request):
|
10
|
+
request.match_info["filename"] = "index.html"
|
11
|
+
return await self.serve_static_file(request)
|
22
12
|
|
23
|
-
def do_POST(self):
|
24
|
-
if self.path == "/custom-post":
|
25
|
-
self.handle_custom_post()
|
26
|
-
else:
|
27
|
-
# Send a 405 Method Not Allowed response for unsupported endpoints
|
28
|
-
self.send_error(405, "Method Not Allowed")
|
29
13
|
|
30
|
-
|
31
|
-
|
32
|
-
if self.server.start_worker_manager:
|
33
|
-
asyncio.run(
|
34
|
-
fn.worker.worker_manager.assert_worker_manager_running(
|
35
|
-
host=self.server.worker_manager_host,
|
36
|
-
port=self.server.worker_manager_port,
|
37
|
-
ssl=self.server.worker_manager_ssl,
|
38
|
-
)
|
39
|
-
)
|
40
|
-
self.send_response(200)
|
41
|
-
self.send_header("Content-type", "text/json")
|
42
|
-
self.end_headers()
|
43
|
-
self.wfile.write(
|
44
|
-
(
|
45
|
-
f"ws{'s' if self.server.worker_manager_ssl else ''}://"
|
46
|
-
f"{self.server.worker_manager_host}:{self.server.worker_manager_port}"
|
47
|
-
).encode("utf-8")
|
48
|
-
)
|
49
|
-
|
50
|
-
def handle_custom_post(self):
|
51
|
-
# Implement custom POST handling logic here
|
52
|
-
content_length = int(self.headers["Content-Length"])
|
53
|
-
post_data = self.rfile.read(content_length)
|
54
|
-
|
55
|
-
self.send_response(200)
|
56
|
-
self.send_header("Content-type", "text/html")
|
57
|
-
self.end_headers()
|
58
|
-
response = f"Received POST data: {post_data.decode('utf-8')}"
|
59
|
-
self.wfile.write(response.encode("utf-8"))
|
60
|
-
|
61
|
-
|
62
|
-
class GracefulHTTPServer(socketserver.TCPServer):
|
63
|
-
allow_reuse_address = False
|
64
|
-
timeout = 5
|
65
|
-
|
66
|
-
def __init__(
|
67
|
-
self,
|
68
|
-
server_address,
|
69
|
-
RequestHandlerClass,
|
70
|
-
bind_and_activate=True,
|
71
|
-
worker_manager_host: Optional[str] = None,
|
72
|
-
worker_manager_port: Optional[int] = None,
|
73
|
-
worker_manager_ssl: Optional[bool] = None,
|
74
|
-
start_worker_manager=True,
|
75
|
-
):
|
76
|
-
if worker_manager_host is None:
|
77
|
-
worker_manager_host = fn.config.CONFIG["worker_manager"]["host"]
|
78
|
-
|
79
|
-
if worker_manager_port is None:
|
80
|
-
worker_manager_port = fn.config.CONFIG["worker_manager"]["port"]
|
81
|
-
|
82
|
-
if worker_manager_ssl is None:
|
83
|
-
worker_manager_ssl = fn.config.CONFIG["worker_manager"].get("ssl", False)
|
84
|
-
|
85
|
-
self.start_worker_manager = start_worker_manager
|
86
|
-
self.worker_manager_ssl = worker_manager_ssl
|
87
|
-
self.worker_manager_host = worker_manager_host
|
88
|
-
self.worker_manager_port = worker_manager_port
|
89
|
-
super().__init__(server_address, RequestHandlerClass, bind_and_activate)
|
90
|
-
self._is_serving = True
|
91
|
-
|
92
|
-
def serve_forever(self):
|
93
|
-
while self._is_serving:
|
94
|
-
self.handle_request()
|
95
|
-
|
96
|
-
def shutdown(self):
|
97
|
-
self._is_serving = False
|
98
|
-
|
99
|
-
|
100
|
-
def _open_browser(port, delay=1.0):
|
101
|
-
time.sleep(delay)
|
102
|
-
webbrowser.open(f"http://localhost:{port}")
|
103
|
-
|
104
|
-
|
105
|
-
async def websocket_handler(websocket, path):
|
106
|
-
async for message in websocket:
|
107
|
-
print(f"Received WebSocket message: {message}")
|
108
|
-
await websocket.send(f"Echo: {message}")
|
109
|
-
|
110
|
-
|
111
|
-
def start_websocket_server(port):
|
112
|
-
asyncio.set_event_loop(asyncio.new_event_loop())
|
113
|
-
start_server = websockets.serve(websocket_handler, "localhost", port)
|
114
|
-
asyncio.get_event_loop().run_until_complete(start_server)
|
115
|
-
asyncio.get_event_loop().run_forever()
|
116
|
-
|
117
|
-
|
118
|
-
def run_server(
|
119
|
-
port=PORT,
|
120
|
-
open_browser=True,
|
121
|
-
worker_manager_host: Optional[str] = None,
|
122
|
-
worker_manager_port: Optional[int] = None,
|
123
|
-
worker_manager_ssl: Optional[bool] = None,
|
124
|
-
start_worker_manager=True,
|
125
|
-
):
|
126
|
-
if start_worker_manager:
|
127
|
-
asyncio.run(
|
128
|
-
fn.worker.worker_manager.assert_worker_manager_running(
|
129
|
-
host=worker_manager_host,
|
130
|
-
port=worker_manager_port,
|
131
|
-
ssl=worker_manager_ssl,
|
132
|
-
)
|
133
|
-
)
|
134
|
-
try:
|
135
|
-
script_directory = os.path.dirname(os.path.abspath(__file__))
|
136
|
-
os.chdir(script_directory)
|
137
|
-
httpd = GracefulHTTPServer(
|
138
|
-
("", port),
|
139
|
-
CustomHTTPRequestHandler,
|
140
|
-
worker_manager_host=worker_manager_host,
|
141
|
-
worker_manager_port=worker_manager_port,
|
142
|
-
worker_manager_ssl=worker_manager_ssl,
|
143
|
-
start_worker_manager=start_worker_manager,
|
144
|
-
)
|
145
|
-
print(f"Serving at port {port}")
|
146
|
-
if open_browser:
|
147
|
-
threading.Thread(target=_open_browser, args=(port,), daemon=True).start()
|
148
|
-
httpd.serve_forever()
|
149
|
-
except KeyboardInterrupt:
|
150
|
-
if httpd._is_serving:
|
151
|
-
print("Stopping server...")
|
152
|
-
httpd.shutdown()
|
153
|
-
print("Server has been stopped.")
|
154
|
-
else:
|
155
|
-
raise
|
156
|
-
except OSError as e:
|
157
|
-
print(f"Could not start server at port {port}: {e}")
|
14
|
+
def run_server(**kwargs):
|
15
|
+
return FuncnodesreactflowServer.run_server(**kwargs)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}
|
2
2
|
/*!*******************************************************************************************************************************************************************************************************************************!*\
|
3
3
|
!*** css ../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!../node_modules/sass-loader/dist/cjs.js!./src/frontend/header/header.scss ***!
|
4
|
-
\*******************************************************************************************************************************************************************************************************************************/.funcnodesreactflowheader{display:flex;flex-direction:row;height:50px;justify-content:flex-start;left:0;position:relative;top:0}.funcnodesreactflowheader .headerelement{align-items:center;display:flex;height:100%;margin:4px;position:relative;white-space:nowrap}.funcnodesreactflowheader .statusbar{background-color:var(--funcnodesbackground2);border-radius:.5rem;display:inline-block;height:1.5rem;margin:2px 4px 0;overflow:hidden;position:relative;width:250px}.funcnodesreactflowheader .statusbar-progressbar{background-color:var(--funheadercolor);display:inline-block;height:100%;left:0;position:absolute;top:0;width:0}.funcnodesreactflowheader .statusbar-message{color:var(--funheadercolor);font-size:.8rem;left:0;mix-blend-mode:difference;position:relative;top:0}
|
4
|
+
\*******************************************************************************************************************************************************************************************************************************/.basicstyleelement,.headermenucontent,.styled-select__menu,.styledbtn,.styledcheckbox,.styleddropdown,.styledinput,.styleelement{background-color:var(--funcnodesbackground1);border:1px solid var(--funheadercolor);border-radius:.75rem;color:var(--funcnodestextcolor1)}.funcnodesreactflowheader{display:flex;flex-direction:row;height:50px;justify-content:flex-start;left:0;position:relative;top:0;z-index:1000}.funcnodesreactflowheader .headerelement{align-items:center;display:flex;height:100%;margin:4px;position:relative;white-space:nowrap}.funcnodesreactflowheader .statusbar{background-color:var(--funcnodesbackground2);border-radius:.5rem;display:inline-block;height:1.5rem;margin:2px 4px 0;overflow:hidden;position:relative;width:250px}.funcnodesreactflowheader .statusbar-progressbar{background-color:var(--funheadercolor);display:inline-block;height:100%;left:0;position:absolute;top:0;width:0}.funcnodesreactflowheader .statusbar-message{color:var(--funheadercolor);font-size:.8rem;left:0;mix-blend-mode:difference;position:relative;top:0}.headermenucontent{border-radius:.25rem;max-height:90vh;overflow:auto;padding:5px}.headermenuitem{padding:0 5px}.headermenuitem[data-highlighted],.headermenuitem[data-state=checked],.headermenuitem[data-state=open]{background-color:var(--funcnodesbackground_light)}.headermenuitem[data-state=checked]{color:#fff}
|
5
5
|
/*!************************************************************************************************************************************************************************************************************************!*\
|
6
6
|
!*** css ../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!../node_modules/sass-loader/dist/cjs.js!./src/frontend/dialog.scss ***!
|
7
7
|
\************************************************************************************************************************************************************************************************************************/.dialogoverlay{animation:overlayShow .15s cubic-bezier(.16,1,.3,1);background-color:rgba(0,0,0,.5);inset:0;position:fixed}.dialogconent{animation:contentShow .15s cubic-bezier(.16,1,.3,1);background-color:var(--funcnodesbackground1);border:1px solid var(--funheadercolor);border-radius:6px;box-shadow:var(--funheadercolor) 0 10px 38px -10px,var(--funheadercolor) 0 10px 20px -15px;color:var(--funcnodestextcolor1);display:flex;flex-direction:column;left:50%;max-height:85vh;max-width:85vw;padding:25px;position:fixed;top:50%;transform:translate(-50%,-50%);width:90vw}.dialogtitle{color:var(--funheadercolor);font-size:17px;font-weight:500;margin:0}.dialogdescription{font-size:15px;line-height:1.5;margin:10px 0 20px}.dialogclosebutton{align-items:center;background-color:inherit;border:none;border-radius:100%;color:var(--funheadercolor);display:inline-flex;height:25px;justify-content:center;position:absolute;right:10px;top:10px;width:25px}.dialogclosebutton:hover{background-color:var(--funheadercolor);color:var(--funcnodesbackground1)}.dialogclosebutton:active{background-color:var(--funheadercolor);color:var(--funcnodestextcolor1)}.dialogsendbutton{background-color:var(--funcnodesbackground1);border:1px solid var(--funheadercolor);border-radius:99rem;color:var(--funheadercolor);cursor:pointer;font-size:15px;margin-top:20px;padding:10px 20px}.dialogsendbutton:hover{background-color:var(--funheadercolor);color:var(--funcnodesbackground1)}.dialogsendbutton:active{background-color:var(--funheadercolor);color:var(--funcnodestextcolor1)}.dialogchildren{margin-top:20px;overflow:auto}
|
@@ -0,0 +1 @@
|
|
1
|
+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/static/favicon.ico"/><link rel="apple-touch-icon" href="/static/logo192.png"/><link rel="manifest" href="/static/manifest.json"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Funcnodes via react"/><title>FuncNodes</title><script defer="defer" src="static/js/830.js"></script><script defer="defer" src="static/js/main.js"></script><link href="static/css/style.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|