hoduyquocbao commited on
Commit
6c9722e
·
1 Parent(s): 916745d

update viper

Browse files
.gitignore ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Ignore node modules
2
+ node_modules/
3
+
4
+ # Ignore log files
5
+ logs
6
+ *.log
7
+ npm-debug.log*
8
+
9
+ # Ignore Next.js build output
10
+ .next
11
+
12
+ # Ignore yarn error log
13
+ yarn-error.log
14
+
15
+ # Ignore IDE settings
16
+ .vscode/
17
+
18
+ # Ignore operating system files
19
+ .DS_Store
20
+ Thumbs.db
21
+ ehthumbs.db
app.py CHANGED
@@ -1,7 +1,30 @@
1
- import gradio as gr
 
 
 
 
 
 
2
 
3
- def greet(name):
4
- return "Hello " + name + "!!"
 
 
 
 
 
 
5
 
6
- demo = gr.Interface(fn=greet, inputs="text", outputs="text")
7
- demo.launch()
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ from channels.channel import Channel
3
+ from entities.entity import Entity
4
+ from interactors.interactor import Interactor
5
+ from presenters.presenter import Presenter
6
+ from routers.router import Router
7
+ from views.view import View
8
 
9
+ def initialize_app():
10
+ # Tạo các thành phần
11
+ channel = Channel()
12
+ entity = Entity()
13
+ interactor = Interactor(channel, entity)
14
+ presenter = Presenter(channel)
15
+ router = Router(channel)
16
+ view = View(channel)
17
 
18
+ # Xử các sự kiện từ người dùng
19
+ presenter.handle('render')
20
+ presenter.handle('create', 'sampleKey', 'sampleValue')
21
+ presenter.handle('read', 'sampleKey')
22
+ presenter.handle('update', 'sampleKey', 'updatedValue')
23
+ presenter.handle('delete', 'sampleKey')
24
+
25
+ # Điều hướng
26
+ router.navigate('Home')
27
+
28
+ if __name__ == "__main__":
29
+ logging.basicConfig(level=logging.INFO)
30
+ initialize_app()
channels/channel.py ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+
3
+ class Event:
4
+ def __init__(self):
5
+ self.listeners = {}
6
+
7
+ def on(self, event: str, listener: callable):
8
+ if event not in self.listeners:
9
+ self.listeners[event] = []
10
+ self.listeners[event].append(listener)
11
+ logging.info(f"Registered listener for event: {event}")
12
+
13
+ def off(self, event: str, listener: callable):
14
+ if event in self.listeners:
15
+ self.listeners[event] = [l for l in self.listeners[event] if l != listener]
16
+ logging.info(f"Unregistered listener for event: {event}")
17
+
18
+ def emit(self, event: str, *args, **kwargs):
19
+ if event in self.listeners:
20
+ for listener in self.listeners[event]:
21
+ try:
22
+ listener(*args, **kwargs)
23
+ logging.info(f"Emitted event: {event}")
24
+ except Exception as e:
25
+ logging.error(f"Error emitting event {event}: {e}")
26
+
27
+ class Channel:
28
+ def __init__(self):
29
+ self.event = Event()
30
+
31
+ def on(self, event: str, listener: callable):
32
+ self.event.on(event, listener)
33
+
34
+ def off(self, event: str, listener: callable):
35
+ self.event.off(event, listener)
36
+
37
+ def emit(self, event: str, *args, **kwargs):
38
+ self.event.emit(event, *args, **kwargs)
entities/entity.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dataclasses import dataclass
2
+ import logging
3
+
4
+ @dataclass
5
+ class Entity:
6
+ data: dict = {}
7
+
8
+ def create(self, key: str, value: any):
9
+ if not isinstance(key, str) or value is None:
10
+ logging.error('Invalid key or value')
11
+ return
12
+ self.data[key] = value
13
+ logging.info(f"Create: {key} = {value}")
14
+
15
+ def read(self, key: str):
16
+ if not isinstance(key, str):
17
+ logging.error('Invalid key')
18
+ return
19
+ value = self.data.get(key)
20
+ logging.info(f"Read: {key} = {value}")
21
+ return value
22
+
23
+ def update(self, key: str, value: any):
24
+ if not isinstance(key, str) or value is None:
25
+ logging.error('Invalid key or value')
26
+ return
27
+ self.data[key] = value
28
+ logging.info(f"Update: {key} = {value}")
29
+
30
+ def delete(self, key: str):
31
+ if not isinstance(key, str):
32
+ logging.error('Invalid key')
33
+ return
34
+ if key in self.data:
35
+ del self.data[key]
36
+ logging.info(f"Delete: {key}")
interactors/interactor.py ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ from channels.channel import Channel
3
+ from entities.entity import Entity
4
+
5
+ class Interactor:
6
+ def __init__(self, channel: Channel, entity: Entity):
7
+ self.channel = channel
8
+ self.entity = entity
9
+ self.channel.on('create', self.create)
10
+ self.channel.on('read', self.read)
11
+ self.channel.on('update', self.update)
12
+ self.channel.on('delete', self.delete)
13
+
14
+ def create(self, key: str, value: any):
15
+ try:
16
+ self.entity.create(key, value)
17
+ logging.info(f"Create event emitted: {key} = {value}")
18
+ except Exception as e:
19
+ logging.error(f"Error emitting create event: {e}")
20
+
21
+ def read(self, key: str):
22
+ try:
23
+ self.entity.read(key)
24
+ logging.info(f"Read event emitted: {key}")
25
+ except Exception as e:
26
+ logging.error(f"Error emitting read event: {e}")
27
+
28
+ def update(self, key: str, value: any):
29
+ try:
30
+ self.entity.update(key, value)
31
+ logging.info(f"Update event emitted: {key} = {value}")
32
+ except Exception as e:
33
+ logging.error(f"Error emitting update event: {e}")
34
+
35
+ def delete(self, key: str):
36
+ try:
37
+ self.entity.delete(key)
38
+ logging.info(f"Delete event emitted: {key}")
39
+ except Exception as e:
40
+ logging.error(f"Error emitting delete event: {e}")
presenters/presenter.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ from channels.channel import Channel
3
+
4
+ class Presenter:
5
+ def __init__(self, channel: Channel):
6
+ self.channel = channel
7
+
8
+ def handle(self, event: str, *args, **kwargs):
9
+ try:
10
+ self.channel.emit(event, *args, **kwargs)
11
+ logging.info(f"Event handled: {event}")
12
+ except Exception as e:
13
+ logging.error(f"Error handling event {event}: {e}")
routers/router.py ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ from channels.channel import Channel
3
+
4
+ class Router:
5
+ def __init__(self, channel: Channel):
6
+ self.channel = channel
7
+ self.channel.on('navigate', self.navigate)
8
+
9
+ def navigate(self, screen: str):
10
+ try:
11
+ logging.info(f"Navigate to {screen}")
12
+ self.channel.emit('navigate', screen)
13
+ except Exception as e:
14
+ logging.error(f"Error navigating to {screen}: {e}")
views/view.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from channels.channel import Channel
3
+
4
+ class View:
5
+ def __init__(self, channel: Channel):
6
+ self.channel = channel
7
+ self.channel.on('render', self.render)
8
+ self.channel.on('update', self.update)
9
+
10
+ def render(self):
11
+ with gr.Blocks() as demo:
12
+ gr.Markdown("## Welcome to VIPER Architecture")
13
+ gr.Markdown("This is a sample view rendering.")
14
+ demo.launch()
15
+
16
+ def update(self, content: str):
17
+ with gr.Blocks() as demo:
18
+ gr.Markdown("## Welcome to VIPER Architecture")
19
+ gr.Markdown(content)
20
+ demo.launch()