Commit 0538ed53047c1c5592432d523d9d18dac6cd0d18

Authored by Etienne Pallier
1 parent 1b4dae11
Exists in dev

cleanup

src/device_controller/abstract_component/device_controller.py
@@ -36,6 +36,7 @@ from src.logpyros import LogPyros @@ -36,6 +36,7 @@ from src.logpyros import LogPyros
36 ##from src_device.client.client_channel import * 36 ##from src_device.client.client_channel import *
37 sys.path.append("../..") 37 sys.path.append("../..")
38 ##from device_controller.logs import * 38 ##from device_controller.logs import *
  39 +from device_controller.channels.client_channel import ChannelCommunicationException
39 from device_controller.channels.client_channel_socket import ClientChannelSocket 40 from device_controller.channels.client_channel_socket import ClientChannelSocket
40 from device_controller.channels.client_channel_serial import ClientChannelSerial 41 from device_controller.channels.client_channel_serial import ClientChannelSerial
41 from device_controller.channels.client_channel_usb import ClientChannelUSB 42 from device_controller.channels.client_channel_usb import ClientChannelUSB
@@ -1075,9 +1076,22 @@ class DeviceController(): @@ -1075,9 +1076,22 @@ class DeviceController():
1075 1076
1076 """ 1077 """
1077 self.tprintd("NATIVE Command to send is "+ repr(native_cmd)) 1078 self.tprintd("NATIVE Command to send is "+ repr(native_cmd))
1078 - #self.send_request(native_cmd)  
1079 - self.send_native_cmd(native_cmd)  
1080 - native_res = self.receive_data() 1079 +
  1080 + # SEND command TO my device
  1081 + try:
  1082 + #self.send_request(native_cmd)
  1083 + self.send_native_cmd(native_cmd)
  1084 + except ChannelCommunicationException as e:
  1085 + self.log_e("Channel error while sending command", e)
  1086 + raise
  1087 +
  1088 + # RECEIVE device answer FROM my device
  1089 + try:
  1090 + native_res = self.receive_data()
  1091 + except ChannelCommunicationException as e:
  1092 + self.log_e("Channel error while sending command", e)
  1093 + raise
  1094 +
1081 if self.means_unknown_cmd(native_res): raise UnknownNativeCmdException(native_cmd) 1095 if self.means_unknown_cmd(native_res): raise UnknownNativeCmdException(native_cmd)
1082 if self.is_unknown_res(native_res): raise UnknownNativeResException(native_res) 1096 if self.is_unknown_res(native_res): raise UnknownNativeResException(native_res)
1083 return native_res 1097 return native_res
@@ -1164,55 +1178,9 @@ class DeviceController(): @@ -1164,55 +1178,9 @@ class DeviceController():
1164 1178
1165 :param generic_cmd: str like "get_ra" or "set_ra" or "do_park"... 1179 :param generic_cmd: str like "get_ra" or "set_ra" or "do_park"...
1166 :param value: only for a "set_" cmd 1180 :param value: only for a "set_" cmd
1167 -  
1168 - General Algo:  
1169 -  
1170 - A - REQUEST (QUESTION) management:  
1171 -  
1172 - (1) nc = get_native_cmd_for_generic(gc)  
1173 - // can raise NotImplementedNativeCmdException (concrete)  
1174 - // (use gen2nat_cmds)  
1175 -  
1176 - (2) na = get_native_answer_for_native_cmd_from_device(nc)  
1177 - // can raise UnknownNativeCmdException  
1178 - // or UnknownNativeAnswerException  
1179 - // or ChannelCommunicationError  
1180 -  
1181 - B - ANSWER management:  
1182 -  
1183 - (3) ga = get_generic_answer_for_native(na)  
1184 - // can raise NotImplementedGenericAnswerException  
1185 - // (use gen2nat_cmds)  
1186 -  
1187 - (4) send_generic_answer(ga)  
1188 - // can raise ChannelCommunicationError  
1189 -  
1190 ''' 1181 '''
1191 - self.tprintd("(DC):exec_generic_cmd() from", self)  
1192 -  
1193 - '''  
1194 - # If generic_cmd is for a specific device component (dc), pass it to this dc (instead of me)  
1195 - ####if dc_component_type and dc_component_type not in self.__class__.__name__ :  
1196 - if dcc_type:  
1197 -  
1198 - # Get the dcc in charge of this command  
1199 - try:  
1200 - dcc = self.get_dc_component_for_type(dcc_type)  
1201 - self.tprintd("*** EXECUTÉ PAR COMPONENT", dcc)  
1202 - except DCCNotFoundException as e:  
1203 - self.log_e(f"THREAD EXCEPTION caught by {type(self).__name__} (from dcc)", e)  
1204 - raise  
1205 - #return (DCC)(self.exec_generic_cmd(generic_cmd, values_to_set, None))  
1206 1182
1207 - # Delegate cmd execution to the dcc  
1208 - try:  
1209 - return dcc.exec_generic_cmd(generic_cmd, values_to_set, None)  
1210 - except UnimplementedGenericCmdException as e:  
1211 - self.log_e(f"THREAD EXCEPTION caught by {type(self).__name__} (from dcc)", e)  
1212 - raise  
1213 - # not executed ?  
1214 - return None  
1215 - ''' 1183 + self.tprintd("(DC):exec_generic_cmd() from", self)
1216 #log_d("\n\nGENERIC Command to send is "+generic_cmd) 1184 #log_d("\n\nGENERIC Command to send is "+generic_cmd)
1217 self.tprintd("\n(DC): GENERIC Command to execute is ", generic_cmd) 1185 self.tprintd("\n(DC): GENERIC Command to execute is ", generic_cmd)
1218 ##printd("(DC): My ("+type(self).__name__+") commands are:", self._gen2nat_cmds) 1186 ##printd("(DC): My ("+type(self).__name__+") commands are:", self._gen2nat_cmds)
@@ -1239,7 +1207,9 @@ class DeviceController(): @@ -1239,7 +1207,9 @@ class DeviceController():
1239 native_cmd = native_cmd_infos[0] 1207 native_cmd = native_cmd_infos[0]
1240 if not native_cmd: raise UnimplementedGenericCmdException(generic_cmd) 1208 if not native_cmd: raise UnimplementedGenericCmdException(generic_cmd)
1241 1209
1242 - # MACRO-COMMAND (ex: native_cmd == "do_goto", "do_init", "get_radec") 1210 + # 2) MACRO-COMMAND or NORMAL NATIVE COMMAND ?
  1211 +
  1212 + # 2.a) MACRO-COMMAND (ex: native_cmd == "do_goto", "do_init", "get_radec")
1243 if native_cmd == generic_cmd: 1213 if native_cmd == generic_cmd:
1244 self.tprintd("MACRO-COMMAND") 1214 self.tprintd("MACRO-COMMAND")
1245 #printd("cmd,val", native_cmd, values_to_set) 1215 #printd("cmd,val", native_cmd, values_to_set)
@@ -1254,7 +1224,7 @@ class DeviceController(): @@ -1254,7 +1224,7 @@ class DeviceController():
1254 res = dcc.run_func(native_cmd) 1224 res = dcc.run_func(native_cmd)
1255 ##res = self.run_func(native_cmd) 1225 ##res = self.run_func(native_cmd)
1256 #res = getattr(self, native_cmd)() 1226 #res = getattr(self, native_cmd)()
1257 - except AttributeError as e: 1227 + except (AttributeError, ChannelCommunicationException) as e:
1258 self.log_e("Unknown Native command ?", native_cmd) 1228 self.log_e("Unknown Native command ?", native_cmd)
1259 raise UnknownNativeCmdException(native_cmd) 1229 raise UnknownNativeCmdException(native_cmd)
1260 #if res is None: res = 'ok' 1230 #if res is None: res = 'ok'
@@ -1263,9 +1233,10 @@ class DeviceController(): @@ -1263,9 +1233,10 @@ class DeviceController():
1263 # raise Exception if ERROR 1233 # raise Exception if ERROR
1264 if res.unknown_command: raise UnknownNativeCmdException(native_cmd) 1234 if res.unknown_command: raise UnknownNativeCmdException(native_cmd)
1265 if res.unknown_result: raise UnknownNativeResException(res.txt) 1235 if res.unknown_result: raise UnknownNativeResException(res.txt)
  1236 + # Return Generic result
1266 return res 1237 return res
1267 1238
1268 - # NATIVE COMMAND (ex: native_cmd == "GR") 1239 + # 2.b) NORMAL NATIVE COMMAND (ex: native_cmd == "GR")
1269 ##native_cmd = self.formated_cmd(native_cmd, values_to_set) 1240 ##native_cmd = self.formated_cmd(native_cmd, values_to_set)
1270 native_cmd = dcc.formated_cmd(native_cmd, values_to_set) 1241 native_cmd = dcc.formated_cmd(native_cmd, values_to_set)
1271 awaited_res_if_ok = None 1242 awaited_res_if_ok = None
@@ -1274,9 +1245,11 @@ class DeviceController(): @@ -1274,9 +1245,11 @@ class DeviceController():
1274 ##native_res = self.exec_native_cmd(native_cmd) 1245 ##native_res = self.exec_native_cmd(native_cmd)
1275 try: 1246 try:
1276 native_res = dcc.exec_native_cmd(native_cmd) 1247 native_res = dcc.exec_native_cmd(native_cmd)
1277 - except (UnknownNativeCmdException, UnknownNativeResException) as e: # TODO: a implementer dans exec_native_cmd() 1248 + except (ChannelCommunicationException, UnknownNativeCmdException, UnknownNativeResException) as e: # TODO: a implementer dans exec_native_cmd()
1278 self.log_e(f"THREAD Native command execution caught by {type(self).__name__} (from DC)", e) 1249 self.log_e(f"THREAD Native command execution caught by {type(self).__name__} (from DC)", e)
1279 raise 1250 raise
  1251 +
  1252 + # 3) Make Generic result from native and return it
1280 ok = True if not awaited_res_if_ok else (native_res == awaited_res_if_ok) 1253 ok = True if not awaited_res_if_ok else (native_res == awaited_res_if_ok)
1281 return GenericResult(native_res, ok) 1254 return GenericResult(native_res, ok)
1282 1255
src/device_controller/channels/client_channel.py
@@ -22,6 +22,8 @@ def printd(*args, **kwargs): @@ -22,6 +22,8 @@ def printd(*args, **kwargs):
22 if os.environ.get('PYROS_DEBUG', '0')=='1': print(*args, **kwargs) 22 if os.environ.get('PYROS_DEBUG', '0')=='1': print(*args, **kwargs)
23 ''' 23 '''
24 24
  25 +class ChannelCommunicationException(Exception):
  26 + pass
25 27
26 ##class SocketClientAbstract(): 28 ##class SocketClientAbstract():
27 class ClientChannel(): 29 class ClientChannel():