-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathBackendBase.py
More file actions
73 lines (60 loc) · 2.15 KB
/
BackendBase.py
File metadata and controls
73 lines (60 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import argparse
import threading
import sys
from loguru import logger as log
log.remove(0)
log.add(sys.stderr, level="TRACE")
import rpyc
from rpyc.utils.server import ThreadedServer
from rpyc.core.protocol import Connection
import argparse
class BackendBase(rpyc.Service):
def __init__(self):
self.frontend_connection: Connection = None
self.frontend = None
self.server: ThreadedServer = None
self.DATA_PATH = None
self.connect_to_frontend()
self.start_server()
self.register_to_frontend()
self.setup_logger()
def connect_to_frontend(self):
port = self.get_args().port
self.frontend_connection = rpyc.connect("localhost", port, config={"allow_public_attrs": True})
self.frontend = self.frontend_connection.root
def start_server(self):
self.server = ThreadedServer(self, port=0, protocol_config={"allow_public_attrs": True})
# self.server.start()
threading.Thread(target=self.server.start, name="server_start", daemon=False).start()
log.success("Started server")
def register_to_frontend(self):
self.frontend.register_backend(port=self.server.port)
def on_disconnect(self, conn):
log.info("Connection closed")
if self.server is not None:
self.server.close()
if self.frontend_connection is not None:
self.frontend_connection.close()
def get_args(self):
parser = argparse.ArgumentParser(prog="BackendBase")
parser.add_argument("--port", type=str)
args = parser.parse_args()
if args.port is None:
parser.print_help()
sys.exit()
return args
def exposed_set_data_path(self, data_path):
self.DATA_PATH = data_path
def setup_logger():
if not self.DATA_PATH:
log.error("Wasn't able to setup backend logging sink")
return
log.add(
sink=os.path.join(self.DATA_PATH, "logs/backend.log"),
backtrace=True,
diagnose=True,
level="TRACE",
rotation="3 Days",
compression="zip",
enqueue=True
)