Ready to run.

This commit is contained in:
retoor 2024-12-29 16:51:03 +01:00
parent 79d4e850da
commit 8b212187d1
5 changed files with 144 additions and 133 deletions

View File

@ -1,7 +1,7 @@
BIN = ./.venv/bin/ BIN = ./.venv/bin/
PYTHON = ./.venv/bin/python PYTHON = ./.venv/bin/python
PIP = ./.venv/bin/pip PIP = ./.venv/bin/pip
APP_NAME=boeh APP_NAME=rwebgui
all: install build all: install build
@ -24,5 +24,5 @@ build:
$(PYTHON) -m build $(PYTHON) -m build
run: run:
$(BIN)$(APP_NAME) --port=3028 $(BIN)$(APP_NAME).serve --port=3080

View File

@ -1,6 +1,8 @@
from nio import AsyncClient, RoomMessageText
import random import random
from nio import AsyncClient, RoomMessageText
class BooeehBot: class BooeehBot:
def generate_boeh(self): def generate_boeh(self):

View File

@ -1,9 +1,10 @@
from rwebgui.app import Application
from aiohttp import web
import asyncio import asyncio
from concurrent.futures import ThreadPoolExecutor as Executor from concurrent.futures import ThreadPoolExecutor as Executor
from aiohttp import web
from rwebgui.app import Application
def main(): def main():
app = Application() app = Application()

View File

@ -1,12 +1,14 @@
import pathlib
from aiohttp import web
import uuid
from app.app import Application as BaseApplication
from rwebgui.component import Component
import traceback
import time
import asyncio import asyncio
import json import json
import pathlib
import time
import uuid
from aiohttp import web
from app.app import Application as BaseApplication
from rwebgui.component import Component
class EvalBox(Component): class EvalBox(Component):
@ -21,18 +23,18 @@ class EvalBox(Component):
await self.set_attr("value", value) await self.set_attr("value", value)
except: except:
pass pass
except AttributeError as ex: except AttributeError:
print(value) print(value)
return value return value
class Button(Component): class Button(Component):
async def on_click(self, event): async def on_click(self, event):
component = self.app.search component = self.app.search
await component.set_attr("value", "Woeiii") await component.set_attr("value", "Woeiii")
class Button1(Component): class Button1(Component):
async def on_click(self, event): async def on_click(self, event):
@ -41,11 +43,12 @@ class Button1(Component):
value = await field.get_style("display", "block") value = await field.get_style("display", "block")
await self.set_attr("innerText", value) await self.set_attr("innerText", value)
class RandomString(Component):
class RandomString(Component):
async def task_random(self): async def task_random(self):
import random import random
rand_bytes = [random.choice("abcdefghijklmnopqrstuvwxyz") for _ in range(15)] rand_bytes = [random.choice("abcdefghijklmnopqrstuvwxyz") for _ in range(15)]
random_data = "".join(rand_bytes) random_data = "".join(rand_bytes)
while True: while True:
@ -54,6 +57,7 @@ class RandomString(Component):
await self.set_attr("innerHTML", random_data) await self.set_attr("innerHTML", random_data)
await asyncio.sleep(0.01) await asyncio.sleep(0.01)
class Counter(Component): class Counter(Component):
async def task_test(self): async def task_test(self):
@ -61,8 +65,6 @@ class Counter(Component):
await asyncio.sleep(10) await asyncio.sleep(10)
print("Slow task") print("Slow task")
async def task_increment(self): async def task_increment(self):
if not self.value: if not self.value:
self.value = 0 self.value = 0
@ -75,24 +77,29 @@ class Counter(Component):
await self.set_attr("value", self.value) await self.set_attr("value", self.value)
await asyncio.sleep(1) await asyncio.sleep(1)
class GPT(Component): class GPT(Component):
class Children: class Children:
prompt = Component prompt = Component
answer = Component answer = Component
class submit(Component): class submit(Component):
async def trigger(self, id_, event, data): async def trigger(self, id_, event, data):
print("GOGOG", event, data) print("GOGOG", event, data)
return await super().trigger(id_, event, data) return await super().trigger(id_, event, data)
async def on_click(self, data): async def on_click(self, data):
from xmlrpc.client import ServerProxy from xmlrpc.client import ServerProxy
client = ServerProxy("https://api.molodetz.nl/rpc") client = ServerProxy("https://api.molodetz.nl/rpc")
prompt = await self.app.prompt.get_attr("value") prompt = await self.app.prompt.get_attr("value")
print(prompt) print(prompt)
exit(0) exit(0)
await self.answer.set_attr("value", client.gpt4o(prompt)) await self.answer.set_attr("value", client.gpt4o(prompt))
return {"event_id":data['event_id'],"success":True} return {"event_id": data["event_id"], "success": True}
class SpeedMeter(Component): class SpeedMeter(Component):
@ -106,7 +113,7 @@ class SpeedMeter(Component):
bytes_received = self.bytes_received bytes_received = self.bytes_received
self.bytes_received = 0 self.bytes_received = 0
await self.set_attr("value","{} kb/s".format(bytes_received / 1000)) await self.set_attr("value", f"{bytes_received / 1000} kb/s")
await asyncio.sleep(1) await asyncio.sleep(1)
async def trigger(self, id_, event, data): async def trigger(self, id_, event, data):
@ -142,13 +149,13 @@ class Application(BaseApplication):
self.location_static = self.location.joinpath("static") self.location_static = self.location.joinpath("static")
self.template_path = self.location.joinpath("templates") self.template_path = self.location.joinpath("templates")
super().__init__(template_path=self.template_path) super().__init__(template_path=self.template_path)
self.router.add_static('/static', self.location_static) self.router.add_static("/static", self.location_static)
self.router.add_get("/", self.index_handler) self.router.add_get("/", self.index_handler)
self.router.add_get("/ws/{uuid}", self.websocket_handler) self.router.add_get("/ws/{uuid}", self.websocket_handler)
async def websocket_handler(self, request): async def websocket_handler(self, request):
# Extract the UUID from the route # Extract the UUID from the route
uuid_value = request.match_info['uuid'] uuid_value = request.match_info["uuid"]
# Validate if it's a valid UUID # Validate if it's a valid UUID
try: try:
@ -166,7 +173,5 @@ class Application(BaseApplication):
return ws return ws
async def index_handler(self, request): async def index_handler(self, request):
return await self.render_template("index.html", request, {}) return await self.render_template("index.html", request, {})

View File

@ -1,10 +1,10 @@
import uuid
import json
import time
import aiohttp
import asyncio import asyncio
import time
import uuid
from aiohttp import web from aiohttp import web
class Component: class Component:
@classmethod @classmethod
@ -34,6 +34,7 @@ class Component:
instance.app = self instance.app = self
instance.ws = self.ws instance.ws = self.ws
setattr(self, name, instance) setattr(self, name, instance)
@classmethod @classmethod
def from_json(cls, json): def from_json(cls, json):
obj = cls(None, None) obj = cls(None, None)
@ -57,7 +58,11 @@ class Component:
@property @property
def tasks(self): def tasks(self):
tasks_ = [getattr(self, name) for name in dir(self) if name.startswith("task_") and hasattr(self, name)] tasks_ = [
getattr(self, name)
for name in dir(self)
if name.startswith("task_") and hasattr(self, name)
]
for child in self.children: for child in self.children:
tasks_ += child.tasks # .extend(await child.get_tasks()) tasks_ += child.tasks # .extend(await child.get_tasks())
return tasks_ return tasks_
@ -80,7 +85,6 @@ class Component:
def callbacks(self): def callbacks(self):
return hasattr(self.app, "callbacks") and self.app.callbacks or self._callbacks return hasattr(self.app, "callbacks") and self.app.callbacks or self._callbacks
async def trigger(self, id_, event, data): async def trigger(self, id_, event, data):
if self.id == id_: if self.id == id_:
method_name = "on_" + event method_name = "on_" + event
@ -104,24 +108,25 @@ class Component:
future = loop.create_future() future = loop.create_future()
self.callbacks[event_id] = lambda data: future.set_result(data) self.callbacks[event_id] = lambda data: future.set_result(data)
await self.ws.send_json({ await self.ws.send_json(
{
"event_id": event_id, "event_id": event_id,
"event": "call", "event": "call",
"id": id_ and id_ or self.id, "id": id_ and id_ or self.id,
"method": method, "method": method,
"args": args, "args": args,
"callback": callback "callback": callback,
}) }
)
if callback: if callback:
response = await self.communicate(event_id=event_id) response = await self.communicate(event_id=event_id)
return response['result'] return response["result"]
# print("GLUKT") # print("GLUKT")
# return response['result'] # return response['result']
return True return True
# return await future # return await future
async def get_attr(self, key, default=None): async def get_attr(self, key, default=None):
result = await self.call("getAttr", [self.id, key], True) result = await self.call("getAttr", [self.id, key], True)
return result or default return result or default
@ -163,9 +168,6 @@ class Component:
result = await self.call("getStyle", [self.id, key], default) result = await self.call("getStyle", [self.id, key], default)
return result or default return result or default
async def on_keyup(self, event): async def on_keyup(self, event):
value = await self.get_attr("value") value = await self.get_attr("value")
if self.value != value: if self.value != value:
@ -174,7 +176,6 @@ class Component:
self.value = value self.value = value
return self.value return self.value
async def get_tasks(self): async def get_tasks(self):
tasks = self.tasks tasks = self.tasks
for child in self.children: for child in self.children:
@ -199,19 +200,23 @@ class Component:
# Echo the message back to the client # Echo the message back to the client
# print(f"Received message: {msg.data}") # print(f"Received message: {msg.data}")
data = msg.json() data = msg.json()
response = {"event_id":data['event_id'],"success":True} response = {"event_id": data["event_id"], "success": True}
response['time_start'] = time.time() response["time_start"] = time.time()
if self.callbacks.get(data['event_id']): if self.callbacks.get(data["event_id"]):
self.callbacks[data['event_id']](data['result']) self.callbacks[data["event_id"]](data["result"])
elif data.get('data') and not data['data'].get('id'): elif data.get("data") and not data["data"].get("id"):
response['handled'] = False response["handled"] = False
elif data.get('data'): elif data.get("data"):
response['handled'] = True response["handled"] = True
response['data'] = await self.trigger(data['data']['id'], data['event'],data['data']) response["data"] = await self.trigger(
response['cancel'] = True data["data"]["id"], data["event"], data["data"]
)
response["cancel"] = True
response['time_end'] = time.time() response["time_end"] = time.time()
response['time_duration'] = response['time_end'] - response['time_start'] response["time_duration"] = (
response["time_end"] - response["time_start"]
)
await self.ws.send_json(response) await self.ws.send_json(response)
# await ws.send_str(f"Echo: {msg.data}") # await ws.send_str(f"Echo: {msg.data}")
@ -221,7 +226,6 @@ class Component:
print(ex) print(ex)
pass pass
# async def the_task(): # async def the_task():
# while True: # while True:
# time.sleep(1) # time.sleep(1)
@ -232,7 +236,6 @@ class Component:
# await tasks() # await tasks()
print("AFTERR") print("AFTERR")
def add_child(self, child): def add_child(self, child):
child.app = self.app child.app = self.app
child.ws = self.ws child.ws = self.ws