From b122c4019d6dabd3eedeebd6e81a5766e3088b2c Mon Sep 17 00:00:00 2001 From: bill-auger Date: Jun 25 2022 15:52:08 +0000 Subject: refactor hlibrary.py::submit() --- diff --git a/hclient/hlibrary.py b/hclient/hlibrary.py index e7526e1..e1ad68a 100644 --- a/hclient/hlibrary.py +++ b/hclient/hlibrary.py @@ -383,42 +383,59 @@ class Client(object): return True def submit(self,deviceCode = None): - for key,dev in self.devices.items(): - if key == deviceCode or deviceCode == None: - post = dev[0].data - - #get the node controller - controller = dev[0].type.controller - - #get the user info - info = self.getUserInfo() - token = info['token'] - - post['from_client'] = 'yes' - if dev[2] == 'update': - post['id_hard'] = dev[3] - post['updateAction'] = 'update' - url = controller + '/update/en/' + token - elif dev[2] == 'insert': - post['insertAction'] = 'insert' - url = controller + '/insert/en/' + token - - result, content = self._request.perform(url, post) - - try: - #parse the response - xmldoc = minidom.parseString(content) - response = xmldoc.getElementsByTagName("status")[0].childNodes[0].data.strip() - notice = xmldoc.getElementsByTagName("notice")[0].childNodes[1].data.strip() - - self.errors.append(notice) - if response == 'executed': - return True - else: - return False - except: - self.errors.append("wrong request") - return False + # NOTE: this method will put the data, even if it is identical to the remote store + # TODO: maybe it should not (see also gtkclient.py::setDeviceInfoLabel()::is_modified) + + # look-up the device + if deviceCode == None and len(self.devices) > 0: + device = self.devices[0] + else: + for code , dev in self.devices.items(): + if code == deviceCode: + device = dev ; break ; + if not device: + self.errors.append("data error (hlibrary-submit-a)") + return False + + # get POST data template struct, h-node controller name, and access token + post = device[0].data + controller = device[0].type.controller + info = self.getUserInfo() + if not post or not controller or not info or not 'token' in info: + self.errors.append("data error (hlibrary-submit-b)") + return False + + # prepare POST data + post['from_client'] = 'yes' + if device[2] == 'update': + post['id_hard'] = device[3] + post['updateAction'] = 'update' + url = controller + '/update/en/' + info['token'] + elif device[2] == 'insert': + post['insertAction'] = 'insert' + url = controller + '/insert/en/' + info['token'] + else: + self.errors.append("data error (hlibrary-submit-c)") + return False + + # send POST request + result, content = self._request.perform(url, post) + was_error = False + + try: + # parse the response + xmldoc = minidom.parseString(content) + response = xmldoc.getElementsByTagName("status")[0].childNodes[0].data.strip() + notice = xmldoc.getElementsByTagName("notice")[0].childNodes[1].data.strip() + + self.errors.append(notice) + if response != 'executed': + was_error = True + except: + self.errors.append("wrong request") + was_error = True + + return not was_error # Local Variables: