Spaces:
Sleeping
Sleeping
Commit
·
4f6ee5b
1
Parent(s):
d5e187b
update fix logger
Browse files- app.py +10 -3
- channels/channel.py +10 -4
- entities/entity.py +13 -8
- interactors/interactor.py +15 -11
- logging_config.py +64 -0
- presenters/presenter.py +9 -4
- routers/router.py +9 -4
- views/view.py +11 -3
app.py
CHANGED
@@ -1,10 +1,16 @@
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
def initialize_app():
|
10 |
# Tạo các thành phần
|
@@ -26,5 +32,6 @@ def initialize_app():
|
|
26 |
router.navigate('Home')
|
27 |
|
28 |
if __name__ == "__main__":
|
29 |
-
|
30 |
-
initialize_app()
|
|
|
|
1 |
+
|
2 |
import logging
|
3 |
from channels.channel import Channel
|
4 |
from entities.entity import Entity
|
5 |
from interactors.interactor import Interactor
|
6 |
from presenters.presenter import Presenter
|
7 |
from routers.router import Router
|
8 |
+
from components.view import View
|
9 |
+
|
10 |
+
setup_logging = __import__('logging_config').setup_logging
|
11 |
+
setup_logging()
|
12 |
+
|
13 |
+
logger = logging.getLogger('app')
|
14 |
|
15 |
def initialize_app():
|
16 |
# Tạo các thành phần
|
|
|
32 |
router.navigate('Home')
|
33 |
|
34 |
if __name__ == "__main__":
|
35 |
+
logger.info("Application started")
|
36 |
+
initialize_app()
|
37 |
+
logger.info("Application finished")
|
channels/channel.py
CHANGED
@@ -1,5 +1,11 @@
|
|
|
|
1 |
import logging
|
2 |
|
|
|
|
|
|
|
|
|
|
|
3 |
class Event:
|
4 |
def __init__(self):
|
5 |
self.listeners = {}
|
@@ -8,21 +14,21 @@ class Event:
|
|
8 |
if event not in self.listeners:
|
9 |
self.listeners[event] = []
|
10 |
self.listeners[event].append(listener)
|
11 |
-
|
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 |
-
|
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 |
-
|
24 |
except Exception as e:
|
25 |
-
|
26 |
|
27 |
class Channel:
|
28 |
def __init__(self):
|
|
|
1 |
+
|
2 |
import logging
|
3 |
|
4 |
+
setup_logging = __import__('logging_config').setup_logging
|
5 |
+
setup_logging()
|
6 |
+
|
7 |
+
logger = logging.getLogger('channels')
|
8 |
+
|
9 |
class Event:
|
10 |
def __init__(self):
|
11 |
self.listeners = {}
|
|
|
14 |
if event not in self.listeners:
|
15 |
self.listeners[event] = []
|
16 |
self.listeners[event].append(listener)
|
17 |
+
logger.info(f"Registered listener for event: {event}")
|
18 |
|
19 |
def off(self, event: str, listener: callable):
|
20 |
if event in self.listeners:
|
21 |
self.listeners[event] = [l for l in self.listeners[event] if l != listener]
|
22 |
+
logger.info(f"Unregistered listener for event: {event}")
|
23 |
|
24 |
def emit(self, event: str, *args, **kwargs):
|
25 |
if event in self.listeners:
|
26 |
for listener in self.listeners[event]:
|
27 |
try:
|
28 |
listener(*args, **kwargs)
|
29 |
+
logger.info(f"Emitted event: {event}")
|
30 |
except Exception as e:
|
31 |
+
logger.error(f"Error emitting event {event}: {e}")
|
32 |
|
33 |
class Channel:
|
34 |
def __init__(self):
|
entities/entity.py
CHANGED
@@ -2,36 +2,41 @@
|
|
2 |
from dataclasses import dataclass, field
|
3 |
import logging
|
4 |
|
|
|
|
|
|
|
|
|
|
|
5 |
@dataclass
|
6 |
class Entity:
|
7 |
data: dict = field(default_factory=dict)
|
8 |
|
9 |
def create(self, key: str, value: any):
|
10 |
if not isinstance(key, str) or value is None:
|
11 |
-
|
12 |
return
|
13 |
self.data[key] = value
|
14 |
-
|
15 |
|
16 |
def read(self, key: str):
|
17 |
if not isinstance(key, str):
|
18 |
-
|
19 |
return
|
20 |
value = self.data.get(key)
|
21 |
-
|
22 |
return value
|
23 |
|
24 |
def update(self, key: str, value: any):
|
25 |
if not isinstance(key, str) or value is None:
|
26 |
-
|
27 |
return
|
28 |
self.data[key] = value
|
29 |
-
|
30 |
|
31 |
def delete(self, key: str):
|
32 |
if not isinstance(key, str):
|
33 |
-
|
34 |
return
|
35 |
if key in self.data:
|
36 |
del self.data[key]
|
37 |
-
|
|
|
2 |
from dataclasses import dataclass, field
|
3 |
import logging
|
4 |
|
5 |
+
setup_logging = __import__('logging_config').setup_logging
|
6 |
+
setup_logging()
|
7 |
+
|
8 |
+
logger = logging.getLogger('entities')
|
9 |
+
|
10 |
@dataclass
|
11 |
class Entity:
|
12 |
data: dict = field(default_factory=dict)
|
13 |
|
14 |
def create(self, key: str, value: any):
|
15 |
if not isinstance(key, str) or value is None:
|
16 |
+
logger.error('Invalid key or value')
|
17 |
return
|
18 |
self.data[key] = value
|
19 |
+
logger.info(f"Create: {key} = {value}")
|
20 |
|
21 |
def read(self, key: str):
|
22 |
if not isinstance(key, str):
|
23 |
+
logger.error('Invalid key')
|
24 |
return
|
25 |
value = self.data.get(key)
|
26 |
+
logger.info(f"Read: {key} = {value}")
|
27 |
return value
|
28 |
|
29 |
def update(self, key: str, value: any):
|
30 |
if not isinstance(key, str) or value is None:
|
31 |
+
logger.error('Invalid key or value')
|
32 |
return
|
33 |
self.data[key] = value
|
34 |
+
logger.info(f"Update: {key} = {value}")
|
35 |
|
36 |
def delete(self, key: str):
|
37 |
if not isinstance(key, str):
|
38 |
+
logger.error('Invalid key')
|
39 |
return
|
40 |
if key in self.data:
|
41 |
del self.data[key]
|
42 |
+
logger.info(f"Delete: {key}")
|
interactors/interactor.py
CHANGED
@@ -1,9 +1,13 @@
|
|
|
|
1 |
import logging
|
2 |
-
|
3 |
-
|
|
|
|
|
|
|
4 |
|
5 |
class Interactor:
|
6 |
-
def __init__(self, channel
|
7 |
self.channel = channel
|
8 |
self.entity = entity
|
9 |
self.channel.on('create', self.create)
|
@@ -14,27 +18,27 @@ class Interactor:
|
|
14 |
def create(self, key: str, value: any):
|
15 |
try:
|
16 |
self.entity.create(key, value)
|
17 |
-
|
18 |
except Exception as e:
|
19 |
-
|
20 |
|
21 |
def read(self, key: str):
|
22 |
try:
|
23 |
self.entity.read(key)
|
24 |
-
|
25 |
except Exception as e:
|
26 |
-
|
27 |
|
28 |
def update(self, key: str, value: any):
|
29 |
try:
|
30 |
self.entity.update(key, value)
|
31 |
-
|
32 |
except Exception as e:
|
33 |
-
|
34 |
|
35 |
def delete(self, key: str):
|
36 |
try:
|
37 |
self.entity.delete(key)
|
38 |
-
|
39 |
except Exception as e:
|
40 |
-
|
|
|
1 |
+
|
2 |
import logging
|
3 |
+
|
4 |
+
setup_logging = __import__('logging_config').setup_logging
|
5 |
+
setup_logging()
|
6 |
+
|
7 |
+
logger = logging.getLogger('interactors')
|
8 |
|
9 |
class Interactor:
|
10 |
+
def __init__(self, channel, entity):
|
11 |
self.channel = channel
|
12 |
self.entity = entity
|
13 |
self.channel.on('create', self.create)
|
|
|
18 |
def create(self, key: str, value: any):
|
19 |
try:
|
20 |
self.entity.create(key, value)
|
21 |
+
logger.info(f"Create event emitted: {key} = {value}")
|
22 |
except Exception as e:
|
23 |
+
logger.error(f"Error emitting create event: {e}")
|
24 |
|
25 |
def read(self, key: str):
|
26 |
try:
|
27 |
self.entity.read(key)
|
28 |
+
logger.info(f"Read event emitted: {key}")
|
29 |
except Exception as e:
|
30 |
+
logger.error(f"Error emitting read event: {e}")
|
31 |
|
32 |
def update(self, key: str, value: any):
|
33 |
try:
|
34 |
self.entity.update(key, value)
|
35 |
+
logger.info(f"Update event emitted: {key} = {value}")
|
36 |
except Exception as e:
|
37 |
+
logger.error(f"Error emitting update event: {e}")
|
38 |
|
39 |
def delete(self, key: str):
|
40 |
try:
|
41 |
self.entity.delete(key)
|
42 |
+
logger.info(f"Delete event emitted: {key}")
|
43 |
except Exception as e:
|
44 |
+
logger.error(f"Error emitting delete event: {e}")
|
logging_config.py
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
import logging
|
3 |
+
import logging.config
|
4 |
+
|
5 |
+
def setup_logging():
|
6 |
+
logging_config = {
|
7 |
+
'version': 1,
|
8 |
+
'disable_existing_loggers': False,
|
9 |
+
'formatters': {
|
10 |
+
'standard': {
|
11 |
+
'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
|
12 |
+
},
|
13 |
+
},
|
14 |
+
'handlers': {
|
15 |
+
'file_handler': {
|
16 |
+
'class': 'logging.FileHandler',
|
17 |
+
'filename': 'app.log',
|
18 |
+
'formatter': 'standard',
|
19 |
+
},
|
20 |
+
'console_handler': {
|
21 |
+
'class': 'logging.StreamHandler',
|
22 |
+
'formatter': 'standard',
|
23 |
+
},
|
24 |
+
},
|
25 |
+
'loggers': {
|
26 |
+
'app': {
|
27 |
+
'handlers': ['file_handler', 'console_handler'],
|
28 |
+
'level': 'INFO',
|
29 |
+
'propagate': False,
|
30 |
+
},
|
31 |
+
'channels': {
|
32 |
+
'handlers': ['file_handler', 'console_handler'],
|
33 |
+
'level': 'INFO',
|
34 |
+
'propagate': False,
|
35 |
+
},
|
36 |
+
'entities': {
|
37 |
+
'handlers': ['file_handler', 'console_handler'],
|
38 |
+
'level': 'INFO',
|
39 |
+
'propagate': False,
|
40 |
+
},
|
41 |
+
'interactors': {
|
42 |
+
'handlers': ['file_handler', 'console_handler'],
|
43 |
+
'level': 'INFO',
|
44 |
+
'propagate': False,
|
45 |
+
},
|
46 |
+
'presenters': {
|
47 |
+
'handlers': ['file_handler', 'console_handler'],
|
48 |
+
'level': 'INFO',
|
49 |
+
'propagate': False,
|
50 |
+
},
|
51 |
+
'routers': {
|
52 |
+
'handlers': ['file_handler', 'console_handler'],
|
53 |
+
'level': 'INFO',
|
54 |
+
'propagate': False,
|
55 |
+
},
|
56 |
+
'components': {
|
57 |
+
'handlers': ['file_handler', 'console_handler'],
|
58 |
+
'level': 'INFO',
|
59 |
+
'propagate': False,
|
60 |
+
},
|
61 |
+
},
|
62 |
+
}
|
63 |
+
|
64 |
+
logging.config.dictConfig(logging_config)
|
presenters/presenter.py
CHANGED
@@ -1,13 +1,18 @@
|
|
|
|
1 |
import logging
|
2 |
-
|
|
|
|
|
|
|
|
|
3 |
|
4 |
class Presenter:
|
5 |
-
def __init__(self, channel
|
6 |
self.channel = channel
|
7 |
|
8 |
def handle(self, event: str, *args, **kwargs):
|
9 |
try:
|
10 |
self.channel.emit(event, *args, **kwargs)
|
11 |
-
|
12 |
except Exception as e:
|
13 |
-
|
|
|
1 |
+
|
2 |
import logging
|
3 |
+
|
4 |
+
setup_logging = __import__('logging_config').setup_logging
|
5 |
+
setup_logging()
|
6 |
+
|
7 |
+
logger = logging.getLogger('presenters')
|
8 |
|
9 |
class Presenter:
|
10 |
+
def __init__(self, channel):
|
11 |
self.channel = channel
|
12 |
|
13 |
def handle(self, event: str, *args, **kwargs):
|
14 |
try:
|
15 |
self.channel.emit(event, *args, **kwargs)
|
16 |
+
logger.info(f"Event handled: {event}")
|
17 |
except Exception as e:
|
18 |
+
logger.error(f"Error handling event {event}: {e}")
|
routers/router.py
CHANGED
@@ -1,14 +1,19 @@
|
|
|
|
1 |
import logging
|
2 |
-
|
|
|
|
|
|
|
|
|
3 |
|
4 |
class Router:
|
5 |
-
def __init__(self, channel
|
6 |
self.channel = channel
|
7 |
self.channel.on('navigate', self.navigate)
|
8 |
|
9 |
def navigate(self, screen: str):
|
10 |
try:
|
11 |
-
|
12 |
self.channel.emit('navigate', screen)
|
13 |
except Exception as e:
|
14 |
-
|
|
|
1 |
+
|
2 |
import logging
|
3 |
+
|
4 |
+
setup_logging = __import__('logging_config').setup_logging
|
5 |
+
setup_logging()
|
6 |
+
|
7 |
+
logger = logging.getLogger('routers')
|
8 |
|
9 |
class Router:
|
10 |
+
def __init__(self, channel):
|
11 |
self.channel = channel
|
12 |
self.channel.on('navigate', self.navigate)
|
13 |
|
14 |
def navigate(self, screen: str):
|
15 |
try:
|
16 |
+
logger.info(f"Navigate to {screen}")
|
17 |
self.channel.emit('navigate', screen)
|
18 |
except Exception as e:
|
19 |
+
logger.error(f"Error navigating to {screen}: {e}")
|
views/view.py
CHANGED
@@ -1,8 +1,14 @@
|
|
|
|
1 |
import gradio as gr
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
3 |
|
4 |
class View:
|
5 |
-
def __init__(self, channel
|
6 |
self.channel = channel
|
7 |
self.channel.on('render', self.render)
|
8 |
self.channel.on('update', self.update)
|
@@ -12,9 +18,11 @@ class View:
|
|
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()
|
|
|
|
1 |
+
|
2 |
import gradio as gr
|
3 |
+
import logging
|
4 |
+
|
5 |
+
setup_logging = __import__('logging_config').setup_logging
|
6 |
+
setup_logging()
|
7 |
+
|
8 |
+
logger = logging.getLogger('components')
|
9 |
|
10 |
class View:
|
11 |
+
def __init__(self, channel):
|
12 |
self.channel = channel
|
13 |
self.channel.on('render', self.render)
|
14 |
self.channel.on('update', self.update)
|
|
|
18 |
gr.Markdown("## Welcome to VIPER Architecture")
|
19 |
gr.Markdown("This is a sample view rendering.")
|
20 |
demo.launch()
|
21 |
+
logger.info("Rendered view")
|
22 |
|
23 |
def update(self, content: str):
|
24 |
with gr.Blocks() as demo:
|
25 |
gr.Markdown("## Welcome to VIPER Architecture")
|
26 |
gr.Markdown(content)
|
27 |
+
demo.launch()
|
28 |
+
logger.info(f"Updated view with content: {content}")
|