From 527846e322d75bffbed095fc6bc941ac7bb22afc Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Tue, 27 Sep 2022 10:32:27 -0400 Subject: [PATCH] Add support for new RDOC API RDOC API is changing, must detect and adapt to change. Change-Id: Id85f51874d8a57ab996c508815970f670bc1cfbc --- pyghmi/ipmi/oem/lenovo/imm.py | 29 +++++++++++++++++++++-------- pyghmi/redfish/oem/lenovo/xcc.py | 29 +++++++++++++++++++++-------- 2 files changed, 42 insertions(+), 16 deletions(-) diff --git a/pyghmi/ipmi/oem/lenovo/imm.py b/pyghmi/ipmi/oem/lenovo/imm.py index 2dba6a2c..8d890751 100644 --- a/pyghmi/ipmi/oem/lenovo/imm.py +++ b/pyghmi/ipmi/oem/lenovo/imm.py @@ -1851,18 +1851,31 @@ class XCCClient(IMMClient): self.weblogout() def upload_media(self, filename, progress=None, data=None): - xid = random.randint(0, 1000000000) + wc = self.wc self._refresh_token() - uploadthread = webclient.FileUploader( - self.wc, '/upload?X-Progress-ID={0}'.format(xid), filename, data) + rsp, statu = wc.grab_json_response_with_status('/rdocupload') + newmode = False + if statu == 404: + xid = random.randint(0, 1000000000) + uploadthread = webclient.FileUploader( + wc, '/upload?X-Progress-ID={0}'.format(xid), filename, data) + else: + newmode = True + uploadthread = webclient.FileUploader( + wc, '/rdocupload', filename, data) uploadthread.start() while uploadthread.isAlive(): uploadthread.join(3) - rsp = self.wc.grab_json_response( - '/upload/progress?X-Progress-ID={0}'.format(xid)) - if progress and rsp['state'] == 'uploading': - progress({'phase': 'upload', - 'progress': 100.0 * rsp['received'] / rsp['size']}) + if newmode: + if progress: + progress({'phase': 'upload', + 'progress': 100 * wc.get_upload_progress()}) + else: + rsp = self.wc.grab_json_response( + '/upload/progress?X-Progress-ID={0}'.format(xid)) + if progress and rsp['state'] == 'uploading': + progress({'phase': 'upload', + 'progress': 100.0 * rsp['received'] / rsp['size']}) self._refresh_token() rsp = json.loads(uploadthread.rsp) if progress: diff --git a/pyghmi/redfish/oem/lenovo/xcc.py b/pyghmi/redfish/oem/lenovo/xcc.py index 2bf4554b..c928a1b2 100644 --- a/pyghmi/redfish/oem/lenovo/xcc.py +++ b/pyghmi/redfish/oem/lenovo/xcc.py @@ -875,18 +875,31 @@ class OEMHandler(generic.OEMHandler): 'XCC does not have required license for operation') def upload_media(self, filename, progress=None, data=None): - xid = random.randint(0, 1000000000) + wc = self.wc self._refresh_token() - uploadthread = webclient.FileUploader( - self.wc, '/upload?X-Progress-ID={0}'.format(xid), filename, data) + rsp, statu = wc.grab_json_response_with_status('/rdocupload') + newmode = False + if statu == 404: + xid = random.randint(0, 1000000000) + uploadthread = webclient.FileUploader( + wc, '/upload?X-Progress-ID={0}'.format(xid), filename, data) + else: + newmode = True + uploadthread = webclient.FileUploader( + wc, '/rdocupload', filename, data) uploadthread.start() while uploadthread.isAlive(): uploadthread.join(3) - rsp = self.wc.grab_json_response( - '/upload/progress?X-Progress-ID={0}'.format(xid)) - if progress and rsp['state'] == 'uploading': - progress({'phase': 'upload', - 'progress': 100.0 * rsp['received'] / rsp['size']}) + if newmode: + if progress: + progress({'phase': 'upload', + 'progress': 100 * wc.get_upload_progress()}) + else: + rsp = self.wc.grab_json_response( + '/upload/progress?X-Progress-ID={0}'.format(xid)) + if progress and rsp['state'] == 'uploading': + progress({'phase': 'upload', + 'progress': 100.0 * rsp['received'] / rsp['size']}) self._refresh_token() rsp = json.loads(uploadthread.rsp) if progress: