Skip to content

Instantly share code, notes, and snippets.

@alexstrat
Created June 22, 2015 20:07
Show Gist options
  • Save alexstrat/99884ae6e93fe36c2821 to your computer and use it in GitHub Desktop.
Save alexstrat/99884ae6e93fe36c2821 to your computer and use it in GitHub Desktop.
Monkey pathc FB ads SDK to allow async_report
# Monkeypatch AdAccount to have async report support
import facebookads
import time
class ReportStatsAsyncJob(facebookads.objects.AbstractCrudObject):
class Field(object):
id = "id"
async_status = "async_status"
async_percent_completion = "async_percent_completion"
@classmethod
def get_endpoint(cls):
return "reportstats"
def is_completed(self):
self.remote_read(fields=["async_status","async_percent_completion"])
return (self["async_status"] == "Job Completed") & (self["async_percent_completion"] == 100)
def poll_is_completed(self):
while(not self.is_completed()):
time.sleep(0.2)
return True
class MonkeyPatchAdAccount(facebookads.objects.AdAccount):
def get_async_report_stats(self, params=None):
job = ReportStatsAsyncJob(
parent_id=self.get_id(),
api=self.get_api_assured()
)
job.remote_create(params=params)
if job.poll_is_completed():
return self.get_report_stats(params={"report_run_id":job.get_id()})
facebookads.objects.AdAccount = MonkeyPatchAdAccount
@m-vdb
Copy link

m-vdb commented Jun 22, 2015

did you consider doing a PR on the FB repo?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment