11from io import BufferedWriter , TextIOWrapper
2+ from logging import getLogger
23
34from serial import SerialTimeoutException
45from rich .progress import Progress , TextColumn
@@ -18,39 +19,53 @@ def main_download(
1819 include_eof : bool = False
1920) -> None :
2021 eof_bytes = eof .encode ("ascii" )
22+ logger = getLogger ("iman.data.download" )
23+ logger .info (f"Opening connection on { port } " )
24+ logger .debug (f"Connection parameters: baud={ baud :d} , timeout={ timeout :d} " )
2125 with open_serial (
2226 port ,
2327 speed = baud ,
2428 timeout = timeout
2529 ) as com :
2630 eol_bytes = com .eombytes
2731 started = False
32+ logger .info ("Starting data download" )
33+ logger .debug ("Waiting for first line..." )
2834 while True :
2935 try :
3036 data = com .receive_binary ()
31- started = True
37+ if not started :
38+ started = True
39+ logger .debug ("Received first line..." )
3240
3341 if data == eof_bytes and autoclose and not include_eof :
3442 echo_green ("Download finished (end-of-file)" )
35- return
43+ logger .info ("Download finished (end-of-file)" )
44+ break
3645
3746 echo (data .decode ("ascii" , "replace" ))
3847 if output is not None :
3948 output .write (data + eol_bytes )
4049
4150 if data == eof_bytes and autoclose :
4251 echo_green ("Download finished (end-of-file)" )
43- return
52+ logger .info ("Download finished (end-of-file)" )
53+ break
4454 except SerialTimeoutException :
4555 if started and autoclose :
4656 echo_green ("Download finished (timeout)" )
47- return
57+ logger .info ("Download finished (timeout)" )
58+ break
4859 except KeyboardInterrupt :
4960 echo_yellow ("Download stopped manually" )
50- return
61+ logger .info ("Download stopped manually" )
62+ break
5163 except Exception as e :
5264 echo_red (f"Download interrupted by error ({ e } )" )
53- return
65+ logger .exception ("Download interrupted by error" )
66+ break
67+
68+ logger .info (f"Closed connection on { port } " )
5469
5570
5671def main_upload (
@@ -60,12 +75,17 @@ def main_upload(
6075 timeout : int = 15 ,
6176 skip : int = 0
6277) -> None :
78+ logger = getLogger ("iman.data.upload" )
79+ logger .info (f"Opening connection on { port } " )
80+ logger .debug (f"Connection parameters: baud={ baud :d} , timeout={ timeout :d} " )
6381 with open_serial (
6482 port ,
6583 speed = baud ,
6684 timeout = timeout
6785 ) as com :
6886 try :
87+ logger .info ("Starting data upload" )
88+ logger .debug (f"Skipping { skip } line(s)" )
6989 for _ in range (skip ):
7090 next (file )
7191
@@ -76,8 +96,13 @@ def main_upload(
7696 for line in progress .track (file , description = "Uploading..." ):
7797 com .send (line )
7898
99+ except KeyboardInterrupt :
100+ echo_yellow ("Upload cancelled" )
101+ logger .info ("Upload cancelled by user" )
79102 except Exception as e :
80103 echo_red (f"Upload interrupted by error ({ e } )" )
81- return
104+ logger .exception ("Upload interrupted by error" )
105+ else :
106+ echo_green ("Upload finished" )
82107
83- echo_green ( "Upload finished " )
108+ logger . info ( f"Closed connection on { port } " )
0 commit comments