11import logging
22import os
3- from typing import Dict , List
3+ from typing import Dict , List , Union
4+ from io import StringIO , TextIOWrapper
45
56import requests
67
@@ -16,20 +17,44 @@ class DWCAPI(DuetAPI):
1617 """
1718 api_name = 'DWC_REST'
1819
20+ def connect (self , password = '' ):
21+ """ Start connection to Duet """
22+ url = f'{ self .base_url } /rr_connect'
23+ r = requests .get (url , {'password' : password })
24+ if not r .ok :
25+ raise ValueError
26+ return r .json ()
27+
28+ def disconnect (self ):
29+ """ End connection to Duet """
30+ url = f'{ self .base_url } /rr_disconnect'
31+ r = requests .get (url )
32+ if not r .ok :
33+ raise ValueError
34+ return r .json ()
35+
1936 def get_model (self , key : str = None ) -> Dict :
20- url = f'{ self ._base_url } /rr_model'
37+ url = f'{ self .base_url } /rr_model'
2138 r = requests .get (url , {'flags' : 'd99vn' , 'key' : key })
2239 if not r .ok :
2340 raise ValueError
2441 j = r .json ()
2542 return j ['result' ]
2643
44+ def _get_reply (self ) -> Dict :
45+ url = f'{ self .base_url } /rr_reply'
46+ r = requests .get (url )
47+ if not r .ok :
48+ raise ValueError
49+ return r .text
50+
2751 def send_code (self , code : str ) -> Dict :
28- url = f'{ self ._base_url } /rr_gcode'
52+ url = f'{ self .base_url } /rr_gcode'
2953 r = requests .get (url , {'gcode' : code })
3054 if not r .ok :
3155 raise ValueError
32- return {'response' : '' }
56+ reply = self ._get_reply ()
57+ return {'response' : reply }
3358
3459 def get_file (self , filename : str , directory : str = 'gcodes' ) -> str :
3560 """
@@ -38,24 +63,21 @@ def get_file(self, filename: str, directory: str = 'gcodes') -> str:
3863
3964 returns the file as a string
4065 """
41- url = f'{ self ._base_url } /rr_download'
66+ url = f'{ self .base_url } /rr_download'
4267 r = requests .get (url , {'name' : f'/{ directory } /{ filename } ' })
4368 if not r .ok :
4469 raise ValueError
4570 return r .text
4671
47- def upload_file (self , file : str , directory : str = 'gcodes' ) -> Dict :
48- file = os .path .abspath (file ).replace ('\\ ' , '/' )
49- filename = file .split ('/' )[- 1 ]
50- url = f'{ self ._base_url } /rr_upload?name=/{ directory } /{ filename } '
51- with open (file , 'rb' ) as f :
52- r = requests .post (url , data = f )
72+ def upload_file (self , file : Union [StringIO , TextIOWrapper ], filename : str , directory : str = 'gcodes' ) -> Dict :
73+ url = f'{ self .base_url } /rr_upload?name=/{ directory } /{ filename } '
74+ r = requests .post (url , data = file )
5375 if not r .ok :
5476 raise ValueError
5577 return r .json ()
5678
5779 def get_fileinfo (self , filename : str = None , directory : str = 'gcodes' ) -> Dict :
58- url = f'{ self ._base_url } /rr_fileinfo'
80+ url = f'{ self .base_url } /rr_fileinfo'
5981 if filename :
6082 r = requests .get (url , {'name' : f'/{ directory } /{ filename } ' })
6183 else :
@@ -65,7 +87,7 @@ def get_fileinfo(self, filename: str = None, directory: str = 'gcodes') -> Dict:
6587 return r .json ()
6688
6789 def delete_file (self , filename : str , directory : str = 'gcodes' ) -> Dict :
68- url = f'{ self ._base_url } /rr_delete'
90+ url = f'{ self .base_url } /rr_delete'
6991 r = requests .get (url , {'name' : f'/{ directory } /{ filename } ' })
7092 if not r .ok :
7193 raise ValueError
@@ -74,21 +96,21 @@ def delete_file(self, filename: str, directory: str = 'gcodes') -> Dict:
7496 def move_file (self , from_path , to_path , ** _ignored ):
7597 # BUG this doesn't work currently
7698 raise NotImplementedError
77- url = f'{ self ._base_url } /rr_move'
99+ url = f'{ self .base_url } /rr_move'
78100 r = requests .get (url , {'old' : f'{ from_path } ' , 'new' : f'{ to_path } ' })
79101 if not r .ok :
80102 raise ValueError
81103 return r .json ()
82104
83105 def get_directory (self , directory : str ) -> List [Dict ]:
84- url = f'{ self ._base_url } /rr_filelist'
106+ url = f'{ self .base_url } /rr_filelist'
85107 r = requests .get (url , {'dir' : f'/{ directory } ' })
86108 if not r .ok :
87109 raise ValueError
88110 return r .json ()['files' ]
89111
90112 def create_directory (self , directory : str ) -> Dict :
91- url = f'{ self ._base_url } /rr_mkdir'
113+ url = f'{ self .base_url } /rr_mkdir'
92114 r = requests .get (url , {'dir' : f'/{ directory } ' })
93115 if not r .ok :
94116 raise ValueError
0 commit comments