beancount-gocardless 0.1.8__py3-none-any.whl → 0.1.10__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.
- beancount_gocardless/__init__.py +9 -2
- beancount_gocardless/cli.py +56 -44
- beancount_gocardless/client.py +323 -326
- beancount_gocardless/importer.py +263 -138
- beancount_gocardless/models.py +561 -0
- beancount_gocardless/openapi/swagger.json +5344 -0
- beancount_gocardless/tui.py +789 -0
- beancount_gocardless-0.1.10.dist-info/METADATA +130 -0
- beancount_gocardless-0.1.10.dist-info/RECORD +12 -0
- {beancount_gocardless-0.1.8.dist-info → beancount_gocardless-0.1.10.dist-info}/WHEEL +1 -1
- beancount_gocardless-0.1.10.dist-info/entry_points.txt +3 -0
- beancount_gocardless-0.1.10.dist-info/licenses/LICENSE +24 -0
- beancount_gocardless-0.1.8.dist-info/LICENSE +0 -19
- beancount_gocardless-0.1.8.dist-info/METADATA +0 -92
- beancount_gocardless-0.1.8.dist-info/RECORD +0 -9
- beancount_gocardless-0.1.8.dist-info/entry_points.txt +0 -3
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Comprehensive Pydantic models for GoCardless API responses
|
|
3
|
+
Complete coverage of all schemas from swagger.json
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from typing import Optional, List, Dict, Any, TypedDict
|
|
7
|
+
from pydantic import BaseModel, Field, ConfigDict, validator
|
|
8
|
+
from pydantic.alias_generators import to_camel
|
|
9
|
+
from enum import Enum
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class AccountInfo(TypedDict, total=False):
|
|
13
|
+
id: str
|
|
14
|
+
created: str
|
|
15
|
+
last_accessed: Optional[str]
|
|
16
|
+
iban: Optional[str]
|
|
17
|
+
bban: Optional[str]
|
|
18
|
+
status: str
|
|
19
|
+
institution_id: Optional[str]
|
|
20
|
+
owner_name: Optional[str]
|
|
21
|
+
name: Optional[str]
|
|
22
|
+
requisition_id: str
|
|
23
|
+
requisition_reference: str
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class StatusEnum(str, Enum):
|
|
27
|
+
"""Status enumeration for various API responses."""
|
|
28
|
+
|
|
29
|
+
LN = "LN"
|
|
30
|
+
RJ = "RJ"
|
|
31
|
+
ER = "ER"
|
|
32
|
+
UR = "UR"
|
|
33
|
+
GA = "GA"
|
|
34
|
+
SA = "SA"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class BalanceAmountSchema(BaseModel):
|
|
38
|
+
"""Balance amount schema."""
|
|
39
|
+
|
|
40
|
+
amount: str
|
|
41
|
+
currency: str
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class BalanceSchema(BaseModel):
|
|
45
|
+
"""Balance schema."""
|
|
46
|
+
|
|
47
|
+
model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True)
|
|
48
|
+
|
|
49
|
+
balance_amount: BalanceAmountSchema
|
|
50
|
+
balance_type: str
|
|
51
|
+
credit_limit_included: Optional[bool] = None
|
|
52
|
+
last_change_date_time: Optional[str] = None
|
|
53
|
+
last_committed_transaction: Optional[str] = None
|
|
54
|
+
reference_date: Optional[str] = None
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class AccountBalance(BaseModel):
|
|
58
|
+
"""Account balance response."""
|
|
59
|
+
|
|
60
|
+
balances: List[BalanceSchema]
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class Account(BaseModel):
|
|
64
|
+
"""Account model - complete from swagger."""
|
|
65
|
+
|
|
66
|
+
id: str = Field(
|
|
67
|
+
description="The ID of this Account, used to refer to this account in other API calls."
|
|
68
|
+
)
|
|
69
|
+
created: str = Field(
|
|
70
|
+
description="The date & time at which the account object was created."
|
|
71
|
+
)
|
|
72
|
+
last_accessed: Optional[str] = Field(
|
|
73
|
+
None,
|
|
74
|
+
description="The date & time at which the account object was last accessed.",
|
|
75
|
+
)
|
|
76
|
+
iban: Optional[str] = Field(None, description="The Account IBAN")
|
|
77
|
+
bban: Optional[str] = Field(None, description="The Account BBAN")
|
|
78
|
+
status: str = Field(description="The processing status of this account.")
|
|
79
|
+
institution_id: Optional[str] = Field(
|
|
80
|
+
None, description="The ASPSP associated with this account."
|
|
81
|
+
)
|
|
82
|
+
owner_name: Optional[str] = Field(
|
|
83
|
+
None, description="The name of the account owner."
|
|
84
|
+
)
|
|
85
|
+
name: Optional[str] = Field(None, description="The name of account.")
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class AccountSchema(BaseModel):
|
|
89
|
+
"""Account schema for requests."""
|
|
90
|
+
|
|
91
|
+
iban: Optional[str] = Field(None, description="iban")
|
|
92
|
+
bban: Optional[str] = Field(None, description="bban")
|
|
93
|
+
pan: Optional[str] = Field(None, description="pan")
|
|
94
|
+
masked_pan: Optional[str] = Field(None, description="maskedPan")
|
|
95
|
+
msisdn: Optional[str] = Field(None, description="msisdn")
|
|
96
|
+
currency: Optional[str] = Field(None, description="currency")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class AdditionalAccountDataSchema(BaseModel):
|
|
100
|
+
"""Additional account data schema."""
|
|
101
|
+
|
|
102
|
+
owner_name: Optional[List[str]] = Field(
|
|
103
|
+
None, description="Name(s) of the account owner. Multiple names are possible."
|
|
104
|
+
)
|
|
105
|
+
display_name: Optional[str] = Field(
|
|
106
|
+
None, description="Display name of the account."
|
|
107
|
+
)
|
|
108
|
+
product: Optional[str] = Field(None, description="Product name of the account.")
|
|
109
|
+
cash_account_type: Optional[str] = Field(None, description="Cash account type.")
|
|
110
|
+
status: Optional[str] = Field(None, description="Account status.")
|
|
111
|
+
bic: Optional[str] = Field(None, description="BIC associated with the account.")
|
|
112
|
+
linked_accounts: Optional[List[str]] = Field(
|
|
113
|
+
None, description="List of linked account IDs."
|
|
114
|
+
)
|
|
115
|
+
usage: Optional[str] = Field(None, description="Usage type of the account.")
|
|
116
|
+
details: Optional[str] = Field(
|
|
117
|
+
None, description="Additional details about the account."
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class OwnerAddressStructuredSchema(BaseModel):
|
|
122
|
+
"""Owner address structured schema."""
|
|
123
|
+
|
|
124
|
+
street_name: Optional[str] = Field(None, description="Street name.")
|
|
125
|
+
building_number: Optional[str] = Field(None, description="Building number.")
|
|
126
|
+
town_name: Optional[str] = Field(None, description="Town name.")
|
|
127
|
+
post_code: Optional[str] = Field(None, description="Post code.")
|
|
128
|
+
country: Optional[str] = Field(None, description="Country.")
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class DetailSchema(BaseModel):
|
|
132
|
+
"""Detail schema for account details."""
|
|
133
|
+
|
|
134
|
+
resource_id: Optional[str] = Field(None, description="Resource ID.")
|
|
135
|
+
iban: Optional[str] = Field(None, description="IBAN.")
|
|
136
|
+
bban: Optional[str] = Field(None, description="BBAN.")
|
|
137
|
+
pan: Optional[str] = Field(None, description="PAN.")
|
|
138
|
+
masked_pan: Optional[str] = Field(None, description="Masked PAN.")
|
|
139
|
+
msisdn: Optional[str] = Field(None, description="MSISDN.")
|
|
140
|
+
currency: Optional[str] = Field(None, description="Currency.")
|
|
141
|
+
owner_name: Optional[List[str]] = Field(None, description="Owner name(s).")
|
|
142
|
+
name: Optional[str] = Field(None, description="Account name.")
|
|
143
|
+
display_name: Optional[str] = Field(None, description="Display name.")
|
|
144
|
+
product: Optional[str] = Field(None, description="Product.")
|
|
145
|
+
cash_account_type: Optional[str] = Field(None, description="Cash account type.")
|
|
146
|
+
status: Optional[str] = Field(None, description="Status.")
|
|
147
|
+
bic: Optional[str] = Field(None, description="BIC.")
|
|
148
|
+
linked_accounts: Optional[List[str]] = Field(None, description="Linked accounts.")
|
|
149
|
+
usage: Optional[str] = Field(None, description="Usage.")
|
|
150
|
+
details: Optional[str] = Field(None, description="Details.")
|
|
151
|
+
balances: Optional[List[BalanceSchema]] = Field(None, description="Balances.")
|
|
152
|
+
owner_address_structured: Optional[OwnerAddressStructuredSchema] = Field(
|
|
153
|
+
None, description="Owner address."
|
|
154
|
+
)
|
|
155
|
+
owner_address_unstructured: Optional[List[str]] = Field(
|
|
156
|
+
None, description="Owner address unstructured."
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
class AccountDetail(BaseModel):
|
|
161
|
+
"""Account detail response."""
|
|
162
|
+
|
|
163
|
+
account: DetailSchema
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
class TransactionAmountSchema(BaseModel):
|
|
167
|
+
"""Transaction amount schema."""
|
|
168
|
+
|
|
169
|
+
amount: str
|
|
170
|
+
currency: str
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
class InstructedAmount(BaseModel):
|
|
174
|
+
"""Instructed amount schema."""
|
|
175
|
+
|
|
176
|
+
amount: str
|
|
177
|
+
currency: str
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
class CurrencyExchangeSchema(BaseModel):
|
|
181
|
+
"""Currency exchange schema."""
|
|
182
|
+
|
|
183
|
+
source_currency: str
|
|
184
|
+
exchange_rate: Optional[str] = None
|
|
185
|
+
unit_currency: Optional[str] = None
|
|
186
|
+
target_currency: Optional[str] = None
|
|
187
|
+
quotation_date: Optional[str] = None
|
|
188
|
+
contract_identification: Optional[str] = None
|
|
189
|
+
instructed_amount: Optional[InstructedAmount] = None
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
class BalanceAfterTransactionSchema(BaseModel):
|
|
193
|
+
"""Balance after transaction schema."""
|
|
194
|
+
|
|
195
|
+
balance_after_transaction: Optional[BalanceAmountSchema] = None
|
|
196
|
+
balance_type: Optional[str] = None
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
class TransactionSchema(BaseModel):
|
|
200
|
+
"""Transaction schema."""
|
|
201
|
+
|
|
202
|
+
transaction_id: Optional[str] = Field(None, description="Transaction ID.")
|
|
203
|
+
booking_date: Optional[str] = Field(None, description="Booking date.")
|
|
204
|
+
booking_date_time: Optional[str] = Field(None, description="Booking date and time.")
|
|
205
|
+
value_date: Optional[str] = Field(None, description="Value date.")
|
|
206
|
+
value_date_time: Optional[str] = Field(None, description="Value date and time.")
|
|
207
|
+
transaction_amount: TransactionAmountSchema
|
|
208
|
+
currency_exchange: Optional[List[CurrencyExchangeSchema]] = None
|
|
209
|
+
creditor_name: Optional[str] = Field(None, description="Creditor name.")
|
|
210
|
+
creditor_account: Optional[AccountSchema] = None
|
|
211
|
+
creditor_agent: Optional[str] = Field(None, description="Creditor agent.")
|
|
212
|
+
ultimate_creditor: Optional[str] = Field(None, description="Ultimate creditor.")
|
|
213
|
+
debtor_name: Optional[str] = Field(None, description="Debtor name.")
|
|
214
|
+
debtor_account: Optional[AccountSchema] = None
|
|
215
|
+
debtor_agent: Optional[str] = Field(None, description="Debtor agent.")
|
|
216
|
+
ultimate_debtor: Optional[str] = Field(None, description="Ultimate debtor.")
|
|
217
|
+
remittance_information_unstructured: Optional[str] = Field(
|
|
218
|
+
None, description="Unstructured remittance information."
|
|
219
|
+
)
|
|
220
|
+
remittance_information_structured: Optional[str] = Field(
|
|
221
|
+
None, description="Structured remittance information."
|
|
222
|
+
)
|
|
223
|
+
additional_information: Optional[str] = Field(
|
|
224
|
+
None, description="Additional information."
|
|
225
|
+
)
|
|
226
|
+
balance_after_transaction: Optional[BalanceAfterTransactionSchema] = None
|
|
227
|
+
bank_transaction_code: Optional[str] = Field(
|
|
228
|
+
None, description="Bank transaction code."
|
|
229
|
+
)
|
|
230
|
+
proprietary_bank_transaction_code: Optional[str] = Field(
|
|
231
|
+
None, description="Proprietary bank transaction code."
|
|
232
|
+
)
|
|
233
|
+
internal_transaction_id: Optional[str] = Field(
|
|
234
|
+
None, description="Internal transaction ID."
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
class BankTransaction(BaseModel):
|
|
239
|
+
"""Bank transaction - complete transaction model."""
|
|
240
|
+
|
|
241
|
+
model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True)
|
|
242
|
+
|
|
243
|
+
transaction_id: Optional[str] = Field(
|
|
244
|
+
None, description="Unique transaction identifier."
|
|
245
|
+
)
|
|
246
|
+
debtor_name: Optional[str] = Field(None, description="Debtor name.")
|
|
247
|
+
debtor_account: Optional[AccountSchema] = None
|
|
248
|
+
transaction_amount: Optional[TransactionAmountSchema] = None
|
|
249
|
+
booking_date: Optional[str] = Field(None, description="Booking date.")
|
|
250
|
+
value_date: Optional[str] = Field(None, description="Value date.")
|
|
251
|
+
remittance_information_unstructured: Optional[str] = Field(
|
|
252
|
+
None, description="Unstructured remittance information."
|
|
253
|
+
)
|
|
254
|
+
remittance_information_structured: Optional[str] = Field(
|
|
255
|
+
None, description="Structured remittance information."
|
|
256
|
+
)
|
|
257
|
+
additional_information: Optional[str] = Field(
|
|
258
|
+
None, description="Additional information."
|
|
259
|
+
)
|
|
260
|
+
creditor_name: Optional[str] = Field(None, description="Creditor name.")
|
|
261
|
+
creditor_account: Optional[AccountSchema] = None
|
|
262
|
+
currency_exchange: Optional[List[CurrencyExchangeSchema]] = None
|
|
263
|
+
balance_after_transaction: Optional[BalanceAfterTransactionSchema] = None
|
|
264
|
+
bank_transaction_code: Optional[str] = Field(
|
|
265
|
+
None, description="Bank transaction code."
|
|
266
|
+
)
|
|
267
|
+
proprietary_bank_transaction_code: Optional[str] = Field(
|
|
268
|
+
None, description="Proprietary bank transaction code."
|
|
269
|
+
)
|
|
270
|
+
internal_transaction_id: Optional[str] = Field(
|
|
271
|
+
None, description="Internal transaction ID."
|
|
272
|
+
)
|
|
273
|
+
remittance_information_unstructured_array: Optional[List[str]] = Field(
|
|
274
|
+
None, description="Unstructured remittance information array."
|
|
275
|
+
)
|
|
276
|
+
booking_date_time: Optional[str] = Field(None, description="Booking date and time.")
|
|
277
|
+
value_date_time: Optional[str] = Field(None, description="Value date and time.")
|
|
278
|
+
entry_reference: Optional[str] = Field(None, description="Entry reference.")
|
|
279
|
+
additional_information_structured: Optional[str] = Field(
|
|
280
|
+
None, description="Additional structured information."
|
|
281
|
+
)
|
|
282
|
+
card_transaction: Optional[Dict[str, Any]] = Field(
|
|
283
|
+
None, description="Card transaction details."
|
|
284
|
+
)
|
|
285
|
+
merchant_category_code: Optional[str] = Field(
|
|
286
|
+
None, description="Merchant category code."
|
|
287
|
+
)
|
|
288
|
+
creditor_id: Optional[str] = Field(None, description="Creditor ID.")
|
|
289
|
+
mandate_id: Optional[str] = Field(None, description="Mandate ID.")
|
|
290
|
+
transaction_status: Optional[str] = Field(None, description="Transaction status.")
|
|
291
|
+
funds_code: Optional[str] = Field(None, description="Funds code.")
|
|
292
|
+
batch_booking_indicator: Optional[bool] = Field(
|
|
293
|
+
None, description="Batch booking indicator."
|
|
294
|
+
)
|
|
295
|
+
number_of_transactions: Optional[int] = Field(
|
|
296
|
+
None, description="Number of transactions."
|
|
297
|
+
)
|
|
298
|
+
account_servicer_reference: Optional[str] = Field(
|
|
299
|
+
None, description="Account servicer reference."
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
class AccountTransactions(BaseModel):
|
|
304
|
+
"""Account transactions response - complete with all fields."""
|
|
305
|
+
|
|
306
|
+
transactions: Dict[str, List[BankTransaction]] # booked and pending
|
|
307
|
+
last_updated: Optional[str] = Field(
|
|
308
|
+
None, description="The last time the account transactions were updated"
|
|
309
|
+
)
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
class Institution(BaseModel):
|
|
313
|
+
"""Institution model - complete from swagger."""
|
|
314
|
+
|
|
315
|
+
id: str
|
|
316
|
+
name: str
|
|
317
|
+
bic: Optional[str] = None
|
|
318
|
+
transaction_total_days: str
|
|
319
|
+
countries: List[str]
|
|
320
|
+
logo: Optional[str] = None
|
|
321
|
+
total_countries: Optional[int] = None
|
|
322
|
+
supported_payments: Optional[Dict[str, Any]] = None
|
|
323
|
+
supported_features: Optional[List[str]] = None
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
class RequisitionRequest(BaseModel):
|
|
327
|
+
"""Requisition request - complete model."""
|
|
328
|
+
|
|
329
|
+
redirect: str
|
|
330
|
+
institution_id: str
|
|
331
|
+
reference: str
|
|
332
|
+
agreement: Optional[str] = None
|
|
333
|
+
user_language: Optional[str] = None
|
|
334
|
+
ssn: Optional[str] = None
|
|
335
|
+
redirect_immediate: Optional[bool] = None
|
|
336
|
+
account_selection: Optional[bool] = None
|
|
337
|
+
redirect_uri: Optional[str] = None
|
|
338
|
+
access_valid_for_days: Optional[int] = None
|
|
339
|
+
max_historical_days: Optional[int] = None
|
|
340
|
+
access_scope: Optional[List[str]] = None
|
|
341
|
+
additional_id: Optional[str] = None
|
|
342
|
+
accounts: Optional[List[str]] = None
|
|
343
|
+
|
|
344
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
345
|
+
return self.model_dump(exclude_none=True)
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
class Requisition(BaseModel):
|
|
349
|
+
"""Requisition model - complete from swagger."""
|
|
350
|
+
|
|
351
|
+
id: str
|
|
352
|
+
created: str
|
|
353
|
+
redirect: str
|
|
354
|
+
status: StatusEnum
|
|
355
|
+
institution_id: str
|
|
356
|
+
agreement: Optional[str] = None
|
|
357
|
+
reference: str
|
|
358
|
+
accounts: List[str] = []
|
|
359
|
+
user_language: Optional[str] = None
|
|
360
|
+
link: Optional[str] = None
|
|
361
|
+
ssn: Optional[str] = None
|
|
362
|
+
account_selection: Optional[bool] = None
|
|
363
|
+
redirect_immediate: Optional[bool] = None
|
|
364
|
+
enduser_agreement_id: Optional[str] = None
|
|
365
|
+
authentication_user_id: Optional[str] = None
|
|
366
|
+
redirect_uri: Optional[str] = None
|
|
367
|
+
access_valid_for_days: Optional[int] = None
|
|
368
|
+
max_historical_days: Optional[int] = None
|
|
369
|
+
access_scope: Optional[List[str]] = None
|
|
370
|
+
additional_id: Optional[str] = None
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
class SpectacularRequisition(BaseModel):
|
|
374
|
+
"""Spectacular requisition - API documentation model."""
|
|
375
|
+
|
|
376
|
+
id: str
|
|
377
|
+
created: str
|
|
378
|
+
redirect: str
|
|
379
|
+
status: StatusEnum
|
|
380
|
+
institution_id: str
|
|
381
|
+
agreement: Optional[str] = None
|
|
382
|
+
reference: str
|
|
383
|
+
accounts: List[str]
|
|
384
|
+
user_language: Optional[str] = None
|
|
385
|
+
link: Optional[str] = None
|
|
386
|
+
ssn: Optional[str] = None
|
|
387
|
+
account_selection: Optional[bool] = None
|
|
388
|
+
redirect_immediate: Optional[bool] = None
|
|
389
|
+
enduser_agreement_id: Optional[str] = None
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
class PaginatedRequisitionList(BaseModel):
|
|
393
|
+
"""Paginated requisition list."""
|
|
394
|
+
|
|
395
|
+
count: int
|
|
396
|
+
next: Optional[str] = None
|
|
397
|
+
previous: Optional[str] = None
|
|
398
|
+
results: List[Requisition]
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
class EndUserAgreementRequest(BaseModel):
|
|
402
|
+
"""End user agreement request."""
|
|
403
|
+
|
|
404
|
+
institution_id: str
|
|
405
|
+
max_historical_days: int
|
|
406
|
+
access_valid_for_days: int
|
|
407
|
+
access_scope: List[str]
|
|
408
|
+
accepted_usage: Optional[str] = None
|
|
409
|
+
|
|
410
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
411
|
+
return self.model_dump(exclude_none=True)
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
class EndUserAgreement(BaseModel):
|
|
415
|
+
"""End user agreement - complete model."""
|
|
416
|
+
|
|
417
|
+
id: str
|
|
418
|
+
created: str
|
|
419
|
+
accepted: Optional[str] = None
|
|
420
|
+
institution_id: str
|
|
421
|
+
max_historical_days: int
|
|
422
|
+
access_valid_for_days: int
|
|
423
|
+
access_scope: List[str]
|
|
424
|
+
accepted_usage: Optional[str] = None
|
|
425
|
+
locale: Optional[str] = None
|
|
426
|
+
access_valid_until: Optional[str] = None
|
|
427
|
+
accepted_at: Optional[str] = None
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
class PaginatedEndUserAgreementList(BaseModel):
|
|
431
|
+
"""Paginated end user agreement list."""
|
|
432
|
+
|
|
433
|
+
count: int
|
|
434
|
+
next: Optional[str] = None
|
|
435
|
+
previous: Optional[str] = None
|
|
436
|
+
results: List[EndUserAgreement]
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
class EnduserAcceptanceDetailsRequest(BaseModel):
|
|
440
|
+
"""End user acceptance details request."""
|
|
441
|
+
|
|
442
|
+
user_agent: str
|
|
443
|
+
ip: str
|
|
444
|
+
accepted: Optional[bool] = None
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
class ReconfirmationRetrieveRequest(BaseModel):
|
|
448
|
+
"""Reconfirmation retrieve request."""
|
|
449
|
+
|
|
450
|
+
user_agent: str
|
|
451
|
+
ip: str
|
|
452
|
+
redirect: Optional[str] = None
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
class ReconfirmationRetrieve(BaseModel):
|
|
456
|
+
"""Reconfirmation retrieve response."""
|
|
457
|
+
|
|
458
|
+
reconfirmation_id: str
|
|
459
|
+
created: str
|
|
460
|
+
accounts: List[str]
|
|
461
|
+
redirect: Optional[str] = None
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
class SuccessfulDeleteResponse(BaseModel):
|
|
465
|
+
"""Successful delete response."""
|
|
466
|
+
|
|
467
|
+
summary: str
|
|
468
|
+
detail: str
|
|
469
|
+
status_code: int
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
class ErrorResponse(BaseModel):
|
|
473
|
+
"""Error response model."""
|
|
474
|
+
|
|
475
|
+
summary: str
|
|
476
|
+
detail: str
|
|
477
|
+
status_code: int
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
class JWTObtainPairRequest(BaseModel):
|
|
481
|
+
"""JWT obtain pair request."""
|
|
482
|
+
|
|
483
|
+
secret_id: str
|
|
484
|
+
secret_key: str
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
class JWTRefreshRequest(BaseModel):
|
|
488
|
+
"""JWT refresh request."""
|
|
489
|
+
|
|
490
|
+
refresh: str
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
class SpectacularJWTRefresh(BaseModel):
|
|
494
|
+
"""Spectacular JWT refresh response."""
|
|
495
|
+
|
|
496
|
+
access: str
|
|
497
|
+
access_expires: int
|
|
498
|
+
refresh: str
|
|
499
|
+
refresh_expires: int
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
class SpectacularJWTObtain(BaseModel):
|
|
503
|
+
"""Spectacular JWT obtain response."""
|
|
504
|
+
|
|
505
|
+
refresh: str
|
|
506
|
+
access: str
|
|
507
|
+
access_expires: int
|
|
508
|
+
refresh_expires: int
|
|
509
|
+
|
|
510
|
+
|
|
511
|
+
class Integration(BaseModel):
|
|
512
|
+
"""Integration model."""
|
|
513
|
+
|
|
514
|
+
id: str
|
|
515
|
+
name: str
|
|
516
|
+
bic: Optional[str] = None
|
|
517
|
+
transaction_total_days: str
|
|
518
|
+
max_access_valid_for_days: Optional[int] = None
|
|
519
|
+
countries: List[str]
|
|
520
|
+
logo: Optional[str] = None
|
|
521
|
+
supported_payments: Optional[Dict[str, Any]] = None
|
|
522
|
+
supported_features: Optional[List[str]] = None
|
|
523
|
+
identification_codes: Optional[List[str]] = None
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
class IntegrationRetrieve(BaseModel):
|
|
527
|
+
"""Integration retrieve response."""
|
|
528
|
+
|
|
529
|
+
id: str
|
|
530
|
+
name: str
|
|
531
|
+
bic: Optional[str] = None
|
|
532
|
+
transaction_total_days: str
|
|
533
|
+
max_access_valid_for_days: Optional[int] = None
|
|
534
|
+
countries: List[str]
|
|
535
|
+
logo: Optional[str] = None
|
|
536
|
+
supported_payments: Optional[Dict[str, Any]] = None
|
|
537
|
+
supported_features: Optional[List[str]] = None
|
|
538
|
+
identification_codes: Optional[List[str]] = None
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
class AccountConfig(BaseModel):
|
|
542
|
+
id: str
|
|
543
|
+
asset_account: str
|
|
544
|
+
metadata: Dict[str, Any] = {}
|
|
545
|
+
transaction_types: List[str] = ["booked", "pending"]
|
|
546
|
+
|
|
547
|
+
@validator("transaction_types")
|
|
548
|
+
def validate_transaction_types(cls, v):
|
|
549
|
+
allowed = {"booked", "pending"}
|
|
550
|
+
if not set(v).issubset(allowed):
|
|
551
|
+
raise ValueError(
|
|
552
|
+
f"Invalid transaction types: {v}. Must be subset of {allowed}"
|
|
553
|
+
)
|
|
554
|
+
return v
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
class GoCardlessConfig(BaseModel):
|
|
558
|
+
secret_id: str
|
|
559
|
+
secret_key: str
|
|
560
|
+
cache_options: Dict[str, Any] = {}
|
|
561
|
+
accounts: List[AccountConfig]
|