nomba-python 0.2.0__py3-none-any.whl → 0.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
nomba/http.py CHANGED
@@ -69,7 +69,14 @@ class NombaClient:
69
69
  self._token_expires_at: float = 0.0
70
70
  self._token_lock = threading.Lock()
71
71
 
72
- self._http = httpx.Client(base_url=self.base_url, timeout=timeout)
72
+ self._http = httpx.Client(base_url=self.base_url, timeout=timeout, verify= not sandbox)
73
+
74
+ if sandbox:
75
+ import warnings
76
+ warnings.warn(
77
+ "Sandbox mode enabled: SSL verification disabled. Do not use in production.",
78
+ UserWarning
79
+ )
73
80
 
74
81
  # -- auth -----------------------------------------------------------
75
82
 
@@ -89,7 +96,7 @@ class NombaClient:
89
96
  )
90
97
  except httpx.HTTPError as exc:
91
98
  raise NombaAuthError(f"Failed to reach Nomba auth endpoint: {exc}") from exc
92
-
99
+
93
100
  if response.status_code >= 400:
94
101
  raise NombaAuthError(
95
102
  "Failed to obtain access token",
@@ -106,10 +113,10 @@ class NombaClient:
106
113
  response_body=body,
107
114
  )
108
115
 
109
- expires_in = data.get("expires_in", 3600)
116
+ expires_in = data.get("expires_in", 3000)
110
117
  self._access_token = token
111
118
  # refresh a little early to avoid edge-of-expiry failures
112
- self._token_expires_at = time.monotonic() + max(int(expires_in) - 60, 0)
119
+ self._token_expires_at = time.monotonic() + max(int(expires_in) - 50, 0)
113
120
 
114
121
  def _ensure_token(self) -> str:
115
122
  # fast path: token already valid, no lock needed
@@ -269,7 +276,14 @@ class AsyncNombaClient:
269
276
  self._token_expires_at: float = 0.0
270
277
  self._token_lock = asyncio.Lock()
271
278
 
272
- self._http = httpx.AsyncClient(base_url=self.base_url, timeout=timeout)
279
+ self._http = httpx.AsyncClient(base_url=self.base_url, timeout=timeout, verify= not sandbox )
280
+
281
+ if sandbox:
282
+ import warnings
283
+ warnings.warn(
284
+ "Sandbox mode enabled: SSL verification disabled. Do not use in production.",
285
+ UserWarning
286
+ )
273
287
 
274
288
  # -- auth -----------------------------------------------------------
275
289
 
@@ -306,9 +320,9 @@ class AsyncNombaClient:
306
320
  response_body=body,
307
321
  )
308
322
 
309
- expires_in = data.get("expires_in", 3600)
323
+ expires_in = data.get("expires_in", 3000)
310
324
  self._access_token = token
311
- self._token_expires_at = time.monotonic() + max(int(expires_in) - 60, 0)
325
+ self._token_expires_at = time.monotonic() + max(int(expires_in) - 50, 0)
312
326
 
313
327
  async def _ensure_token(self) -> str:
314
328
  if self._access_token is not None and time.monotonic() < self._token_expires_at:
@@ -2,7 +2,6 @@
2
2
  # regenerate via scripts/generate_resources.py instead.
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
5
 
7
6
  from ..http import AsyncNombaClient, NombaClient
8
7
  from ..validation import validate_body
@@ -23,7 +22,7 @@ class Accounts:
23
22
 
24
23
  You can use this endpoints to fetch all the accounts tied to a business. Accounts are sorted by date, with the most recently-created account appearing first.
25
24
  """
26
- path = f"/v1/accounts"
25
+ path = "/v1/accounts"
27
26
  params: dict[str, object] = {}
28
27
  if limit is not None:
29
28
  params["limit"] = limit
@@ -61,7 +60,7 @@ class Accounts:
61
60
  callbackUrl: Callback url
62
61
  expiryDate: Expiry date
63
62
  """
64
- path = f"/v1/accounts"
63
+ path = "/v1/accounts"
65
64
  params = None
66
65
  body: dict[str, object] = {}
67
66
  body["accountRef"] = account_ref
@@ -91,7 +90,7 @@ class Accounts:
91
90
 
92
91
  You can use this endpoint to get details of a sub account.
93
92
  """
94
- path = f"/v1/accounts/sub-account-details"
93
+ path = "/v1/accounts/sub-account-details"
95
94
  params: dict[str, object] = {}
96
95
  if account_id is not None:
97
96
  params["accountId"] = account_id
@@ -107,7 +106,7 @@ class Accounts:
107
106
 
108
107
  You can use this endpoint to get details of the parent account.
109
108
  """
110
- path = f"/v1/accounts/parent"
109
+ path = "/v1/accounts/parent"
111
110
  params = None
112
111
  return self._client.get(path, params=params) # type: ignore[return-value]
113
112
 
@@ -131,7 +130,7 @@ class Accounts:
131
130
 
132
131
  You can use this endpoint to get the balance of the parent account.
133
132
  """
134
- path = f"/v1/accounts/balance"
133
+ path = "/v1/accounts/balance"
135
134
  params = None
136
135
  return self._client.get(path, params=params) # type: ignore[return-value]
137
136
 
@@ -208,7 +207,7 @@ class Accounts:
208
207
 
209
208
  You can use this endpoint to fetch terminals linked to the parent account.
210
209
  """
211
- path = f"/v1/accounts/terminals"
210
+ path = "/v1/accounts/terminals"
212
211
  params: dict[str, object] = {}
213
212
  if limit is not None:
214
213
  params["limit"] = limit
@@ -295,7 +294,7 @@ class AsyncAccounts:
295
294
 
296
295
  You can use this endpoints to fetch all the accounts tied to a business. Accounts are sorted by date, with the most recently-created account appearing first.
297
296
  """
298
- path = f"/v1/accounts"
297
+ path = "/v1/accounts"
299
298
  params: dict[str, object] = {}
300
299
  if limit is not None:
301
300
  params["limit"] = limit
@@ -333,7 +332,7 @@ class AsyncAccounts:
333
332
  callbackUrl: Callback url
334
333
  expiryDate: Expiry date
335
334
  """
336
- path = f"/v1/accounts"
335
+ path = "/v1/accounts"
337
336
  params = None
338
337
  body: dict[str, object] = {}
339
338
  body["accountRef"] = account_ref
@@ -363,7 +362,7 @@ class AsyncAccounts:
363
362
 
364
363
  You can use this endpoint to get details of a sub account.
365
364
  """
366
- path = f"/v1/accounts/sub-account-details"
365
+ path = "/v1/accounts/sub-account-details"
367
366
  params: dict[str, object] = {}
368
367
  if account_id is not None:
369
368
  params["accountId"] = account_id
@@ -379,7 +378,7 @@ class AsyncAccounts:
379
378
 
380
379
  You can use this endpoint to get details of the parent account.
381
380
  """
382
- path = f"/v1/accounts/parent"
381
+ path = "/v1/accounts/parent"
383
382
  params = None
384
383
  return await self._client.get(path, params=params) # type: ignore[return-value]
385
384
 
@@ -403,7 +402,7 @@ class AsyncAccounts:
403
402
 
404
403
  You can use this endpoint to get the balance of the parent account.
405
404
  """
406
- path = f"/v1/accounts/balance"
405
+ path = "/v1/accounts/balance"
407
406
  params = None
408
407
  return await self._client.get(path, params=params) # type: ignore[return-value]
409
408
 
@@ -480,7 +479,7 @@ class AsyncAccounts:
480
479
 
481
480
  You can use this endpoint to fetch terminals linked to the parent account.
482
481
  """
483
- path = f"/v1/accounts/terminals"
482
+ path = "/v1/accounts/terminals"
484
483
  params: dict[str, object] = {}
485
484
  if limit is not None:
486
485
  params["limit"] = limit
@@ -2,7 +2,6 @@
2
2
  # regenerate via scripts/generate_resources.py instead.
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
5
 
7
6
  from ..http import AsyncNombaClient, NombaClient
8
7
  from ..validation import validate_body
@@ -40,7 +39,7 @@ class AirtimeData:
40
39
  This is an idempotency key and must be unique per transaction.
41
40
  senderName: A name to describe the sender of the airtime
42
41
  """
43
- path = f"/v1/bill/topup"
42
+ path = "/v1/bill/topup"
44
43
  params = None
45
44
  body: dict[str, object] = {}
46
45
  body["amount"] = amount
@@ -94,7 +93,7 @@ class AirtimeData:
94
93
  merchantTxRef (required): Merchant Transaction Identifier reference (Unique to merchant)
95
94
  senderName: A name to describe the sender of the data
96
95
  """
97
- path = f"/v1/bill/data"
96
+ path = "/v1/bill/data"
98
97
  params = None
99
98
  body: dict[str, object] = {}
100
99
  body["amount"] = amount
@@ -166,7 +165,7 @@ class AsyncAirtimeData:
166
165
  This is an idempotency key and must be unique per transaction.
167
166
  senderName: A name to describe the sender of the airtime
168
167
  """
169
- path = f"/v1/bill/topup"
168
+ path = "/v1/bill/topup"
170
169
  params = None
171
170
  body: dict[str, object] = {}
172
171
  body["amount"] = amount
@@ -220,7 +219,7 @@ class AsyncAirtimeData:
220
219
  merchantTxRef (required): Merchant Transaction Identifier reference (Unique to merchant)
221
220
  senderName: A name to describe the sender of the data
222
221
  """
223
- path = f"/v1/bill/data"
222
+ path = "/v1/bill/data"
224
223
  params = None
225
224
  body: dict[str, object] = {}
226
225
  body["amount"] = amount
@@ -2,7 +2,6 @@
2
2
  # regenerate via scripts/generate_resources.py instead.
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
5
 
7
6
  from ..http import AsyncNombaClient, NombaClient
8
7
  from ..validation import validate_body
@@ -21,7 +20,7 @@ class Betting:
21
20
 
22
21
  You can use this endpoint to fetch betting providers
23
22
  """
24
- path = f"/v1/bill/betting/providers"
23
+ path = "/v1/bill/betting/providers"
25
24
  params = None
26
25
  return self._client.get(path, params=params) # type: ignore[return-value]
27
26
 
@@ -31,7 +30,7 @@ class Betting:
31
30
 
32
31
  This endpoint is for fetching customer information data from a bet vending provider
33
32
  """
34
- path = f"/v1/bill/betting/lookup"
33
+ path = "/v1/bill/betting/lookup"
35
34
  params: dict[str, object] = {}
36
35
  if provider_id is not None:
37
36
  params["providerId"] = provider_id
@@ -53,7 +52,7 @@ class Betting:
53
52
  amount:
54
53
  customerId:
55
54
  """
56
- path = f"/v1/bill/betting"
55
+ path = "/v1/bill/betting"
57
56
  params = None
58
57
  body: dict[str, object] = {}
59
58
  if betting_provider is not None:
@@ -119,7 +118,7 @@ class AsyncBetting:
119
118
 
120
119
  You can use this endpoint to fetch betting providers
121
120
  """
122
- path = f"/v1/bill/betting/providers"
121
+ path = "/v1/bill/betting/providers"
123
122
  params = None
124
123
  return await self._client.get(path, params=params) # type: ignore[return-value]
125
124
 
@@ -129,7 +128,7 @@ class AsyncBetting:
129
128
 
130
129
  This endpoint is for fetching customer information data from a bet vending provider
131
130
  """
132
- path = f"/v1/bill/betting/lookup"
131
+ path = "/v1/bill/betting/lookup"
133
132
  params: dict[str, object] = {}
134
133
  if provider_id is not None:
135
134
  params["providerId"] = provider_id
@@ -151,7 +150,7 @@ class AsyncBetting:
151
150
  amount:
152
151
  customerId:
153
152
  """
154
- path = f"/v1/bill/betting"
153
+ path = "/v1/bill/betting"
155
154
  params = None
156
155
  body: dict[str, object] = {}
157
156
  if betting_provider is not None:
@@ -2,7 +2,6 @@
2
2
  # regenerate via scripts/generate_resources.py instead.
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
5
 
7
6
  from ..http import AsyncNombaClient, NombaClient
8
7
  from ..validation import validate_body
@@ -21,7 +20,7 @@ class CableTv:
21
20
 
22
21
  This endpoint is for fetching customer information data
23
22
  """
24
- path = f"/v1/bill/cabletv/lookup"
23
+ path = "/v1/bill/cabletv/lookup"
25
24
  params: dict[str, object] = {}
26
25
  if customer_id is not None:
27
26
  params["customerId"] = customer_id
@@ -42,7 +41,7 @@ class CableTv:
42
41
  amount:
43
42
  customerId:
44
43
  """
45
- path = f"/v1/bill/cabletv"
44
+ path = "/v1/bill/cabletv"
46
45
  params = None
47
46
  body: dict[str, object] = {}
48
47
  if cable_tv_type is not None:
@@ -103,7 +102,7 @@ class AsyncCableTv:
103
102
 
104
103
  This endpoint is for fetching customer information data
105
104
  """
106
- path = f"/v1/bill/cabletv/lookup"
105
+ path = "/v1/bill/cabletv/lookup"
107
106
  params: dict[str, object] = {}
108
107
  if customer_id is not None:
109
108
  params["customerId"] = customer_id
@@ -124,7 +123,7 @@ class AsyncCableTv:
124
123
  amount:
125
124
  customerId:
126
125
  """
127
- path = f"/v1/bill/cabletv"
126
+ path = "/v1/bill/cabletv"
128
127
  params = None
129
128
  body: dict[str, object] = {}
130
129
  if cable_tv_type is not None:
nomba/resources/charge.py CHANGED
@@ -2,7 +2,6 @@
2
2
  # regenerate via scripts/generate_resources.py instead.
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
5
 
7
6
  from ..http import AsyncNombaClient, NombaClient
8
7
  from ..validation import validate_body
@@ -38,7 +37,7 @@ class Charge:
38
37
  saveCard: if true, this this user cardn will be saved for the user's future use. Note the process is not complete until the user-card verification endpoints are called to authenticate the user's phone number.
39
38
  deviceInformation:
40
39
  """
41
- path = f"/v1/checkout/checkout-card-detail"
40
+ path = "/v1/checkout/checkout-card-detail"
42
41
  params = None
43
42
  body: dict[str, object] = {}
44
43
  if card_details is not None:
@@ -66,7 +65,7 @@ class Charge:
66
65
  orderReference (required): order reference
67
66
  transactionId (required): transaction id returend when the card details were submitted
68
67
  """
69
- path = f"/v1/checkout/checkout-card-otp"
68
+ path = "/v1/checkout/checkout-card-otp"
70
69
  params = None
71
70
  body: dict[str, object] = {}
72
71
  body["otp"] = otp
@@ -85,7 +84,7 @@ class Charge:
85
84
  Body fields:
86
85
  orderReference (required): order reference
87
86
  """
88
- path = f"/v1/checkout/resend-otp"
87
+ path = "/v1/checkout/resend-otp"
89
88
  params = None
90
89
  body: dict[str, object] = {}
91
90
  body["orderReference"] = order_reference
@@ -102,7 +101,7 @@ class Charge:
102
101
  Body fields:
103
102
  orderReference (required): order reference
104
103
  """
105
- path = f"/v1/checkout/confirm-transaction-receipt"
104
+ path = "/v1/checkout/confirm-transaction-receipt"
106
105
  params = None
107
106
  body: dict[str, object] = {}
108
107
  body["orderReference"] = order_reference
@@ -130,7 +129,7 @@ class Charge:
130
129
  orderReference (required): order reference
131
130
  phoneNumber (required): customer's phone number
132
131
  """
133
- path = f"/v1/checkout/user-card/auth"
132
+ path = "/v1/checkout/user-card/auth"
134
133
  params = None
135
134
  body: dict[str, object] = {}
136
135
  body["orderReference"] = order_reference
@@ -148,7 +147,7 @@ class Charge:
148
147
  Body fields:
149
148
  orderReference (required): order reference
150
149
  """
151
- path = f"/v1/checkout/user-card/saved-card/auth"
150
+ path = "/v1/checkout/user-card/saved-card/auth"
152
151
  params = None
153
152
  body: dict[str, object] = {}
154
153
  body["orderReference"] = order_reference
@@ -167,7 +166,7 @@ class Charge:
167
166
  phoneNumber (required): customer's phone number
168
167
  otp (required): otp send to the customer's mobile phone
169
168
  """
170
- path = f"/v1/checkout/user-card"
169
+ path = "/v1/checkout/user-card"
171
170
  params = None
172
171
  body: dict[str, object] = {}
173
172
  body["orderReference"] = order_reference
@@ -199,7 +198,7 @@ class Charge:
199
198
  transactionId (required): the transaction Id returned when the card details were submitted
200
199
  forceCancel (required): Force the cancelation of the transaction
201
200
  """
202
- path = f"/v1/checkout/transaction/cancel"
201
+ path = "/v1/checkout/transaction/cancel"
203
202
  params = None
204
203
  body: dict[str, object] = {}
205
204
  body["transactionId"] = transaction_id
@@ -239,7 +238,7 @@ class AsyncCharge:
239
238
  saveCard: if true, this this user cardn will be saved for the user's future use. Note the process is not complete until the user-card verification endpoints are called to authenticate the user's phone number.
240
239
  deviceInformation:
241
240
  """
242
- path = f"/v1/checkout/checkout-card-detail"
241
+ path = "/v1/checkout/checkout-card-detail"
243
242
  params = None
244
243
  body: dict[str, object] = {}
245
244
  if card_details is not None:
@@ -267,7 +266,7 @@ class AsyncCharge:
267
266
  orderReference (required): order reference
268
267
  transactionId (required): transaction id returend when the card details were submitted
269
268
  """
270
- path = f"/v1/checkout/checkout-card-otp"
269
+ path = "/v1/checkout/checkout-card-otp"
271
270
  params = None
272
271
  body: dict[str, object] = {}
273
272
  body["otp"] = otp
@@ -286,7 +285,7 @@ class AsyncCharge:
286
285
  Body fields:
287
286
  orderReference (required): order reference
288
287
  """
289
- path = f"/v1/checkout/resend-otp"
288
+ path = "/v1/checkout/resend-otp"
290
289
  params = None
291
290
  body: dict[str, object] = {}
292
291
  body["orderReference"] = order_reference
@@ -303,7 +302,7 @@ class AsyncCharge:
303
302
  Body fields:
304
303
  orderReference (required): order reference
305
304
  """
306
- path = f"/v1/checkout/confirm-transaction-receipt"
305
+ path = "/v1/checkout/confirm-transaction-receipt"
307
306
  params = None
308
307
  body: dict[str, object] = {}
309
308
  body["orderReference"] = order_reference
@@ -331,7 +330,7 @@ class AsyncCharge:
331
330
  orderReference (required): order reference
332
331
  phoneNumber (required): customer's phone number
333
332
  """
334
- path = f"/v1/checkout/user-card/auth"
333
+ path = "/v1/checkout/user-card/auth"
335
334
  params = None
336
335
  body: dict[str, object] = {}
337
336
  body["orderReference"] = order_reference
@@ -349,7 +348,7 @@ class AsyncCharge:
349
348
  Body fields:
350
349
  orderReference (required): order reference
351
350
  """
352
- path = f"/v1/checkout/user-card/saved-card/auth"
351
+ path = "/v1/checkout/user-card/saved-card/auth"
353
352
  params = None
354
353
  body: dict[str, object] = {}
355
354
  body["orderReference"] = order_reference
@@ -368,7 +367,7 @@ class AsyncCharge:
368
367
  phoneNumber (required): customer's phone number
369
368
  otp (required): otp send to the customer's mobile phone
370
369
  """
371
- path = f"/v1/checkout/user-card"
370
+ path = "/v1/checkout/user-card"
372
371
  params = None
373
372
  body: dict[str, object] = {}
374
373
  body["orderReference"] = order_reference
@@ -400,7 +399,7 @@ class AsyncCharge:
400
399
  transactionId (required): the transaction Id returned when the card details were submitted
401
400
  forceCancel (required): Force the cancelation of the transaction
402
401
  """
403
- path = f"/v1/checkout/transaction/cancel"
402
+ path = "/v1/checkout/transaction/cancel"
404
403
  params = None
405
404
  body: dict[str, object] = {}
406
405
  body["transactionId"] = transaction_id
@@ -2,7 +2,6 @@
2
2
  # regenerate via scripts/generate_resources.py instead.
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
5
 
7
6
  from ..http import AsyncNombaClient, NombaClient
8
7
  from ..validation import validate_body
@@ -25,7 +24,7 @@ class Checkout:
25
24
  order (required):
26
25
  tokenizeCard: Determines if the card used for payment is to be tokenized
27
26
  """
28
- path = f"/v1/checkout/order"
27
+ path = "/v1/checkout/order"
29
28
  params = None
30
29
  body: dict[str, object] = {}
31
30
  body["order"] = order
@@ -45,7 +44,7 @@ class Checkout:
45
44
  tokenKey (required): the token key returned in the webhook
46
45
  order:
47
46
  """
48
- path = f"/v1/checkout/tokenized-card-payment"
47
+ path = "/v1/checkout/tokenized-card-payment"
49
48
  params = None
50
49
  body: dict[str, object] = {}
51
50
  body["tokenKey"] = token_key
@@ -61,7 +60,7 @@ class Checkout:
61
60
 
62
61
  Fetch list of merchant's tokenized cards
63
62
  """
64
- path = f"/v1/checkout/tokenized-card-data"
63
+ path = "/v1/checkout/tokenized-card-data"
65
64
  params: dict[str, object] = {}
66
65
  if customer_email is not None:
67
66
  params["customerEmail"] = customer_email
@@ -84,7 +83,7 @@ class Checkout:
84
83
  currentEmailAddress (required): customer email currently associated with the key
85
84
  newEmailAddress (required): new email to replace the old one
86
85
  """
87
- path = f"/v1/checkout/tokenized-card-data"
86
+ path = "/v1/checkout/tokenized-card-data"
88
87
  params = None
89
88
  body: dict[str, object] = {}
90
89
  body["tokenKey"] = token_key
@@ -103,7 +102,7 @@ class Checkout:
103
102
  Body fields:
104
103
  tokenKey (required): token key
105
104
  """
106
- path = f"/v1/checkout/tokenized-card-data"
105
+ path = "/v1/checkout/tokenized-card-data"
107
106
  params = None
108
107
  body: dict[str, object] = {}
109
108
  body["tokenKey"] = token_key
@@ -115,7 +114,7 @@ class Checkout:
115
114
  """
116
115
  Fetch checkout transaction
117
116
  """
118
- path = f"/v1/checkout/transaction"
117
+ path = "/v1/checkout/transaction"
119
118
  params: dict[str, object] = {}
120
119
  if id_type is not None:
121
120
  params["idType"] = id_type
@@ -135,7 +134,7 @@ class Checkout:
135
134
  accountNumber: The account number for the refund
136
135
  bankCode: The bank code for the refund
137
136
  """
138
- path = f"/v1/checkout/refund"
137
+ path = "/v1/checkout/refund"
139
138
  params = None
140
139
  body: dict[str, object] = {}
141
140
  body["transactionId"] = transaction_id
@@ -158,7 +157,7 @@ class Checkout:
158
157
  Body fields:
159
158
  orderReference (required): The unique reference of the checkout order to cancel
160
159
  """
161
- path = f"/v1/checkout/order/cancel"
160
+ path = "/v1/checkout/order/cancel"
162
161
  params = None
163
162
  body: dict[str, object] = {}
164
163
  body["orderReference"] = order_reference
@@ -184,7 +183,7 @@ class AsyncCheckout:
184
183
  order (required):
185
184
  tokenizeCard: Determines if the card used for payment is to be tokenized
186
185
  """
187
- path = f"/v1/checkout/order"
186
+ path = "/v1/checkout/order"
188
187
  params = None
189
188
  body: dict[str, object] = {}
190
189
  body["order"] = order
@@ -204,7 +203,7 @@ class AsyncCheckout:
204
203
  tokenKey (required): the token key returned in the webhook
205
204
  order:
206
205
  """
207
- path = f"/v1/checkout/tokenized-card-payment"
206
+ path = "/v1/checkout/tokenized-card-payment"
208
207
  params = None
209
208
  body: dict[str, object] = {}
210
209
  body["tokenKey"] = token_key
@@ -220,7 +219,7 @@ class AsyncCheckout:
220
219
 
221
220
  Fetch list of merchant's tokenized cards
222
221
  """
223
- path = f"/v1/checkout/tokenized-card-data"
222
+ path = "/v1/checkout/tokenized-card-data"
224
223
  params: dict[str, object] = {}
225
224
  if customer_email is not None:
226
225
  params["customerEmail"] = customer_email
@@ -243,7 +242,7 @@ class AsyncCheckout:
243
242
  currentEmailAddress (required): customer email currently associated with the key
244
243
  newEmailAddress (required): new email to replace the old one
245
244
  """
246
- path = f"/v1/checkout/tokenized-card-data"
245
+ path = "/v1/checkout/tokenized-card-data"
247
246
  params = None
248
247
  body: dict[str, object] = {}
249
248
  body["tokenKey"] = token_key
@@ -262,7 +261,7 @@ class AsyncCheckout:
262
261
  Body fields:
263
262
  tokenKey (required): token key
264
263
  """
265
- path = f"/v1/checkout/tokenized-card-data"
264
+ path = "/v1/checkout/tokenized-card-data"
266
265
  params = None
267
266
  body: dict[str, object] = {}
268
267
  body["tokenKey"] = token_key
@@ -274,7 +273,7 @@ class AsyncCheckout:
274
273
  """
275
274
  Fetch checkout transaction
276
275
  """
277
- path = f"/v1/checkout/transaction"
276
+ path = "/v1/checkout/transaction"
278
277
  params: dict[str, object] = {}
279
278
  if id_type is not None:
280
279
  params["idType"] = id_type
@@ -294,7 +293,7 @@ class AsyncCheckout:
294
293
  accountNumber: The account number for the refund
295
294
  bankCode: The bank code for the refund
296
295
  """
297
- path = f"/v1/checkout/refund"
296
+ path = "/v1/checkout/refund"
298
297
  params = None
299
298
  body: dict[str, object] = {}
300
299
  body["transactionId"] = transaction_id
@@ -317,7 +316,7 @@ class AsyncCheckout:
317
316
  Body fields:
318
317
  orderReference (required): The unique reference of the checkout order to cancel
319
318
  """
320
- path = f"/v1/checkout/order/cancel"
319
+ path = "/v1/checkout/order/cancel"
321
320
  params = None
322
321
  body: dict[str, object] = {}
323
322
  body["orderReference"] = order_reference
@@ -2,7 +2,6 @@
2
2
  # regenerate via scripts/generate_resources.py instead.
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
5
 
7
6
  from ..http import AsyncNombaClient, NombaClient
8
7
  from ..validation import validate_body
@@ -28,7 +27,7 @@ class DirectDebits:
28
27
  """
29
28
  Get mandates by filters
30
29
  """
31
- path = f"/v1/direct-debits/mandates"
30
+ path = "/v1/direct-debits/mandates"
32
31
  params: dict[str, object] = {}
33
32
  if page is not None:
34
33
  params["page"] = page
@@ -54,7 +53,7 @@ class DirectDebits:
54
53
  mandateId (required): Unique identifier of the mandate
55
54
  status (required): New status of the mandate
56
55
  """
57
- path = f"/v1/direct-debits/update-status"
56
+ path = "/v1/direct-debits/update-status"
58
57
  params = None
59
58
  body: dict[str, object] = {}
60
59
  body["mandateId"] = mandate_id
@@ -75,7 +74,7 @@ class DirectDebits:
75
74
  mandateId (required): Unique identifier of the mandate to debit
76
75
  amount (required): Amount to be debited
77
76
  """
78
- path = f"/v1/direct-debits/debit-mandate"
77
+ path = "/v1/direct-debits/debit-mandate"
79
78
  params = None
80
79
  body: dict[str, object] = {}
81
80
  body["mandateId"] = mandate_id
@@ -150,7 +149,7 @@ class DirectDebits:
150
149
  customerPhoneNumber:
151
150
  startImmediately:
152
151
  """
153
- path = f"/v1/direct-debits"
152
+ path = "/v1/direct-debits"
154
153
  params = None
155
154
  body: dict[str, object] = {}
156
155
  body["customerAccountNumber"] = customer_account_number
@@ -195,7 +194,7 @@ class AsyncDirectDebits:
195
194
  """
196
195
  Get mandates by filters
197
196
  """
198
- path = f"/v1/direct-debits/mandates"
197
+ path = "/v1/direct-debits/mandates"
199
198
  params: dict[str, object] = {}
200
199
  if page is not None:
201
200
  params["page"] = page
@@ -221,7 +220,7 @@ class AsyncDirectDebits:
221
220
  mandateId (required): Unique identifier of the mandate
222
221
  status (required): New status of the mandate
223
222
  """
224
- path = f"/v1/direct-debits/update-status"
223
+ path = "/v1/direct-debits/update-status"
225
224
  params = None
226
225
  body: dict[str, object] = {}
227
226
  body["mandateId"] = mandate_id
@@ -242,7 +241,7 @@ class AsyncDirectDebits:
242
241
  mandateId (required): Unique identifier of the mandate to debit
243
242
  amount (required): Amount to be debited
244
243
  """
245
- path = f"/v1/direct-debits/debit-mandate"
244
+ path = "/v1/direct-debits/debit-mandate"
246
245
  params = None
247
246
  body: dict[str, object] = {}
248
247
  body["mandateId"] = mandate_id
@@ -317,7 +316,7 @@ class AsyncDirectDebits:
317
316
  customerPhoneNumber:
318
317
  startImmediately:
319
318
  """
320
- path = f"/v1/direct-debits"
319
+ path = "/v1/direct-debits"
321
320
  params = None
322
321
  body: dict[str, object] = {}
323
322
  body["customerAccountNumber"] = customer_account_number
@@ -2,7 +2,6 @@
2
2
  # regenerate via scripts/generate_resources.py instead.
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
5
 
7
6
  from ..http import AsyncNombaClient, NombaClient
8
7
  from ..validation import validate_body
@@ -21,7 +20,7 @@ class Electricity:
21
20
 
22
21
  You can use this endpoint to fetch electricity providers/discos
23
22
  """
24
- path = f"/v1/bill/electricity/discos"
23
+ path = "/v1/bill/electricity/discos"
25
24
  params = None
26
25
  return self._client.get(path, params=params) # type: ignore[return-value]
27
26
 
@@ -31,7 +30,7 @@ class Electricity:
31
30
 
32
31
  This endpoint is for fetching customer information data from an electricity vending provider
33
32
  """
34
- path = f"/v1/bill/electricity/lookup"
33
+ path = "/v1/bill/electricity/lookup"
35
34
  params: dict[str, object] = {}
36
35
  if disco is not None:
37
36
  params["disco"] = disco
@@ -53,7 +52,7 @@ class Electricity:
53
52
  customerId:
54
53
  meterType:
55
54
  """
56
- path = f"/v1/bill/electricity"
55
+ path = "/v1/bill/electricity"
57
56
  params = None
58
57
  body: dict[str, object] = {}
59
58
  if disco is not None:
@@ -119,7 +118,7 @@ class AsyncElectricity:
119
118
 
120
119
  You can use this endpoint to fetch electricity providers/discos
121
120
  """
122
- path = f"/v1/bill/electricity/discos"
121
+ path = "/v1/bill/electricity/discos"
123
122
  params = None
124
123
  return await self._client.get(path, params=params) # type: ignore[return-value]
125
124
 
@@ -129,7 +128,7 @@ class AsyncElectricity:
129
128
 
130
129
  This endpoint is for fetching customer information data from an electricity vending provider
131
130
  """
132
- path = f"/v1/bill/electricity/lookup"
131
+ path = "/v1/bill/electricity/lookup"
133
132
  params: dict[str, object] = {}
134
133
  if disco is not None:
135
134
  params["disco"] = disco
@@ -151,7 +150,7 @@ class AsyncElectricity:
151
150
  customerId:
152
151
  meterType:
153
152
  """
154
- path = f"/v1/bill/electricity"
153
+ path = "/v1/bill/electricity"
155
154
  params = None
156
155
  body: dict[str, object] = {}
157
156
  if disco is not None:
@@ -2,7 +2,6 @@
2
2
  # regenerate via scripts/generate_resources.py instead.
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
5
 
7
6
  from ..http import AsyncNombaClient, NombaClient
8
7
  from ..validation import validate_body
@@ -28,7 +27,7 @@ class GlobalCollections:
28
27
  topupVendor (required): Mobile money network provider (e.g. AIRTEL, MPESA).
29
28
  idempotencyKey: A client-generated key used to safely retry the request without risk of duplicate charges. If not provided, the server generates one automatically and returns it in the response.
30
29
  """
31
- path = f"/v1/global-collection/inflow/initiate"
30
+ path = "/v1/global-collection/inflow/initiate"
32
31
  params = None
33
32
  body: dict[str, object] = {}
34
33
  body["phoneNumber"] = phone_number
@@ -56,7 +55,7 @@ class GlobalCollections:
56
55
 
57
56
  Returns the list of mobile money providers supported for DRC inflow. Use the returned code values as the topupVendor in the Initiate Mobile Money Inflow request.
58
57
  """
59
- path = f"/v1/global-collection/drc/inflow/providers"
58
+ path = "/v1/global-collection/drc/inflow/providers"
60
59
  params = None
61
60
  return self._client.get(path, params=params) # type: ignore[return-value]
62
61
 
@@ -65,7 +64,7 @@ class GlobalCollections:
65
64
 
66
65
  Sandbox version of Fetch DRC Inflow Providers. Returns the same static list of mobile money providers supported for DRC inflow for use in testing.
67
66
  """
68
- path = f"/v1/sandbox/global-collection/drc/inflow/providers"
67
+ path = "/v1/sandbox/global-collection/drc/inflow/providers"
69
68
  params = None
70
69
  return self._client.get(path, params=params) # type: ignore[return-value]
71
70
 
@@ -90,7 +89,7 @@ class AsyncGlobalCollections:
90
89
  topupVendor (required): Mobile money network provider (e.g. AIRTEL, MPESA).
91
90
  idempotencyKey: A client-generated key used to safely retry the request without risk of duplicate charges. If not provided, the server generates one automatically and returns it in the response.
92
91
  """
93
- path = f"/v1/global-collection/inflow/initiate"
92
+ path = "/v1/global-collection/inflow/initiate"
94
93
  params = None
95
94
  body: dict[str, object] = {}
96
95
  body["phoneNumber"] = phone_number
@@ -118,7 +117,7 @@ class AsyncGlobalCollections:
118
117
 
119
118
  Returns the list of mobile money providers supported for DRC inflow. Use the returned code values as the topupVendor in the Initiate Mobile Money Inflow request.
120
119
  """
121
- path = f"/v1/global-collection/drc/inflow/providers"
120
+ path = "/v1/global-collection/drc/inflow/providers"
122
121
  params = None
123
122
  return await self._client.get(path, params=params) # type: ignore[return-value]
124
123
 
@@ -127,7 +126,7 @@ class AsyncGlobalCollections:
127
126
 
128
127
  Sandbox version of Fetch DRC Inflow Providers. Returns the same static list of mobile money providers supported for DRC inflow for use in testing.
129
128
  """
130
- path = f"/v1/sandbox/global-collection/drc/inflow/providers"
129
+ path = "/v1/sandbox/global-collection/drc/inflow/providers"
131
130
  params = None
132
131
  return await self._client.get(path, params=params) # type: ignore[return-value]
133
132
 
@@ -2,7 +2,6 @@
2
2
  # regenerate via scripts/generate_resources.py instead.
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
5
 
7
6
  from ..http import AsyncNombaClient, NombaClient
8
7
  from ..validation import validate_body
@@ -43,7 +42,7 @@ class GlobalPayout:
43
42
  bankZipCode: Bank ZIP code. Required for United States WIRE.
44
43
  beneficiary: Required for INTERAC; partially required for BANK (Canada).
45
44
  """
46
- path = f"/v1/global-payout/transfer/authorize"
45
+ path = "/v1/global-payout/transfer/authorize"
47
46
  params = None
48
47
  body: dict[str, object] = {}
49
48
  body["amount"] = amount
@@ -100,7 +99,7 @@ class GlobalPayout:
100
99
  narration:
101
100
  lockedExchangeRateId: The exchangeRateId from a prior Fetch Exchange Rates call. When provided, the exchange is fulfilled at that exact rate.
102
101
  """
103
- path = f"/v1/global-payout/exchange/authorize"
102
+ path = "/v1/global-payout/exchange/authorize"
104
103
  params = None
105
104
  body: dict[str, object] = {}
106
105
  body["amount"] = amount
@@ -131,7 +130,7 @@ class GlobalPayout:
131
130
  transactionType (required):
132
131
  sourceCountryIsoCode (required):
133
132
  """
134
- path = f"/v1/global-payout/money/convert"
133
+ path = "/v1/global-payout/money/convert"
135
134
  params = None
136
135
  body: dict[str, object] = {}
137
136
  body["amount"] = amount
@@ -148,7 +147,7 @@ class GlobalPayout:
148
147
 
149
148
  Retrieve the latest exchange rates for a currency pair before initiating a transfer.
150
149
  """
151
- path = f"/v1/global-payout/exchange-rates"
150
+ path = "/v1/global-payout/exchange-rates"
152
151
  params: dict[str, object] = {}
153
152
  if from_ is not None:
154
153
  params["from"] = from_
@@ -172,7 +171,7 @@ class GlobalPayout:
172
171
 
173
172
  Returns all supported payment methods and their method-specific requirements. Filter by code or name to retrieve a specific method.
174
173
  """
175
- path = f"/v1/global-payout/payment-methods"
174
+ path = "/v1/global-payout/payment-methods"
176
175
  params: dict[str, object] = {}
177
176
  if code is not None:
178
177
  params["code"] = code
@@ -185,7 +184,7 @@ class GlobalPayout:
185
184
 
186
185
  Returns available bank, institution, or mobile money providers. Use isMobileMoney=false for bank/institution providers and isMobileMoney=true for mobile money providers. Use code as institutionCode and displayName as institutionName in Authorize Transfer.
187
186
  """
188
- path = f"/v1/global-payout/bank/providers"
187
+ path = "/v1/global-payout/bank/providers"
189
188
  params: dict[str, object] = {}
190
189
  if is_mobile_money is not None:
191
190
  params["isMobileMoney"] = is_mobile_money
@@ -229,7 +228,7 @@ class AsyncGlobalPayout:
229
228
  bankZipCode: Bank ZIP code. Required for United States WIRE.
230
229
  beneficiary: Required for INTERAC; partially required for BANK (Canada).
231
230
  """
232
- path = f"/v1/global-payout/transfer/authorize"
231
+ path = "/v1/global-payout/transfer/authorize"
233
232
  params = None
234
233
  body: dict[str, object] = {}
235
234
  body["amount"] = amount
@@ -286,7 +285,7 @@ class AsyncGlobalPayout:
286
285
  narration:
287
286
  lockedExchangeRateId: The exchangeRateId from a prior Fetch Exchange Rates call. When provided, the exchange is fulfilled at that exact rate.
288
287
  """
289
- path = f"/v1/global-payout/exchange/authorize"
288
+ path = "/v1/global-payout/exchange/authorize"
290
289
  params = None
291
290
  body: dict[str, object] = {}
292
291
  body["amount"] = amount
@@ -317,7 +316,7 @@ class AsyncGlobalPayout:
317
316
  transactionType (required):
318
317
  sourceCountryIsoCode (required):
319
318
  """
320
- path = f"/v1/global-payout/money/convert"
319
+ path = "/v1/global-payout/money/convert"
321
320
  params = None
322
321
  body: dict[str, object] = {}
323
322
  body["amount"] = amount
@@ -334,7 +333,7 @@ class AsyncGlobalPayout:
334
333
 
335
334
  Retrieve the latest exchange rates for a currency pair before initiating a transfer.
336
335
  """
337
- path = f"/v1/global-payout/exchange-rates"
336
+ path = "/v1/global-payout/exchange-rates"
338
337
  params: dict[str, object] = {}
339
338
  if from_ is not None:
340
339
  params["from"] = from_
@@ -358,7 +357,7 @@ class AsyncGlobalPayout:
358
357
 
359
358
  Returns all supported payment methods and their method-specific requirements. Filter by code or name to retrieve a specific method.
360
359
  """
361
- path = f"/v1/global-payout/payment-methods"
360
+ path = "/v1/global-payout/payment-methods"
362
361
  params: dict[str, object] = {}
363
362
  if code is not None:
364
363
  params["code"] = code
@@ -371,7 +370,7 @@ class AsyncGlobalPayout:
371
370
 
372
371
  Returns available bank, institution, or mobile money providers. Use isMobileMoney=false for bank/institution providers and isMobileMoney=true for mobile money providers. Use code as institutionCode and displayName as institutionName in Authorize Transfer.
373
372
  """
374
- path = f"/v1/global-payout/bank/providers"
373
+ path = "/v1/global-payout/bank/providers"
375
374
  params: dict[str, object] = {}
376
375
  if is_mobile_money is not None:
377
376
  params["isMobileMoney"] = is_mobile_money
@@ -2,8 +2,6 @@
2
2
  # regenerate via scripts/generate_resources.py instead.
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
-
7
5
  from ..http import AsyncNombaClient, NombaClient
8
6
  from ..validation import validate_body
9
7
  from .. import models as _models
@@ -45,7 +43,7 @@ class Terminals:
45
43
  serialNumber (required): Serial number
46
44
  terminalLabel: Terminal label
47
45
  """
48
- path = f"/v1/terminals/assign"
46
+ path = "/v1/terminals/assign"
49
47
  params = None
50
48
  body: dict[str, object] = {}
51
49
  body["serialNumber"] = serial_number
@@ -85,7 +83,7 @@ class Terminals:
85
83
  serialNumber (required): Serial number
86
84
  terminalLabel: Terminal label
87
85
  """
88
- path = f"/v1/terminals/unassign"
86
+ path = "/v1/terminals/unassign"
89
87
  params = None
90
88
  body: dict[str, object] = {}
91
89
  body["serialNumber"] = serial_number
@@ -95,7 +93,7 @@ class Terminals:
95
93
  validate_body("post", "/v1/terminals/unassign", body)
96
94
  return self._client.post(path, json=body, params=params) # type: ignore[return-value]
97
95
 
98
- def send_payment_request_to_terminal(self, merchant_tx_ref, amount, currency, **extra: object) -> _models.SendPaymentRequestToTerminalResponse:
96
+ def send_payment_request_to_terminal(self, merchant_tx_ref, amount, currency,terminalId, **extra: object) -> _models.SendPaymentRequestToTerminalResponse:
99
97
  """
100
98
  Send payment request to terminal
101
99
 
@@ -154,7 +152,7 @@ class AsyncTerminals:
154
152
  serialNumber (required): Serial number
155
153
  terminalLabel: Terminal label
156
154
  """
157
- path = f"/v1/terminals/assign"
155
+ path = "/v1/terminals/assign"
158
156
  params = None
159
157
  body: dict[str, object] = {}
160
158
  body["serialNumber"] = serial_number
@@ -194,7 +192,7 @@ class AsyncTerminals:
194
192
  serialNumber (required): Serial number
195
193
  terminalLabel: Terminal label
196
194
  """
197
- path = f"/v1/terminals/unassign"
195
+ path = "/v1/terminals/unassign"
198
196
  params = None
199
197
  body: dict[str, object] = {}
200
198
  body["serialNumber"] = serial_number
@@ -204,7 +202,7 @@ class AsyncTerminals:
204
202
  validate_body("post", "/v1/terminals/unassign", body)
205
203
  return await self._client.post(path, json=body, params=params) # type: ignore[return-value]
206
204
 
207
- async def send_payment_request_to_terminal(self, merchant_tx_ref, amount, currency, **extra: object) -> _models.SendPaymentRequestToTerminalResponse:
205
+ async def send_payment_request_to_terminal(self, merchant_tx_ref, amount, currency,terminalId, **extra: object) -> _models.SendPaymentRequestToTerminalResponse:
208
206
  """
209
207
  Send payment request to terminal
210
208
 
@@ -2,7 +2,6 @@
2
2
  # regenerate via scripts/generate_resources.py instead.
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
5
 
7
6
  from ..http import AsyncNombaClient, NombaClient
8
7
  from ..validation import validate_body
@@ -39,7 +38,7 @@ class Transactions:
39
38
 
40
39
  You can use this endpoint to fetch credit/debit transactions on the parent account.
41
40
  """
42
- path = f"/v1/transactions/bank"
41
+ path = "/v1/transactions/bank"
43
42
  params: dict[str, object] = {}
44
43
  if limit is not None:
45
44
  params["limit"] = limit
@@ -125,7 +124,7 @@ class Transactions:
125
124
 
126
125
  You can use this endpoint to fetch transactions on the parent account.
127
126
  """
128
- path = f"/v1/transactions/accounts"
127
+ path = "/v1/transactions/accounts"
129
128
  params: dict[str, object] = {}
130
129
  if limit is not None:
131
130
  params["limit"] = limit
@@ -154,7 +153,7 @@ class Transactions:
154
153
  orderReference: Online checkout order reference
155
154
  orderId: Online checkout order id
156
155
  """
157
- path = f"/v1/transactions/accounts"
156
+ path = "/v1/transactions/accounts"
158
157
  params: dict[str, object] = {}
159
158
  if limit is not None:
160
159
  params["limit"] = limit
@@ -211,7 +210,7 @@ class Transactions:
211
210
 
212
211
  You can use this endpoint to fetch a single transaction on the parent account.
213
212
  """
214
- path = f"/v1/transactions/accounts/single"
213
+ path = "/v1/transactions/accounts/single"
215
214
  params: dict[str, object] = {}
216
215
  if transaction_ref is not None:
217
216
  params["transactionRef"] = transaction_ref
@@ -265,7 +264,7 @@ class AsyncTransactions:
265
264
 
266
265
  You can use this endpoint to fetch credit/debit transactions on the parent account.
267
266
  """
268
- path = f"/v1/transactions/bank"
267
+ path = "/v1/transactions/bank"
269
268
  params: dict[str, object] = {}
270
269
  if limit is not None:
271
270
  params["limit"] = limit
@@ -351,7 +350,7 @@ class AsyncTransactions:
351
350
 
352
351
  You can use this endpoint to fetch transactions on the parent account.
353
352
  """
354
- path = f"/v1/transactions/accounts"
353
+ path = "/v1/transactions/accounts"
355
354
  params: dict[str, object] = {}
356
355
  if limit is not None:
357
356
  params["limit"] = limit
@@ -380,7 +379,7 @@ class AsyncTransactions:
380
379
  orderReference: Online checkout order reference
381
380
  orderId: Online checkout order id
382
381
  """
383
- path = f"/v1/transactions/accounts"
382
+ path = "/v1/transactions/accounts"
384
383
  params: dict[str, object] = {}
385
384
  if limit is not None:
386
385
  params["limit"] = limit
@@ -437,7 +436,7 @@ class AsyncTransactions:
437
436
 
438
437
  You can use this endpoint to fetch a single transaction on the parent account.
439
438
  """
440
- path = f"/v1/transactions/accounts/single"
439
+ path = "/v1/transactions/accounts/single"
441
440
  params: dict[str, object] = {}
442
441
  if transaction_ref is not None:
443
442
  params["transactionRef"] = transaction_ref
@@ -2,7 +2,6 @@
2
2
  # regenerate via scripts/generate_resources.py instead.
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
5
 
7
6
  from ..http import AsyncNombaClient, NombaClient
8
7
  from ..validation import validate_body
@@ -21,7 +20,7 @@ class Transfers:
21
20
 
22
21
  You can use this endpoint to fetch all banks, their names and codes.
23
22
  """
24
- path = f"/v1/transfers/banks"
23
+ path = "/v1/transfers/banks"
25
24
  params = None
26
25
  return self._client.get(path, params=params) # type: ignore[return-value]
27
26
 
@@ -35,7 +34,7 @@ class Transfers:
35
34
  accountNumber (required): The account number to be looked up.
36
35
  bankCode (required): The bankCode of the bank the account number belongs to. This can be obtained from a call to `/v1/transfers/banks`
37
36
  """
38
- path = f"/v1/transfers/bank/lookup"
37
+ path = "/v1/transfers/bank/lookup"
39
38
  params = None
40
39
  body: dict[str, object] = {}
41
40
  body["accountNumber"] = account_number
@@ -61,7 +60,7 @@ This is an idempotency key and must be unique per transaction.
61
60
  senderName: Sender name
62
61
  narration: The payment narration
63
62
  """
64
- path = f"/v2/transfers/bank"
63
+ path = "/v2/transfers/bank"
65
64
  params = None
66
65
  body: dict[str, object] = {}
67
66
  body["amount"] = amount
@@ -125,7 +124,7 @@ This is an idempotency key and must be unique per transaction.
125
124
  This is an idempotency key and must be unique per transaction.
126
125
  narration: The payment narration
127
126
  """
128
- path = f"/v2/transfers/wallet"
127
+ path = "/v2/transfers/wallet"
129
128
  params = None
130
129
  body: dict[str, object] = {}
131
130
  body["amount"] = amount
@@ -177,7 +176,7 @@ class AsyncTransfers:
177
176
 
178
177
  You can use this endpoint to fetch all banks, their names and codes.
179
178
  """
180
- path = f"/v1/transfers/banks"
179
+ path = "/v1/transfers/banks"
181
180
  params = None
182
181
  return await self._client.get(path, params=params) # type: ignore[return-value]
183
182
 
@@ -191,7 +190,7 @@ class AsyncTransfers:
191
190
  accountNumber (required): The account number to be looked up.
192
191
  bankCode (required): The bankCode of the bank the account number belongs to. This can be obtained from a call to `/v1/transfers/banks`
193
192
  """
194
- path = f"/v1/transfers/bank/lookup"
193
+ path = "/v1/transfers/bank/lookup"
195
194
  params = None
196
195
  body: dict[str, object] = {}
197
196
  body["accountNumber"] = account_number
@@ -217,7 +216,7 @@ This is an idempotency key and must be unique per transaction.
217
216
  senderName: Sender name
218
217
  narration: The payment narration
219
218
  """
220
- path = f"/v2/transfers/bank"
219
+ path = "/v2/transfers/bank"
221
220
  params = None
222
221
  body: dict[str, object] = {}
223
222
  body["amount"] = amount
@@ -281,7 +280,7 @@ This is an idempotency key and must be unique per transaction.
281
280
  This is an idempotency key and must be unique per transaction.
282
281
  narration: The payment narration
283
282
  """
284
- path = f"/v2/transfers/wallet"
283
+ path = "/v2/transfers/wallet"
285
284
  params = None
286
285
  body: dict[str, object] = {}
287
286
  body["amount"] = amount
@@ -2,7 +2,6 @@
2
2
  # regenerate via scripts/generate_resources.py instead.
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any
6
5
 
7
6
  from ..http import AsyncNombaClient, NombaClient
8
7
  from ..validation import validate_body
@@ -28,7 +27,7 @@ class VirtualAccounts:
28
27
  expiryDate: Account expiry date. Optional. ⚠️Be careful with this.
29
28
  expectedAmount: Amount the account can receive. Optional.
30
29
  """
31
- path = f"/v1/accounts/virtual"
30
+ path = "/v1/accounts/virtual"
32
31
  params = None
33
32
  body: dict[str, object] = {}
34
33
  body["accountRef"] = account_ref
@@ -87,7 +86,7 @@ class VirtualAccounts:
87
86
  expired: Whether the virtual account is expired or not
88
87
  resourceAcquired: Whether the virtual account is in use or not
89
88
  """
90
- path = f"/v1/accounts/virtual/list"
89
+ path = "/v1/accounts/virtual/list"
91
90
  params: dict[str, object] = {}
92
91
  if limit is not None:
93
92
  params["limit"] = limit
@@ -182,7 +181,7 @@ class AsyncVirtualAccounts:
182
181
  expiryDate: Account expiry date. Optional. ⚠️Be careful with this.
183
182
  expectedAmount: Amount the account can receive. Optional.
184
183
  """
185
- path = f"/v1/accounts/virtual"
184
+ path = "/v1/accounts/virtual"
186
185
  params = None
187
186
  body: dict[str, object] = {}
188
187
  body["accountRef"] = account_ref
@@ -241,7 +240,7 @@ class AsyncVirtualAccounts:
241
240
  expired: Whether the virtual account is expired or not
242
241
  resourceAcquired: Whether the virtual account is in use or not
243
242
  """
244
- path = f"/v1/accounts/virtual/list"
243
+ path = "/v1/accounts/virtual/list"
245
244
  params: dict[str, object] = {}
246
245
  if limit is not None:
247
246
  params["limit"] = limit
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nomba-python
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Unofficial Python SDK for the Nomba payments API
5
5
  Keywords: nomba,payments,nigeria,fintech,sdk
6
6
  Author: Righteousness
@@ -0,0 +1,33 @@
1
+ nomba/__init__.py,sha256=6T_OY_8zdHFHOzYp9VCLBcJNaB3ZhuLiikAElboqjOk,941
2
+ nomba/client.py,sha256=TNJKjsEiZEpdKvM8C7qh_BWY-U5_q53YlXxWGNvGl4E,5470
3
+ nomba/concurrency.py,sha256=0wTRJ57uLR-rXaIEMfivSRr4qEKvZMu3j5EXgAyLKoo,1870
4
+ nomba/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ nomba/data/nomba_openapi.json,sha256=NcY8i4EWEa1TlY86ITn5VfEbP0_WW99OKlcGOET13VY,608148
6
+ nomba/exceptions.py,sha256=Dx6OASM-7bvzsejmVbw_Iy6PXhm09K6Cu52mxlOjVY8,1484
7
+ nomba/flows/__init__.py,sha256=v2yT_QfBLIzWRvhCiDXXELFMWFTf3ye_VkVlEGA2kb0,155
8
+ nomba/flows/card_payment.py,sha256=Z0eJeFYrvJ_Za_JWl4qxalhU9Q-s-3LjO318ShtbN_k,7512
9
+ nomba/http.py,sha256=z5I990U3zy9wyw5v8-pNXbj55Lj-MigXp35xRpkAe6g,14553
10
+ nomba/models.py,sha256=5R0Wya5au4nvpnn6bHcm-pQfVL97HgMGSdsXQ1IWcTc,26900
11
+ nomba/pagination.py,sha256=g5EagLomsdkN9YojCCnp55mm9IrFCfXBaU9500G_Ri8,3678
12
+ nomba/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ nomba/resources/__init__.py,sha256=i3E8PWRR1_rnXjmKApjSpnAIVvTEI7mLruGvR0HqAJM,1342
14
+ nomba/resources/accounts.py,sha256=whNAEEWLtTi6NsBM6CCkSYUVSI7vP6_W1UL3G-JQ5AU,20103
15
+ nomba/resources/airtime_data.py,sha256=VdGrIm-jdMtflFt17Ts7yVWwPqTDwSzruSHM4NrCEWU,12549
16
+ nomba/resources/betting.py,sha256=q_mR3aifDwzkZvDhvQFQF-bVwL5suoAwtoeWIJ2A5hg,8723
17
+ nomba/resources/cabletv.py,sha256=1olnHtg7qtry2eLRhhlZjhuipMgGiLz1S5_ZtqzgAJI,7401
18
+ nomba/resources/charge.py,sha256=fuUmCoETYTqQW3CFMJqeQKeLjNk_i_7SZ4UjhENaKAc,19549
19
+ nomba/resources/checkout.py,sha256=J1SM4UVr_UIKLknMZ7eVD92UnAmastxuTPeUknIfkW4,13845
20
+ nomba/resources/direct_debits.py,sha256=031W1AM4FlH3Sb4d9Aw4Nmfv7Tj4DJVkwHMW1b3COwQ,12007
21
+ nomba/resources/electricity.py,sha256=kpDwt9iRi-5ac5pRePJ7jd1bAQwUYQNbcQwrB3faGfA,8651
22
+ nomba/resources/global_collections.py,sha256=7AQ4yJxfW88z6LniH2WBW8VimTY4n4qEskoQqWkcbHE,6091
23
+ nomba/resources/global_payout.py,sha256=SmuM6j7vSrprMNSJIQ5dwINE4wOIIOYaZ4syFl8YpjY,21321
24
+ nomba/resources/terminals.py,sha256=zCWh38IPOzs2YFwIz5qLIrqHPtymEZEFPZSdEE-a4IQ,9942
25
+ nomba/resources/transactions.py,sha256=NtDdQtd7z-HmScnyGxrxqxalmK1Fcm7nTzmyDCv9194,22303
26
+ nomba/resources/transfers.py,sha256=z2SzWeJ6c0VZLI5tf1wZp5AY9cnFUuvmPOp0R3E_IBo,15005
27
+ nomba/resources/virtual_accounts.py,sha256=KByqCxPhdkN2vbhWyZViNJPn4KXuJgTqNQxhQ87LM_o,15311
28
+ nomba/validation.py,sha256=sAlddQ0TDtQO4AiTgNQRRRg9GN-fHArJEfCsulPpNyw,3489
29
+ nomba/webhooks.py,sha256=wNJwMqNgkrWmk8zR8Ein_ynlW0XkW6wwrDfhh4gB4Ic,7016
30
+ nomba_python-0.2.1.dist-info/licenses/LICENSE,sha256=5ddBfMvz-MOkk_vJtDwfqiDR8gchx1KRaetdXNL238s,1070
31
+ nomba_python-0.2.1.dist-info/WHEEL,sha256=8ZlpUMJ7mlDirmlHRhDirEx_nPnARrwDjeE92mlk68E,81
32
+ nomba_python-0.2.1.dist-info/METADATA,sha256=CmR4o5EX4gxxLpgs2cUUVQNeBJ6HXUh_YKQ9iPSXGCI,11808
33
+ nomba_python-0.2.1.dist-info/RECORD,,
@@ -1,33 +0,0 @@
1
- nomba/__init__.py,sha256=6T_OY_8zdHFHOzYp9VCLBcJNaB3ZhuLiikAElboqjOk,941
2
- nomba/client.py,sha256=TNJKjsEiZEpdKvM8C7qh_BWY-U5_q53YlXxWGNvGl4E,5470
3
- nomba/concurrency.py,sha256=0wTRJ57uLR-rXaIEMfivSRr4qEKvZMu3j5EXgAyLKoo,1870
4
- nomba/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- nomba/data/nomba_openapi.json,sha256=NcY8i4EWEa1TlY86ITn5VfEbP0_WW99OKlcGOET13VY,608148
6
- nomba/exceptions.py,sha256=Dx6OASM-7bvzsejmVbw_Iy6PXhm09K6Cu52mxlOjVY8,1484
7
- nomba/flows/__init__.py,sha256=v2yT_QfBLIzWRvhCiDXXELFMWFTf3ye_VkVlEGA2kb0,155
8
- nomba/flows/card_payment.py,sha256=Z0eJeFYrvJ_Za_JWl4qxalhU9Q-s-3LjO318ShtbN_k,7512
9
- nomba/http.py,sha256=DVuw6Btcnwlqq95FFE2x62Zd-lp9QtB8-qVvB9sFc6Q,14078
10
- nomba/models.py,sha256=5R0Wya5au4nvpnn6bHcm-pQfVL97HgMGSdsXQ1IWcTc,26900
11
- nomba/pagination.py,sha256=g5EagLomsdkN9YojCCnp55mm9IrFCfXBaU9500G_Ri8,3678
12
- nomba/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- nomba/resources/__init__.py,sha256=i3E8PWRR1_rnXjmKApjSpnAIVvTEI7mLruGvR0HqAJM,1342
14
- nomba/resources/accounts.py,sha256=PRUbs0kXmewAPlioJaPgodAP1VR1fK92_Wqdumcd95I,20138
15
- nomba/resources/airtime_data.py,sha256=7YjebX03hNBT4iDojxXIxmqek6soQ1U2sGYYUkvrEvM,12576
16
- nomba/resources/betting.py,sha256=GZ-vdrmylEtCz8w9KDT8XfV7SF0cRu8AoTiLA4Xn3Kw,8752
17
- nomba/resources/cabletv.py,sha256=fI-Oas2Rk2d3j6UbbT6cE-cZgfsVBxBULWUPPG6Ha6k,7428
18
- nomba/resources/charge.py,sha256=ZDuQc4ZHToNND93BPai_RzPHEqh9lTLz7qdrXz44cRA,19588
19
- nomba/resources/checkout.py,sha256=Qjr4FhE083qIBKExJqevWR0E0wUmSJKcWbd16SS61Yk,13884
20
- nomba/resources/direct_debits.py,sha256=roI0qHZSdznIsQmj1XFXN5ps7tZyoFsrooK5cI9lDqg,12038
21
- nomba/resources/electricity.py,sha256=EfmotvlrwxY_PdblcOEsr5pzY3PGOuE7pwMgCmDkO90,8680
22
- nomba/resources/global_collections.py,sha256=dtL2Tdpx1PdhRQ3vrgssXQWMSHtaYR4_3wGWrtBCeiU,6120
23
- nomba/resources/global_payout.py,sha256=QPfZmsu9TDPz9HyTy2JjnQsxLUGfZnB03jWn8d7ze7A,21356
24
- nomba/resources/terminals.py,sha256=4v3IpIDb8-LuHd_Cc85RgfORp5jEdyNmvN9kfMV2tiE,9948
25
- nomba/resources/transactions.py,sha256=W3D3Jev9OvTc7_rJpSVf1xPDIw6h8CONRu7v7SQl9Yk,22334
26
- nomba/resources/transfers.py,sha256=KE6VlvY9Nl79kpFshsoypVhHH_boHbwRcL6rrAJfblM,15036
27
- nomba/resources/virtual_accounts.py,sha256=KmDjU0pYuR-q5GgxKr-wXG6NBKePMh59h4X3H7GOFRI,15338
28
- nomba/validation.py,sha256=sAlddQ0TDtQO4AiTgNQRRRg9GN-fHArJEfCsulPpNyw,3489
29
- nomba/webhooks.py,sha256=wNJwMqNgkrWmk8zR8Ein_ynlW0XkW6wwrDfhh4gB4Ic,7016
30
- nomba_python-0.2.0.dist-info/licenses/LICENSE,sha256=5ddBfMvz-MOkk_vJtDwfqiDR8gchx1KRaetdXNL238s,1070
31
- nomba_python-0.2.0.dist-info/WHEEL,sha256=8ZlpUMJ7mlDirmlHRhDirEx_nPnARrwDjeE92mlk68E,81
32
- nomba_python-0.2.0.dist-info/METADATA,sha256=ufw3KrNDgQjoh2HVKC6bDCU3__nObGEC7Im2e6XZew0,11808
33
- nomba_python-0.2.0.dist-info/RECORD,,