reqStat = rptReq.RequestReportResult.ReportRequestInfo.ReportProcessingStatus print("Rpt Request ID:", reqId, "Status:", reqStat) if reqStat != '_SUBMITTED_': sys.stderr.write("Received unexpected status when requesting report:", reqStat) sys.stderr.write("Expected '_SUBMITTED_'") sys.exit(1) # Wait until report is ready. # Avoid over-polling that would trigger throttling. # Poll twice a minute for 5 minutes. rptId = None for x in range(10): time.sleep(30) rptStatResp = conn.get_report_request_list( ReportRequestIdList = [reqId] ) rptReqInfo = rptStatResp.GetReportRequestListResult.ReportRequestInfo[0] if not (hasattr(rptReqInfo, 'ReportProcessingStatus')): sys.stderr.write("Report status request does not contain", "the expected 'ReportProcessingStatus'") sys.exit(2) rptStat = rptReqInfo.ReportProcessingStatus # Report still running. Continue to wait. if rptStat in ('_SUBMITTED_', '_IN_PROGRESS_'): print("Report still running with status", rptStat) continue # Report finished with an error or has an unknown status. if rptStat != '_DONE_':
class Build(object): def __init__(self, ReportType): self.simple = SIMPLE self.shack = SHACK self.mws = MWSConnection(Merchant=self.simple, aws_access_key_id=ID, aws_secret_access_key=SECRET) self.ProcessingStatus = None # self.ReportType = '_GET_FBA_MYI_ALL_INVENTORY_DATA_' self.ReportType = ReportType self.Report = None self.GeneratedReportId = None self.hasNext = False self.nextToken = None self.ReportRequestList = None self.ReportList = None self.ReportRequestId = None def get_report(self): # Step 1 request report response = self.mws.request_report(MarketplaceId=self.shack, ReportType=self.ReportType) # Step 2 Get ReportRequestId self.ReportRequestId = response.RequestReportResult.\ ReportRequestInfo.ReportRequestId # Step 3 Get GetReportRequestList, Get report processing status # Wait untill Done while self.ProcessingStatus != '_DONE_' and \ self.ProcessingStatus != '_CANCELLED_': self.ReportRequestList = self.mws.get_report_request_list( ReportRequestIdList=[self.ReportRequestId]) self.ProcessingStatus = self.ReportRequestList.\ GetReportRequestListResult.ReportRequestInfo[0].\ ReportProcessingStatus print self.ProcessingStatus if self.ProcessingStatus == '_SUBMITTED_': time.sleep(15) # Step 4 - Get Generated Report Id if self.ProcessingStatus == '_CANCELLED_': self.ReportList = self.mws.get_report_list( ReportTypeList=[self.ReportType]) for item in self.ReportList.GetReportListResult.ReportInfo: self.ReportRequestId = item.ReportRequestId self.ReportRequestList = self.mws.get_report_request_list( ReportRequestIdList=[self.ReportRequestId]) self.GeneratedReportId = self.ReportRequestList.\ GetReportRequestListResult.\ ReportRequestInfo[0].GeneratedReportId break else: self.GeneratedReportId = self.ReportRequestList.\ GetReportRequestListResult.ReportRequestInfo[0].\ GeneratedReportId # Step7 - Get Report self.Report = self.mws.get_report(ReportId=self.GeneratedReportId) # Step 8 - Process Report and save it as csv def write_report_data(self, name): if self.Report is not None: conn = S3Connection(AWSACCESS, AWSSECRET) bucket = conn.get_bucket('invntry-rprt') key = Key(bucket) key.key = '{0}_report.txt'.format(name) key.set_contents_from_string(self.Report) else: return "Error, No Report Found! Please get_inventory_report First" return