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
# Report finished successfully. if not (hasattr(rptReqInfo, 'GeneratedReportId')): sys.stderr.write("Report status request does not contain", "the expected 'GeneratedReportId'") sys.exit(4) rptId = rptReqInfo.GeneratedReportId print("Report completed with ID", rptId) break if rptId is None: sys.stderr.write("Report timed out after 5 minutes.") sys.exit(5) # Fetch and process the report. rptResp = conn.get_report( ReportId = rptId ) # Report is bytes, not str. # Have to be careful converting because weird chars like degree sign. rptTxt = rptResp.decode(errors='ignore') fldNames = None # Lines terminated with "\r\n". # Hopefully that is consistent across all platforms. for rec in rptTxt.split(sep="\r\n"): # print(repr(rec), '|') # Since using end-of-line as *separator*, will get trailing empty line. # Ignore it. if len(rec) < 2: continue
SecretKey = sys.argv[4] print 'MarketplaceID is ', MarketPlaceID print 'Merchant is ', Merchant print 'AccessKey is ', AccessKeyID print 'Secret key is ', SecretKey conn = MWSConnection(AccessKeyID,SecretKey) conn.SellerId = Merchant conn.Merchant = Merchant conn.MarketplaceId = MarketPlaceID myId = '1432456045' # sample one conn.get_report(ReportId=myId) # sample two conn.get_report(myId) # sample three conn.get_report(myId,) # sample four conn.get_report(1432456045) # sample five conn.get_report('1432456045')