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

Commit 65f8581

Browse files
authored
Merge pull request #12 from alma/add-support-for-py35+
Handle client for Python3.5+ rather than Python3.7+
2 parents 3d6cad0 + 819a0f2 commit 65f8581

11 files changed

Lines changed: 103 additions & 33 deletions

File tree

.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ cache: pip
44
install: pip install tox tox-travis
55
script: tox -v
66
python:
7+
- 3.5
8+
- 3.6
79
- 3.7
810
- 3.8
911
matrix:

alma/client.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ def __init__(self, api_key, **options):
3131
raise TypeError("`api_root` option must be a dict or a string")
3232

3333
if options["mode"] not in (ApiModes.LIVE, ApiModes.TEST):
34-
raise ValueError(f"`mode` option must be one of ({ApiModes.LIVE}, {ApiModes.TEST})")
34+
raise ValueError(
35+
"`mode` option must be one of ({LIVE}, {TEST})".format(
36+
LIVE=ApiModes.LIVE, TEST=ApiModes.TEST
37+
)
38+
)
3539

3640
self.context = Context(api_key, options)
3741

alma/context.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ def mode(self):
2020
def url_for(self, path):
2121
root = self.api_root[self.mode].rstrip("/")
2222

23-
return f"{root}/{path.lstrip('/')}"
23+
return "{root}/{path}".format(root=root, path=path.lstrip("/"))
2424

2525
def add_user_agent_component(self, component, version):
26-
self.user_agent_components.append(f"{component}/{version}")
26+
self.user_agent_components.append(
27+
"{component}/{version}".format(component=component, version=version)
28+
)
2729

2830
def user_agent_string(self):
2931
return "; ".join(self.user_agent_components[::-1])

alma/endpoints/exports.py

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,42 @@
1-
from functools import partial
21
from datetime import datetime
2+
from functools import partial
33
from io import BytesIO
44

5-
from . import Base
6-
from ..entities import Export, ExportType, ExportFormat
5+
from ..entities import Export, ExportFormat, ExportType
76
from ..paginated_results import PaginatedResults
7+
from . import Base
88

99

1010
class Exports(Base):
1111
EXPORTS_PATH = "/v1/data-exports"
1212

13-
def create(self, export_type: ExportType, payout_id: str = None,
14-
start: datetime = None, end: datetime = None):
13+
def create(
14+
self,
15+
export_type: ExportType,
16+
payout_id: str = None,
17+
start: datetime = None,
18+
end: datetime = None,
19+
):
1520
""" Create a new export"""
1621
data = {"type": export_type.value}
1722
if payout_id:
18-
data['payout'] = payout_id
23+
data["payout"] = payout_id
1924

2025
if start:
21-
data['start'] = int(start.timestamp())
26+
data["start"] = int(start.timestamp())
2227

2328
if end:
24-
data['end'] = int(end.timestamp())
29+
data["end"] = int(end.timestamp())
2530

2631
response = self.request(self.EXPORTS_PATH).set_body(data).post()
2732
return Export(response.json)
2833

2934
def get_file(self, export_id: str, export_format: ExportFormat = None):
30-
request = self.request(f"{self.EXPORTS_PATH}/{export_id}")
35+
request = self.request(
36+
"{EXPORTS_PATH}/{export_id}".format(
37+
EXPORTS_PATH=self.EXPORTS_PATH, export_id=export_id
38+
)
39+
)
3140
if export_format:
3241
request.set_query_params({"format": export_format.value})
3342

@@ -44,5 +53,9 @@ def fetch(self, export_id: str = None, limit: int = 5, **filters):
4453
if export_id is None:
4554
return self.fetch_all(limit=limit, **filters)
4655
else:
47-
response = self.request(f"{self.EXPORTS_PATH}/{export_id}").get()
56+
response = self.request(
57+
"{EXPORTS_PATH}/{export_id}".format(
58+
EXPORTS_PATH=self.EXPORTS_PATH, export_id=export_id
59+
)
60+
).get()
4861
return Export(response.json)

alma/endpoints/orders.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,13 @@ class Orders(Base):
99
ORDERS_PATH = "/v1/orders"
1010

1111
def update(self, order_id, data):
12-
response = self.request(f"{self.ORDERS_PATH}/{order_id}").set_body(data).put()
12+
response = (
13+
self.request(
14+
"{ORDERS_PATH}/{order_id}".format(ORDERS_PATH=self.ORDERS_PATH, order_id=order_id)
15+
)
16+
.set_body(data)
17+
.put()
18+
)
1319
return Order(response.json)
1420

1521
def fetch_all(self, limit: int = 20, starting_after: str = None, **filters):
@@ -31,5 +37,7 @@ def fetch(self, order_id: str = None, limit: int = 20, **filters):
3137
if order_id is None:
3238
return self.fetch_all(limit=limit, **filters)
3339
else:
34-
response = self.request(f"{self.ORDERS_PATH}/{order_id}").get()
40+
response = self.request(
41+
"{ORDERS_PATH}/{order_id}".format(ORDERS_PATH=self.ORDERS_PATH, order_id=order_id)
42+
).get()
3543
return Order(response.json)

alma/endpoints/payments.py

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ class Payments(Base):
1010
PAYMENTS_PATH = "/v1/payments"
1111

1212
def eligibility(self, order_data):
13-
response = self.request(f"{self.PAYMENTS_PATH}/eligibility").set_body(order_data).post()
13+
response = (
14+
self.request("{PAYMENTS_PATH}/eligibility".format(PAYMENTS_PATH=self.PAYMENTS_PATH))
15+
.set_body(order_data)
16+
.post()
17+
)
1418

1519
return Eligibility(response.json)
1620

@@ -34,11 +38,19 @@ def fetch(self, payment_id=None, limit=20, states=None):
3438
if payment_id is None:
3539
return self.fetch_all(limit=limit, states=states)
3640
else:
37-
response = self.request(f"{self.PAYMENTS_PATH}/{payment_id}").get()
41+
response = self.request(
42+
"{PAYMENTS_PATH}/{payment_id}".format(
43+
PAYMENTS_PATH=self.PAYMENTS_PATH, payment_id=payment_id
44+
)
45+
).get()
3846
return Payment(response.json)
3947

4048
def flag_as_potential_fraud(self, payment_id, reason=None):
41-
request = self.request(f"{self.PAYMENTS_PATH}/{payment_id}/potential-fraud")
49+
request = self.request(
50+
"{PAYMENTS_PATH}/{payment_id}/potential-fraud".format(
51+
PAYMENTS_PATH=self.PAYMENTS_PATH, payment_id=payment_id
52+
)
53+
)
4254

4355
if reason:
4456
request.set_body({"reason": reason})
@@ -59,7 +71,11 @@ def add_orders_to(self, payment_id, order_data: Union[List[dict], dict]) -> List
5971
order_data = [order_data]
6072

6173
response = (
62-
self.request(f"{self.PAYMENTS_PATH}/{payment_id}/orders")
74+
self.request(
75+
"{PAYMENTS_PATH}/{payment_id}/orders".format(
76+
PAYMENTS_PATH=self.PAYMENTS_PATH, payment_id=payment_id
77+
)
78+
)
6379
.set_body({"orders": order_data})
6480
.put()
6581
)
@@ -79,15 +95,23 @@ def set_orders_for(self, payment_id, order_data: Union[List[dict], dict]) -> Lis
7995
order_data = [order_data]
8096

8197
response = (
82-
self.request(f"{self.PAYMENTS_PATH}/{payment_id}/orders")
98+
self.request(
99+
"{PAYMENTS_PATH}/{payment_id}/orders".format(
100+
PAYMENTS_PATH=self.PAYMENTS_PATH, payment_id=payment_id
101+
)
102+
)
83103
.set_body({"orders": order_data})
84104
.post()
85105
)
86106

87107
return [Order(o) for o in response.json]
88108

89109
def get_orders_for(self, payment_id) -> List[Order]:
90-
response = self.request(f"{self.PAYMENTS_PATH}/{payment_id}/orders").get()
110+
response = self.request(
111+
"{PAYMENTS_PATH}/{payment_id}/orders".format(
112+
PAYMENTS_PATH=self.PAYMENTS_PATH, payment_id=payment_id
113+
)
114+
).get()
91115
return [Order(o) for o in response.json]
92116

93117
def refund(self, payment_id: str, amount: int, full_refund: bool = False, **params) -> Payment:
@@ -102,7 +126,11 @@ def refund(self, payment_id: str, amount: int, full_refund: bool = False, **para
102126
Default: false.
103127
:return: Updated payment object
104128
"""
105-
req = self.request(f"{self.PAYMENTS_PATH}/{payment_id}/refund")
129+
req = self.request(
130+
"{PAYMENTS_PATH}/{payment_id}/refund".format(
131+
PAYMENTS_PATH=self.PAYMENTS_PATH, payment_id=payment_id
132+
)
133+
)
106134

107135
refund_params = {}
108136
if not full_refund:
@@ -120,6 +148,10 @@ def send_sms(self, payment_id: str):
120148
Will raise RequestError if the SMS API is not activated on your account or
121149
in case of any other error, otherwise returns True.
122150
"""
123-
self.request(f"{self.PAYMENTS_PATH}/{payment_id}/send-sms").post()
151+
self.request(
152+
"{PAYMENTS_PATH}/{payment_id}/send-sms".format(
153+
PAYMENTS_PATH=self.PAYMENTS_PATH, payment_id=payment_id
154+
)
155+
).post()
124156

125157
return True

alma/request.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ def __init__(self, context, url):
1717

1818
self.headers = {
1919
"User-Agent": self.context.user_agent_string(),
20-
"Authorization": f"Alma-Auth {self.context.api_key}",
20+
"Authorization": "Alma-Auth {context_api_key}".format(
21+
context_api_key=self.context.api_key
22+
),
2123
"Accept": "application/json",
2224
}
2325
self.params = {}

dev-requirements.txt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,3 @@ black
22
flake8
33
isort
44
mypy
5-
pytest<5.4
6-
pytest-cache
7-
pytest-cov
8-
pytest-sugar
9-
pytest-xdist
10-
tox

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
name="alma-client",
1515
version="1.0.2.dev0",
1616
description="Python API client for the Alma Installments API",
17-
long_description=f"{README}\n\n{CHANGELOG}",
17+
long_description="{README}\n\n{CHANGELOG}".format(README=README, CHANGELOG=CHANGELOG),
1818
long_description_content_type="text/markdown",
1919
url="https://github.com/alma/alma-python-client",
2020
author="Alma",

test-requirements.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
pytest<5.4
2+
pytest-cache
3+
pytest-cov
4+
pytest-sugar
5+
pytest-xdist
6+
tox

0 commit comments

Comments
 (0)