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/
PYTHON = ./.venv/bin/python
PIP = ./.venv/bin/pip
APP_NAME=boeh
APP_NAME=rwebgui
all: install build
@ -24,5 +24,5 @@ build:
$(PYTHON) -m build
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
from nio import AsyncClient, RoomMessageText
class BooeehBot:
def generate_boeh(self):

View File

@ -1,16 +1,17 @@
from rwebgui.app import Application
from aiohttp import web
import asyncio
from concurrent.futures import ThreadPoolExecutor as Executor
from aiohttp import web
from rwebgui.app import Application
def main():
app = Application()
executor = Executor(max_workers=20)
loop = asyncio.get_event_loop()
loop.set_default_executor(executor)
web.run_app(app, loop=loop,port=3080)
web.run_app(app, loop=loop, port=3080)
if __name__ == "__main__":

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 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):
@ -18,42 +20,44 @@ class EvalBox(Component):
try:
result = eval(value)
value = value + "= " + str(result)
await self.set_attr("value",value)
await self.set_attr("value", value)
except:
pass
except AttributeError as ex:
except AttributeError:
print(value)
return value
class Button(Component):
async def on_click(self, event):
component = self.app.search
await component.set_attr("value","Woeiii")
await component.set_attr("value", "Woeiii")
class Button1(Component):
async def on_click(self,event):
async def on_click(self, event):
field = self.app.search
await field.toggle()
value = await field.get_style("display","block")
value = await field.get_style("display", "block")
await self.set_attr("innerText", value)
class RandomString(Component):
async def task_random(self):
import random
rand_bytes = [random.choice("abcdefghijklmnopqrstuvwxyz") for _ in range(15)]
random_data = "".join(rand_bytes)
while True:
remember = random_data[0]
random_data = random_data[1:] + remember
await self.set_attr("innerHTML",random_data)
await self.set_attr("innerHTML", random_data)
await asyncio.sleep(0.01)
class Counter(Component):
async def task_test(self):
@ -61,8 +65,6 @@ class Counter(Component):
await asyncio.sleep(10)
print("Slow task")
async def task_increment(self):
if not self.value:
self.value = 0
@ -72,31 +74,36 @@ class Counter(Component):
except:
self.value = 0
self.value += 1
await self.set_attr("value",self.value)
await self.set_attr("value", self.value)
await asyncio.sleep(1)
class GPT(Component):
class Children:
prompt = Component
answer = Component
class submit(Component):
async def trigger(self, id_, event, data):
print("GOGOG",event,data)
print("GOGOG", 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
client = ServerProxy("https://api.molodetz.nl/rpc")
prompt = await self.app.prompt.get_attr("value")
print(prompt)
exit(0)
await self.answer.set_attr("value",client.gpt4o(prompt))
return {"event_id":data['event_id'],"success":True}
await self.answer.set_attr("value", client.gpt4o(prompt))
return {"event_id": data["event_id"], "success": True}
class SpeedMeter(Component):
def __init__(self, app, id_, description=None, ws = None):
def __init__(self, app, id_, description=None, ws=None):
self.time_start = time.time()
self.bytes_received = 0
super().__init__(app, id_, description, ws)
@ -106,7 +113,7 @@ class SpeedMeter(Component):
bytes_received = self.bytes_received
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)
async def trigger(self, id_, event, data):
@ -142,13 +149,13 @@ class Application(BaseApplication):
self.location_static = self.location.joinpath("static")
self.template_path = self.location.joinpath("templates")
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("/ws/{uuid}", self.websocket_handler)
async def websocket_handler(self, request):
# 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
try:
@ -166,7 +173,5 @@ class Application(BaseApplication):
return ws
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,17 +1,17 @@
import uuid
import json
import time
import aiohttp
import asyncio
import time
import uuid
from aiohttp import web
class Component:
@classmethod
def define(cls):
return cls
def __init__(self,app, id_, description=None,ws: web.WebSocketResponse=None):
def __init__(self, app, id_, description=None, ws: web.WebSocketResponse = None):
self.id = id_
self.ws = ws
@ -21,7 +21,7 @@ class Component:
self._callbacks = {}
self.value = None
self._running = False
if not hasattr(self,"Children"):
if not hasattr(self, "Children"):
return
for name in dir(self.Children):
if name.startswith("__"):
@ -29,11 +29,12 @@ class Component:
obj = getattr(self.Children, name)
instance = obj(app=self.app,id_=name,ws=ws )
instance = obj(app=self.app, id_=name, ws=ws)
self.add_child(instance)
instance.app = self
instance.ws = self.ws
setattr(self, name, instance)
@classmethod
def from_json(cls, json):
obj = cls(None, None)
@ -42,7 +43,7 @@ class Component:
@classmethod
def to_json(cls):
obj = cls.__dict__ .copy()
obj = cls.__dict__.copy()
return obj
@classmethod
@ -57,9 +58,13 @@ class Component:
@property
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:
tasks_ += child.tasks#.extend(await child.get_tasks())
tasks_ += child.tasks # .extend(await child.get_tasks())
return tasks_
async def communicate(self, event_id=None):
@ -67,11 +72,11 @@ class Component:
async for msg in self.ws:
if msg.type == web.WSMsgType.TEXT:
# Echo the message back to the client
#print(f"Received message: {msg.data}")
# print(f"Received message: {msg.data}")
data = msg.json()
if not event_id:
pass
#return data
# return data
else:
if data.get("event_id") == event_id:
return data
@ -80,54 +85,54 @@ class Component:
def callbacks(self):
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_:
method_name = "on_"+event
method_name = "on_" + event
if hasattr(self, method_name):
method = getattr(self, method_name)
await method(data)
print("JAAJ")
for child in self.children:
await child.trigger(id_,event,data)
await child.trigger(id_, event, data)
async def register_callback(self, event_id, callback):
self.callbacks[event_id] = callback
async def call(self, method, args=None,id_=None, callback=True):
async def call(self, method, args=None, id_=None, callback=True):
while not self.running:
await asyncio.sleep(0.1)
if not args:
args= []
args = []
event_id = str(uuid.uuid4())
loop = asyncio.get_running_loop()
future = loop.create_future()
self.callbacks[event_id] = lambda data: future.set_result(data)
await self.ws.send_json({
"event_id": event_id,
"event": "call",
"id": id_ and id_ or self.id,
"method": method,
"args": args,
"callback": callback
})
await self.ws.send_json(
{
"event_id": event_id,
"event": "call",
"id": id_ and id_ or self.id,
"method": method,
"args": args,
"callback": callback,
}
)
if callback:
response = await self.communicate(event_id=event_id)
return response['result']
#print("GLUKT")
#return response['result']
response = await self.communicate(event_id=event_id)
return response["result"]
# print("GLUKT")
# return response['result']
return True
#return await future
# return await future
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
async def set_attr(self, key, value):
result = await self.call("setAttr", [self.id,key,value],callback=False)
result = await self.call("setAttr", [self.id, key, value], callback=False)
return result
async def get(self, id_):
@ -139,15 +144,15 @@ class Component:
return child
async def set_data(self, key, value):
result = await self.call("setData", [self.id, key,value], callback=False)
result = await self.call("setData", [self.id, key, value], callback=False)
return result
async def get_data(self, key, default=None):
result = await self.call("getData", [self.id,key], default,True)
result = await self.call("getData", [self.id, key], default, True)
return result or default
async def set_style(self, key, value):
result = await self.call("setStyle", [self.id, key,value], callback=False)
result = await self.call("setStyle", [self.id, key, value], callback=False)
return result
async def toggle(self):
@ -160,13 +165,10 @@ class Component:
await self.set_style("display", value)
async def get_style(self, key, default=None):
result = await self.call("getStyle", [self.id,key], default)
result = await self.call("getStyle", [self.id, key], default)
return result or default
async def on_keyup(self,event):
async def on_keyup(self, event):
value = await self.get_attr("value")
if self.value != value:
if hasattr(self, "on_change"):
@ -174,11 +176,10 @@ class Component:
self.value = value
return self.value
async def get_tasks(self):
tasks = self.tasks
for child in self.children:
tasks += child.tasks#.extend(await child.get_tasks())
tasks += child.tasks # .extend(await child.get_tasks())
return tasks
async def set_running(self):
@ -197,42 +198,44 @@ class Component:
async for msg in self.ws:
if msg.type == web.WSMsgType.TEXT:
# Echo the message back to the client
#print(f"Received message: {msg.data}")
# print(f"Received message: {msg.data}")
data = msg.json()
response = {"event_id":data['event_id'],"success":True}
response['time_start'] = time.time()
if self.callbacks.get(data['event_id']):
self.callbacks[data['event_id']](data['result'])
elif data.get('data') and not data['data'].get('id'):
response['handled'] = False
elif data.get('data'):
response['handled'] = True
response['data'] = await self.trigger(data['data']['id'], data['event'],data['data'])
response['cancel'] = True
response = {"event_id": data["event_id"], "success": True}
response["time_start"] = time.time()
if self.callbacks.get(data["event_id"]):
self.callbacks[data["event_id"]](data["result"])
elif data.get("data") and not data["data"].get("id"):
response["handled"] = False
elif data.get("data"):
response["handled"] = True
response["data"] = await self.trigger(
data["data"]["id"], data["event"], data["data"]
)
response["cancel"] = True
response['time_end'] = time.time()
response['time_duration'] = response['time_end'] - response['time_start']
response["time_end"] = time.time()
response["time_duration"] = (
response["time_end"] - response["time_start"]
)
await self.ws.send_json(response)
#await ws.send_str(f"Echo: {msg.data}")
# await ws.send_str(f"Echo: {msg.data}")
elif msg.type == web.WSMsgType.ERROR:
print(f"WebSocket error: {self.ws.exception()}")
except Exception as ex:
print(ex)
pass
#async def the_task():
# while True:
# time.sleep(1)
#while True:
# async def the_task():
# while True:
# time.sleep(1)
# while True:
tasks.append(events)
await asyncio.gather(*[task() for task in tasks])
#await asyncio.create_task(asyncio.gather(*[task() for task in tasks]))
#await tasks()
# await asyncio.create_task(asyncio.gather(*[task() for task in tasks]))
# await tasks()
print("AFTERR")
def add_child(self, child):
child.app = self.app
child.ws = self.ws