|
| 1 | +from functools import partial |
| 2 | +from datetime import datetime |
| 3 | +from io import BytesIO |
| 4 | + |
| 5 | +from . import Base |
| 6 | +from ..entities import Export, ExportType, ExportFormat |
| 7 | +from ..paginated_results import PaginatedResults |
| 8 | + |
| 9 | + |
| 10 | +class Exports(Base): |
| 11 | + EXPORTS_PATH = "/v1/data-exports" |
| 12 | + |
| 13 | + def create(self, export_type: ExportType, payout_id: str = None, |
| 14 | + start: datetime = None, end: datetime = None): |
| 15 | + """ Create a new export""" |
| 16 | + data = {"type": export_type.value} |
| 17 | + if payout_id: |
| 18 | + data['payout'] = payout_id |
| 19 | + |
| 20 | + if start: |
| 21 | + data['start'] = int(start.timestamp()) |
| 22 | + |
| 23 | + if end: |
| 24 | + data['end'] = int(end.timestamp()) |
| 25 | + |
| 26 | + response = self.request(self.EXPORTS_PATH).set_body(data).post() |
| 27 | + return Export(response.json) |
| 28 | + |
| 29 | + def get_file(self, export_id: str, export_format: ExportFormat = None): |
| 30 | + request = self.request(f"{self.EXPORTS_PATH}/{export_id}") |
| 31 | + if export_format: |
| 32 | + request.set_query_params({"format": export_format.value}) |
| 33 | + |
| 34 | + response = request.get() |
| 35 | + return BytesIO(response.resp.content) |
| 36 | + |
| 37 | + def fetch_all(self, limit: int = 5, **filters): |
| 38 | + args = {"limit": limit, **filters} |
| 39 | + response = self.request(self.EXPORTS_PATH).set_query_params(args).get() |
| 40 | + next_page = partial(self.fetch_all, limit=limit, **filters) |
| 41 | + return PaginatedResults(response.json, Export, next_page) |
| 42 | + |
| 43 | + def fetch(self, export_id: str = None, limit: int = 5, **filters): |
| 44 | + if export_id is None: |
| 45 | + return self.fetch_all(limit=limit, **filters) |
| 46 | + else: |
| 47 | + response = self.request(f"{self.EXPORTS_PATH}/{export_id}").get() |
| 48 | + return Export(response.json) |
0 commit comments