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_':
Esempio n. 2
0
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