PYTHOMATION / adobe_analytics

Pythonic wrapper for the Adobe Analytics API.
MIT License
35 stars 17 forks source link

DataWarehouse reports delivered to FTP throws Exception on completion #12

Open Canas opened 6 years ago

Canas commented 6 years ago

The Report API supports Data Warehouse delivery to FTP. This works well with the package since I can just pass the FTP config as kwargs:

report_definition = ReportDefinition(
    dimensions="page",
    metrics="pageviews",
    date_from="2018-08-25",
    date_to="2018-08-25",
    source="warehouse",
    ftp=dict(host="HOST", port=21, directory="PATH", 
             username="USER", password="PASS", filename="FILE")
)

but once the delivery completes the library throws the following exception.

---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<timed exec> in <module>()

~/Repositories/adobe_analytics/adobe_analytics/reports/suite.py in download(self, obj)
     16     def download(self, obj):
     17         """ obj can be ReportDefinition, report_id (int or float) """
---> 18         return self._downloader.download(obj)
     19 
     20     def queue(self, definition):

~/Repositories/adobe_analytics/adobe_analytics/reports/report_downloader.py in download(self, obj)
     18     def download(self, obj):
     19         report_id = self._to_report_id(obj)
---> 20         first_response = self.get_report(report_id)
     21         raw_responses = [first_response]
     22 

~/Programs/miniconda3/envs/f2/lib/python3.6/site-packages/retrying.py in wrapped_f(*args, **kw)
     47             @six.wraps(f)
     48             def wrapped_f(*args, **kw):
---> 49                 return Retrying(*dargs, **dkw).call(f, *args, **kw)
     50 
     51             return wrapped_f

~/Programs/miniconda3/envs/f2/lib/python3.6/site-packages/retrying.py in call(self, fn, *args, **kwargs)
    204 
    205             if not self.should_reject(attempt):
--> 206                 return attempt.get(self._wrap_exception)
    207 
    208             delay_since_first_attempt_ms = int(round(time.time() * 1000)) - start_time

~/Programs/miniconda3/envs/f2/lib/python3.6/site-packages/retrying.py in get(self, wrap_exception)
    245                 raise RetryError(self)
    246             else:
--> 247                 six.reraise(self.value[0], self.value[1], self.value[2])
    248         else:
    249             return self.value

~/Programs/miniconda3/envs/f2/lib/python3.6/site-packages/six.py in reraise(tp, value, tb)
    691             if value.__traceback__ is not tb:
    692                 raise value.with_traceback(tb)
--> 693             raise value
    694         finally:
    695             value = None

~/Programs/miniconda3/envs/f2/lib/python3.6/site-packages/retrying.py in call(self, fn, *args, **kwargs)
    198         while True:
    199             try:
--> 200                 attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
    201             except:
    202                 tb = sys.exc_info()

~/Repositories/adobe_analytics/adobe_analytics/reports/report_downloader.py in get_report(self, report_id, page_number)
     62             data={
     63                 "reportID": report_id,
---> 64                 "page": page_number
     65             }
     66         )

~/Programs/miniconda3/envs/f2/lib/python3.6/site-packages/retrying.py in wrapped_f(*args, **kw)
     47             @six.wraps(f)
     48             def wrapped_f(*args, **kw):
---> 49                 return Retrying(*dargs, **dkw).call(f, *args, **kw)
     50 
     51             return wrapped_f

~/Programs/miniconda3/envs/f2/lib/python3.6/site-packages/retrying.py in call(self, fn, *args, **kwargs)
    210                 if not self._wrap_exception and attempt.has_exception:
    211                     # get() on an attempt with an exception should cause it to be raised, but raise just in case
--> 212                     raise attempt.get()
    213                 else:
    214                     raise RetryError(attempt)

~/Programs/miniconda3/envs/f2/lib/python3.6/site-packages/retrying.py in get(self, wrap_exception)
    245                 raise RetryError(self)
    246             else:
--> 247                 six.reraise(self.value[0], self.value[1], self.value[2])
    248         else:
    249             return self.value

~/Programs/miniconda3/envs/f2/lib/python3.6/site-packages/six.py in reraise(tp, value, tb)
    691             if value.__traceback__ is not tb:
    692                 raise value.with_traceback(tb)
--> 693             raise value
    694         finally:
    695             value = None

~/Programs/miniconda3/envs/f2/lib/python3.6/site-packages/retrying.py in call(self, fn, *args, **kwargs)
    198         while True:
    199             try:
--> 200                 attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
    201             except:
    202                 tb = sys.exc_info()

~/Repositories/adobe_analytics/adobe_analytics/client.py in request(self, api, method, data)
     55         logger.debug("Response: {}".format(json_response))
     56         if isinstance(json_response, dict) and ("error" in json_response):
---> 57             self.raise_error(json_response)
     58         return json_response
     59 

~/Repositories/adobe_analytics/adobe_analytics/client.py in raise_error(response)
     87             raise FileNotFoundError(error_description)
     88         else:
---> 89             raise Exception(error_description)
     90 
     91     def __repr__(self):

Exception: Delivery complete

As the Exception says, the delivery is fine, and the file does show in the FTP server, but this shouldn't be an Exception.

SaturnFromTitan commented 6 years ago

Yeah, that obviously shouldn't happen. You're very welcome to submit a PR that fixes this.