Skip to content

Commit 1e9a32c

Browse files
committed
Use loguru instead of printing in gmp_server
1 parent d650042 commit 1e9a32c

File tree

2 files changed

+40
-18
lines changed

2 files changed

+40
-18
lines changed

DevUtils/gmp_server.py

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,30 @@
3232
import socketserver
3333
import sys
3434
import time
35-
from traceback import print_exc
3635
from typing import Dict
3736
from typing import List
3837

3938
import gmpy2
39+
from loguru import logger
4040

4141
HOST = "127.0.0.1"
4242
PORT = 65432
4343

44+
_log_format = "[{time:YYYY-MM-DD HH:mm:ss.SSSZZ}] [{level}] [{function}] {message}"
45+
46+
logger.remove()
47+
logger.add(
48+
sys.stdout,
49+
format=_log_format,
50+
level="DEBUG",
51+
)
52+
logger.add(
53+
"gmp_server.log",
54+
format=_log_format,
55+
rotation="50 MB",
56+
level="DEBUG",
57+
)
58+
4459

4560
class GMPTCPHandler(socketserver.StreamRequestHandler):
4661
id_regex = re.compile(r"T(\w+)\s.*")
@@ -56,7 +71,7 @@ def handle(self):
5671
try:
5772
self.data = self.rfile.readline().strip()
5873
except ConnectionResetError as e:
59-
print(f"connection closed: {type(e).__name__}: {e}")
74+
logger.info("connection closed: {}: {}", type(e).__name__, e)
6075
break
6176

6277
cmd_data = self.data.decode("utf-8")
@@ -68,21 +83,20 @@ def handle(self):
6883
sys.stdout.flush()
6984
except Exception as e:
7085
self.wfile.write(bytes("SERVER_ERROR\n", "utf-8"))
71-
print(e)
72-
print_exc()
86+
logger.error(e)
87+
logger.exception(e)
7388

74-
print("done\n\n")
89+
logger.info("done")
7590
sys.stdout.flush()
7691

7792
def calculate(self, cmd_data: str):
78-
t_id = ""
7993
if match := self.id_regex.match(cmd_data):
8094
t_id = match.group(1)
8195
else:
8296
raise ValueError("invalid t_id")
8397

8498
cmds: List[str] = self.cmd_regex.findall(cmd_data)
85-
print("cmds:", cmds)
99+
logger.info("cmds: {}", cmds)
86100

87101
mpz_vars: Dict[str, gmpy2.mpz] = {}
88102
mpz_ops: List[List[str]] = []
@@ -108,23 +122,29 @@ def calculate(self, cmd_data: str):
108122
match op_type.lower():
109123
case "mpz_add":
110124
mpz_vars[dst] = a + b
111-
print(f"\t{dst} = {op[2]} + {op[3]} ({a} + {b})")
125+
# print(f"\t{dst} = {op[2]} + {op[3]} ({a} + {b})")
126+
logger.info("\t{} = {} + {} ({} + {})", dst, op[2], op[3], a, b)
112127
case "mpz_sub":
113128
mpz_vars[dst] = a - b
114-
print(f"\t{dst} = {op[2]} - {op[3]} ({a} - {b})")
129+
# print(f"\t{dst} = {op[2]} - {op[3]} ({a} - {b})")
130+
logger.info("\t{} = {} - {} ({} - {})", dst, op[2], op[3], a, b)
115131
case "mpz_mod":
116132
mpz_vars[dst] = a % b
117-
print(f"\t{dst} = {op[2]} % {op[3]} ({a} % {b})")
133+
# print(f"\t{dst} = {op[2]} % {op[3]} ({a} % {b})")
134+
logger.info("\t{} = {} % {} ({} % {})", dst, op[2], op[3], a, b)
118135
case "mpz_mul":
119136
mpz_vars[dst] = a * b
120-
print(f"\t{dst} = {op[2]} * {op[3]} ({a} * {b})")
137+
# print(f"\t{dst} = {op[2]} * {op[3]} ({a} * {b})")
138+
logger.info("\t{} = {} * {} ({} * {})", dst, op[2], op[3], a, b)
121139
case "mpz_mul_2exp":
122140
mpz_vars[dst] = a << b
123141
# mpz_vars[dst] = gmpy2.mpz(gmpy2.mul_2exp(a, b))
124-
print(f"\t{dst} = {op[2]} << {op[3]} ({a} << {b})")
142+
# print(f"\t{dst} = {op[2]} << {op[3]} ({a} << {b})")
143+
logger.info("\t{} = {} << {} ({} << {})", dst, op[2], op[3], a, b)
125144
case "nop":
126145
mpz_vars[dst] = a
127-
print(f"\t{dst} = {op[2]} (NO OPERATION)")
146+
# print(f"\t{dst} = {op[2]} (NO OPERATION)")
147+
logger.info("\t{} = {} (NO OPERATION)", dst, op[2])
128148
case "rand_prime":
129149
while True:
130150
x = gmpy2.mpz_urandomb(self.rng, a - 1)
@@ -138,18 +158,19 @@ def calculate(self, cmd_data: str):
138158
x += 1
139159
mpz_vars[dst] = x
140160
break
141-
print(f"\t{dst} = rand_prime({a}) ({mpz_vars[dst]})")
161+
# print(f"\t{dst} = rand_prime({a}) ({mpz_vars[dst]})")
162+
logger.info("\t{} = rand_prime({}) ({})", dst, a, mpz_vars[dst])
142163

143164
if not dst:
144165
raise ValueError("no operations with dst")
145166

146167
# TODO: should we send back all variables here?
147-
# Or only the result? Double-check test_math.c.
168+
# Or only the result? Double-check BearSSL test_math.c.
148169
out = bytes(
149170
f"{t_id} {dst} {mpz_vars[dst].digits(16)}\n",
150-
"utf-8",
171+
encoding="utf-8",
151172
)
152-
print("out:", out)
173+
logger.info("out: {}", out)
153174
self.wfile.write(out)
154175

155176
# for name, value in mpz_vars.items():
@@ -161,7 +182,7 @@ def calculate(self, cmd_data: str):
161182
# )
162183

163184

164-
# https://rednafi.com/python/multithreaded_socket_server_signal_handling/
185+
# TODO: https://rednafi.com/python/multithreaded_socket_server_signal_handling/
165186
class TCPServer(socketserver.TCPServer):
166187
allow_reuse_address = True
167188
# block_on_close = False

DevUtils/requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
gmpy2==2.2.0
2+
loguru==0.7.2
23
numpy==2.0.0
34
pytest==8.2.2

0 commit comments

Comments
 (0)