Skip to content
This repository was archived by the owner on Dec 8, 2023. It is now read-only.

Commit b510bd1

Browse files
authored
Merge pull request #4 from jssuzanne/endpoint_exports
Endpoint exports
2 parents 5ce86ac + 5f6966b commit b510bd1

6 files changed

Lines changed: 75 additions & 1 deletion

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ parts/
2020
sdist/
2121
var/
2222
wheels/
23+
pip-wheel-metadata/
2324
*.egg-info/
2425
.installed.cfg
2526
*.egg

alma/client.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,7 @@ def merchants(self) -> endpoints.Merchants:
6565
@property
6666
def orders(self) -> endpoints.Orders:
6767
return self._endpoint("Orders")
68+
69+
@property
70+
def exports(self) -> endpoints.Exports:
71+
return self._endpoint("Exports")

alma/endpoints/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
from .base import Base
44
from .merchants import Merchants
55
from .orders import Orders
6-
from .payments import Payments
6+
from .exports import Exports
7+
from .payments import Payments

alma/endpoints/exports.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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)

alma/entities/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@
77
from .order import Order
88
from .payment import Payment, PaymentFraudType, PaymentState
99
from .refund import Refund
10+
from .export import Export, ExportType, ExportFormat

alma/entities/export.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from enum import Enum
2+
3+
from . import Base
4+
5+
6+
class ExportType(Enum):
7+
PAYMENTS = "payments"
8+
ACCOUNTING = "accounting"
9+
ACCOUNTING_FOR_PAYOUT = "accounting_for_payout"
10+
11+
12+
class ExportFormat(Enum):
13+
CSV = "csv"
14+
PDF = "pdf"
15+
XLSX = "xlsx"
16+
17+
18+
class Export(Base):
19+
pass

0 commit comments

Comments
 (0)