diff --git a/powernad/API/MasterReport.py b/powernad/API/MasterReport.py index 1443bfa..3dfc4d6 100755 --- a/powernad/API/MasterReport.py +++ b/powernad/API/MasterReport.py @@ -29,6 +29,10 @@ def get_master_report_by_id(self, id: str) -> MasterReportObject: result = MasterReportObject(result) return result + + def download_master_report_by_url(self, url: str, localpath: str): + result = self.r.download('/report-download', url, localpath) + return result def create_master_report(self, CreateMasterReportObject: CreateMasterReportObject) -> MasterReportObject: data = jsonpickle.encode(CreateMasterReportObject, unpicklable=False) @@ -42,8 +46,7 @@ def create_master_report(self, CreateMasterReportObject: CreateMasterReportObjec return result def delete_master_report_all(self): - self.r.delete('/master-reports') - return True + return self.r.delete('/master-reports') def delete_master_report_by_id(self, id: str): self.r.delete('/master-reports', {'id': id}) diff --git a/powernad/API/StatReport.py b/powernad/API/StatReport.py index 4334086..363b6db 100755 --- a/powernad/API/StatReport.py +++ b/powernad/API/StatReport.py @@ -27,6 +27,10 @@ def get_stat_report(self, reportJobId: str) -> StatReportObject: result = StatReportObject(result) return result + + def download_stat_report_by_url(self, url: str, localpath: str): + result = self.r.download('/report-download', url, localpath) + return result def create_stat_report(self, CreateStatReportObject: CreateStatReportObject) -> StatReportObject: diff --git a/powernad/Connector/restapi.py b/powernad/Connector/restapi.py index 26dffb5..2cb076e 100755 --- a/powernad/Connector/restapi.py +++ b/powernad/Connector/restapi.py @@ -6,6 +6,7 @@ import json import requests import jsonpickle +import shutil class RestApi: @@ -66,10 +67,28 @@ def parse_response(self, response): header = response.headers body = response.text transaction_id = self.get_transaction_id(header) - json_body = json.loads(body) - - return {'transaction_id': transaction_id, 'json': json_body} + if len(body): + json_body = json.loads(body) + else: + json_body = {} + if type(json_body) == list: + json_body.append({'transaction_id': transaction_id}) + if type(json_body) == dict: + json_body['transaction_id'] = transaction_id + return {'transaction_id': transaction_id, 'json': json_body} + else: # ex) http status 400 with {"code":11001,"message":"À߸øµÈ ÆÄ¶ó¹ÌÅÍ Çü½ÄÀÔ´Ï´Ù."} 1³âÀ» ÃʰúÇÑ ³¯Â¥¸¦ ¿äûÇÏ¸é ¹ß»ý + header = response.headers + transaction_id = self.get_transaction_id(header) + if transaction_id != "unknown": + body = response.text + if len(body): + json_body = json.loads(body) + json_keys = list(json_body.keys()) + if 'code' in json_keys and 'message' in json_keys: + json_body['transaction_id'] = transaction_id + return {'transaction_id': transaction_id, 'json': json_body} + return {} @@ -78,11 +97,11 @@ def get(self, uri, query={}): headers = self.get_header('GET', uri) try: - r = requests.get(url, headers=headers) + r = requests.get(url, headers=headers) response = self.parse_response(r) if not r.ok: print("Http status: %s" % r.status_code) - + return response['json'] except: print("failed to request") @@ -93,15 +112,15 @@ def post(self, uri, data, query={}): data_str = data headers = self.get_header('POST', uri) - try: - r = requests.post(url, data=data_str, headers=headers) - response = self.parse_response(r) - if not r.ok: - print("Http status: %s" % r.status_code) - - return response['json'] - except: - print("failed to request") + #try: + r = requests.post(url, data=data_str, headers=headers) + response = self.parse_response(r) + if not r.ok: + print("Http status: %s" % r.status_code) + + return response['json'] + #except: + # print("failed to request") def delete(self, uri, query={}): @@ -136,8 +155,12 @@ def put(self, uri, data, query={}): print("failed to request") - def download(self, url, localpath): - return None + def download(self, uri, rpt_download_url, localpath): + headers = self.get_header('GET', uri) + response = requests.get(rpt_download_url, headers=headers, stream=True) + with open(localpath, 'wb') as out_file: + shutil.copyfileobj(response.raw, out_file) + return True def null_dict(self, input_dict): real = dict() diff --git a/powernad/Object/MasterReport/RequestObject/CreateMasterReportObject.py b/powernad/Object/MasterReport/RequestObject/CreateMasterReportObject.py index 5d628fe..6db0c35 100755 --- a/powernad/Object/MasterReport/RequestObject/CreateMasterReportObject.py +++ b/powernad/Object/MasterReport/RequestObject/CreateMasterReportObject.py @@ -1,4 +1,13 @@ +from datetime import datetime +from pytz import timezone + class CreateMasterReportObject: - def __init__(self, item, fromTime): + def __init__(self, item, fromTime, timeZone='Asia/Seoul'): self.item = item - self.fromTime = fromTime \ No newline at end of file + + if fromTime is None: + self.fromTime = None + elif type(fromTime) == datetime: + self.fromTime = fromTime.replace(tzinfo=timezone(timeZone)).isoformat(timespec='seconds') + else: + raise Exception('type of fromTime should be None or datetime') \ No newline at end of file diff --git a/powernad/Object/StatReport/RequestObject/CreateStatReportObject.py b/powernad/Object/StatReport/RequestObject/CreateStatReportObject.py index 724ba40..12cb50f 100755 --- a/powernad/Object/StatReport/RequestObject/CreateStatReportObject.py +++ b/powernad/Object/StatReport/RequestObject/CreateStatReportObject.py @@ -1,5 +1,4 @@ class CreateStatReportObject: def __init__(self, reportTp, statDt): self.reportTp = reportTp - self.statDt = statDt - #self.customerId = 1109868 \ No newline at end of file + self.statDt = statDt \ No newline at end of file diff --git a/powernad/Object/StatReport/StatReportObject.py b/powernad/Object/StatReport/StatReportObject.py index 584ec9b..7a7f4a4 100755 --- a/powernad/Object/StatReport/StatReportObject.py +++ b/powernad/Object/StatReport/StatReportObject.py @@ -13,4 +13,7 @@ def __init__(self, json_def): self.reportTp = None if 'reportTp' not in s else s['reportTp'] self.statDt = None if 'statDt' not in s else s['statDt'] self.status = None if 'status' not in s else s['status'] - self.updateTm = None if 'updateTm' not in s else s['updateTm'] \ No newline at end of file + self.updateTm = None if 'updateTm' not in s else s['updateTm'] + + self.code = None if 'code' not in s else s['code'] + self.message = None if 'message' not in s else s['message'] \ No newline at end of file