Skip to content

Commit f24e52f

Browse files
authored
adds webhook status patch (#64)
* adds webhook status patch * fix tests * version bump
1 parent 16a4e1a commit f24e52f

File tree

10 files changed

+121
-253
lines changed

10 files changed

+121
-253
lines changed

method/resource.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,10 @@ def _update_with_id(self, _id: str, data: Dict) -> MethodResponse[T]:
238238
def _update(self, data: Dict) -> MethodResponse[T]:
239239
return self._make_request('PUT', data=data)
240240

241+
@MethodError.catch
242+
def _patch_with_id(self, _id: str, data: Dict) -> MethodResponse[T]:
243+
return self._make_request('PATCH', path=_id, data=data)
244+
241245
@MethodError.catch
242246
def _update_with_sub_path(self, path: str, data: Dict) -> MethodResponse[T]:
243247
return self._make_request('PUT', path=path, data=data)

method/resources/Accounts/Products.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313

1414

1515
class AccountProduct(TypedDict):
16-
id: str
1716
name: str
1817
status: AccountProductTypeStatusLiterals
1918
status_error: Optional[ResourceError]
2019
latest_request_id: str
20+
latest_successful_request_id: str
2121
is_subscribable: bool
2222
created_at: str
2323
updated_at: str

method/resources/Entities/Connect.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ class EntityConnect(TypedDict):
4040
id: str
4141
status: EntityConnectResponseStatusLiterals
4242
accounts: Optional[List[str]]
43+
requested_products: Optional[List[str]]
44+
requested_subscriptions: Optional[List[str]]
4345
error: Optional[ResourceError]
4446
created_at: str
4547
updated_at: str

method/resources/Entities/Products.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313

1414

1515
class EntityProduct(TypedDict):
16-
id: str
1716
name: str
1817
status: EntityProductTypeStatusLiterals
1918
status_error: Optional[ResourceError]
2019
latest_request_id: str
20+
latest_successful_request_id: str
2121
is_subscribable: bool
2222
created_at: str
2323
updated_at: str

method/resources/Webhook.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ class WebhookCreateOpts(TypedDict):
8989
expand_event: Optional[bool]
9090

9191

92+
class WebhookUpdateOpts(TypedDict):
93+
status: Optional[str]
94+
95+
9296
class WebhookResource(Resource):
9397
def __init__(self, config: Configuration):
9498
super(WebhookResource, self).__init__(config.add_path('webhooks'))
@@ -105,3 +109,6 @@ def list(self) -> MethodResponse[List[Webhook]]:
105109

106110
def create(self, opts: WebhookCreateOpts, request_opts: Optional[RequestOpts] = None) -> MethodResponse[Webhook]:
107111
return super(WebhookResource, self)._create(opts, request_opts)
112+
113+
def update(self, _id: str, opts: WebhookUpdateOpts) -> MethodResponse[Webhook]:
114+
return super(WebhookResource, self)._patch_with_id(_id, opts)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name='method-python',
5-
version='1.2.5',
5+
version='1.2.6',
66
description='Python library for the Method API',
77
long_description='Python library for the Method API',
88
long_description_content_type='text/x-rst',

test/resources/Account_test.py

Lines changed: 12 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ def test_create_liability_account(setup):
169169
'attribute': accounts_create_liability_response['attribute'],
170170
'card_brand': None,
171171
'payment_instrument': None,
172+
'payoff': None,
172173
'products': accounts_create_liability_response['products'],
173174
'restricted_products': accounts_create_liability_response['restricted_products'],
174175
'subscriptions': accounts_create_liability_response['subscriptions'],
@@ -339,7 +340,7 @@ def test_retrieve_card_brands(setup):
339340
assert card_retrieve_response[k] == v
340341

341342
brand = card_retrieve_response['brands'][0]
342-
assert brand['id'] == 'brand_UBwVzXjpP4PJ6'
343+
assert brand['id'] == 'pdt_15_brd_1'
343344
assert brand['name'] == 'Chase Sapphire Reserve'
344345
assert brand['url'] == 'https://static.methodfi.com/card_brands/1b7ccaba6535cb837f802d968add4700.png'
345346
assert isinstance(brand['art_id'], str) and brand['art_id'].startswith('art_')
@@ -364,7 +365,7 @@ async def test_list_card_brands(setup):
364365
assert result['updated_at'] == result['updated_at']
365366

366367
brand = result['brands'][0]
367-
assert brand['id'] == 'brand_UBwVzXjpP4PJ6'
368+
assert brand['id'] == 'pdt_15_brd_1'
368369
assert brand['name'] == 'Chase Sapphire Reserve'
369370
assert brand['url'] == 'https://static.methodfi.com/card_brands/1b7ccaba6535cb837f802d968add4700.png'
370371
assert isinstance(brand['art_id'], str) and brand['art_id'].startswith('art_')
@@ -1011,91 +1012,91 @@ def test_list_account_products(setup):
10111012

10121013
expect_results: AccountProductListResponse = {
10131014
'balance': {
1014-
'id': account_products_list_response.get('balance', {}).get('id', ''),
10151015
'name': 'balance',
10161016
'status': 'available',
10171017
'status_error': None,
10181018
'latest_request_id': account_products_list_response.get('balance', {}).get('latest_request_id', None),
1019+
'latest_successful_request_id': account_products_list_response.get('balance', {}).get('latest_successful_request_id', None),
10191020
'is_subscribable': False,
10201021
'created_at': account_products_list_response.get('balance', {}).get('created_at', ''),
10211022
'updated_at': account_products_list_response.get('balance', {}).get('updated_at', ''),
10221023
},
10231024
'payment': {
1024-
'id': account_products_list_response.get('payment', {}).get('id', ''),
10251025
'name': 'payment',
10261026
'status': 'available',
10271027
'status_error': None,
10281028
'latest_request_id': account_products_list_response.get('payment', {}).get('latest_request_id', None),
1029+
'latest_successful_request_id': account_products_list_response.get('payment', {}).get('latest_successful_request_id', None),
10291030
'is_subscribable': False,
10301031
'created_at': account_products_list_response.get('payment', {}).get('created_at', ''),
10311032
'updated_at': account_products_list_response.get('payment', {}).get('updated_at', ''),
10321033
},
10331034
'sensitive': {
1034-
'id': account_products_list_response.get('sensitive', {}).get('id', ''),
10351035
'name': 'sensitive',
10361036
'status': 'available',
10371037
'status_error': None,
10381038
'latest_request_id': account_products_list_response.get('sensitive', {}).get('latest_request_id', None),
1039+
'latest_successful_request_id': account_products_list_response.get('sensitive', {}).get('latest_successful_request_id', None),
10391040
'is_subscribable': False,
10401041
'created_at': account_products_list_response.get('sensitive', {}).get('created_at', ''),
10411042
'updated_at': account_products_list_response.get('sensitive', {}).get('updated_at', ''),
10421043
},
10431044
'update': {
1044-
'id': account_products_list_response.get('update', {}).get('id', ''),
10451045
'name': 'update',
10461046
'status': 'available',
10471047
'status_error': None,
10481048
'latest_request_id': account_products_list_response.get('update', {}).get('latest_request_id', None),
1049+
'latest_successful_request_id': account_products_list_response.get('update', {}).get('latest_successful_request_id', None),
10491050
'is_subscribable': True,
10501051
'created_at': account_products_list_response.get('update', {}).get('created_at', ''),
10511052
'updated_at': account_products_list_response.get('update', {}).get('updated_at', ''),
10521053
},
10531054
'attribute': {
1054-
'id': account_products_list_response.get('attribute', {}).get('id', ''),
10551055
'name': 'attribute',
10561056
'status': 'available',
10571057
'status_error': None,
10581058
'latest_request_id': account_products_list_response.get('attribute', {}).get('latest_request_id', None),
1059+
'latest_successful_request_id': account_products_list_response.get('attribute', {}).get('latest_successful_request_id', None),
10591060
'is_subscribable': False,
10601061
'created_at': account_products_list_response.get('attribute', {}).get('created_at', ''),
10611062
'updated_at': account_products_list_response.get('attribute', {}).get('updated_at', ''),
10621063
},
10631064
'transaction': {
1064-
'id': account_products_list_response.get('transaction', {}).get('id', ''),
10651065
'name': 'transaction',
10661066
'status': 'unavailable',
10671067
'status_error': account_products_list_response.get('transaction', {}).get('status_error', None),
10681068
'latest_request_id': account_products_list_response.get('transaction', {}).get('latest_request_id', None),
1069+
'latest_successful_request_id': account_products_list_response.get('transaction', {}).get('latest_successful_request_id', None),
10691070
'is_subscribable': True,
10701071
'created_at': account_products_list_response.get('transaction', {}).get('created_at', ''),
10711072
'updated_at': account_products_list_response.get('transaction', {}).get('updated_at', ''),
10721073
},
10731074
'payoff': {
1074-
'id': account_products_list_response.get('payoff', {}).get('id', ''),
10751075
'name': 'payoff',
10761076
'status': 'unavailable',
10771077
'status_error': account_products_list_response.get('payoff', {}).get('status_error', None),
10781078
'latest_request_id': account_products_list_response.get('payoff', {}).get('latest_request_id', None),
1079+
'latest_successful_request_id': account_products_list_response.get('payoff', {}).get('latest_successful_request_id', None),
10791080
'is_subscribable': False,
10801081
'created_at': account_products_list_response.get('payoff', {}).get('created_at', ''),
10811082
'updated_at': account_products_list_response.get('payoff', {}).get('updated_at', ''),
10821083
},
10831084
'card_brand': {
1084-
'id': account_products_list_response.get('card_brand', {}).get('id', ''),
10851085
'name': 'card_brand',
10861086
'status': 'available',
10871087
'status_error': None,
10881088
'latest_request_id': account_products_list_response.get('card_brand', {}).get('latest_request_id', None),
1089+
'latest_successful_request_id': account_products_list_response.get('card_brand', {}).get('latest_successful_request_id', None),
10891090
'is_subscribable': True,
10901091
'created_at': account_products_list_response.get('card_brand', {}).get('created_at', ''),
10911092
'updated_at': account_products_list_response.get('card_brand', {}).get('updated_at', ''),
10921093
},
10931094
'payment_instrument': {
1094-
'id': account_products_list_response.get('payment_instrument', {}).get('id', ''),
10951095
'name': 'payment_instrument',
10961096
'status': 'restricted',
10971097
'status_error': account_products_list_response.get('payment_instrument', {}).get('status_error', None),
10981098
'latest_request_id': account_products_list_response.get('payment_instrument', {}).get('latest_request_id', None),
1099+
'latest_successful_request_id': account_products_list_response.get('payment_instrument', {}).get('latest_successful_request_id', None),
10991100
'is_subscribable': True,
11001101
'created_at': account_products_list_response.get('payment_instrument', {}).get('created_at', ''),
11011102
'updated_at': account_products_list_response.get('payment_instrument', {}).get('updated_at', ''),
@@ -1104,112 +1105,6 @@ def test_list_account_products(setup):
11041105

11051106
assert account_products_list_response == expect_results
11061107

1107-
1108-
def test_retrieve_account_product(setup):
1109-
test_credit_card_account = setup['test_credit_card_account']
1110-
account_products_list_response = method.accounts(test_credit_card_account['id']).products.list()
1111-
1112-
balance_product_id = account_products_list_response.get('balance', {}).get('id', '')
1113-
payment_product_id = account_products_list_response.get('payment', {}).get('id', '')
1114-
sensitive_product_id = account_products_list_response.get('sensitive', {}).get('id', '')
1115-
update_product_id = account_products_list_response.get('update', {}).get('id', '')
1116-
attribute_product_id = account_products_list_response.get('attribute', {}).get('id', '')
1117-
transaction_product_id = account_products_list_response.get('transaction', {}).get('id', '')
1118-
payment_instrument_product_id = account_products_list_response.get('payment_instrument', {}).get('id', '')
1119-
1120-
balance_product_response = method.accounts(test_credit_card_account['id']).products.retrieve(balance_product_id)
1121-
payment_product_response = method.accounts(test_credit_card_account['id']).products.retrieve(payment_product_id)
1122-
sensitive_product_response = method.accounts(test_credit_card_account['id']).products.retrieve(sensitive_product_id)
1123-
update_product_response = method.accounts(test_credit_card_account['id']).products.retrieve(update_product_id)
1124-
attribute_product_response = method.accounts(test_credit_card_account['id']).products.retrieve(attribute_product_id)
1125-
transaction_product_response = method.accounts(test_credit_card_account['id']).products.retrieve(transaction_product_id)
1126-
payment_instrument_product_response = method.accounts(test_credit_card_account['id']).products.retrieve(payment_instrument_product_id)
1127-
1128-
expect_balance_results: AccountProduct = {
1129-
'id': balance_product_id,
1130-
'name': 'balance',
1131-
'status': 'available',
1132-
'status_error': None,
1133-
'latest_request_id': balance_product_response['latest_request_id'],
1134-
'is_subscribable': False,
1135-
'created_at': balance_product_response['created_at'],
1136-
'updated_at': balance_product_response['updated_at']
1137-
}
1138-
1139-
expect_payment_results: AccountProduct = {
1140-
'id': payment_product_id,
1141-
'name': 'payment',
1142-
'status': 'available',
1143-
'status_error': None,
1144-
'latest_request_id': payment_product_response['latest_request_id'],
1145-
'is_subscribable': False,
1146-
'created_at': payment_product_response['created_at'],
1147-
'updated_at': payment_product_response['updated_at']
1148-
}
1149-
1150-
expect_sensitive_results: AccountProduct = {
1151-
'id': sensitive_product_id,
1152-
'name': 'sensitive',
1153-
'status': 'available',
1154-
'status_error': None,
1155-
'latest_request_id': sensitive_product_response['latest_request_id'],
1156-
'is_subscribable': False,
1157-
'created_at': sensitive_product_response['created_at'],
1158-
'updated_at': sensitive_product_response['updated_at']
1159-
}
1160-
1161-
expect_update_results: AccountProduct = {
1162-
'id': update_product_id,
1163-
'name': 'update',
1164-
'status': 'available',
1165-
'status_error': None,
1166-
'latest_request_id': update_product_response['latest_request_id'],
1167-
'is_subscribable': True,
1168-
'created_at': update_product_response['created_at'],
1169-
'updated_at': update_product_response['updated_at']
1170-
}
1171-
1172-
expect_attribute_results: AccountProduct = {
1173-
'id': attribute_product_id,
1174-
'name': 'attribute',
1175-
'status': 'available',
1176-
'status_error': None,
1177-
'latest_request_id': attribute_product_response['latest_request_id'],
1178-
'is_subscribable': False,
1179-
'created_at': attribute_product_response['created_at'],
1180-
'updated_at': attribute_product_response['updated_at']
1181-
}
1182-
1183-
expect_transaction_results: AccountProduct = {
1184-
'id': transaction_product_id,
1185-
'name': 'transaction',
1186-
'status': 'unavailable',
1187-
'status_error': transaction_product_response['status_error'],
1188-
'latest_request_id': transaction_product_response['latest_request_id'],
1189-
'is_subscribable': True,
1190-
'created_at': transaction_product_response['created_at'],
1191-
'updated_at': transaction_product_response['updated_at']
1192-
}
1193-
1194-
expect_payment_instrument_results: AccountProduct = {
1195-
'id': payment_instrument_product_id,
1196-
'name': 'payment_instrument',
1197-
'status': 'restricted',
1198-
'status_error': payment_instrument_product_response['status_error'],
1199-
'latest_request_id': payment_instrument_product_response['latest_request_id'],
1200-
'is_subscribable': True,
1201-
'created_at': payment_instrument_product_response['created_at'],
1202-
'updated_at': payment_instrument_product_response['updated_at']
1203-
}
1204-
1205-
assert balance_product_response == expect_balance_results
1206-
assert payment_product_response == expect_payment_results
1207-
assert sensitive_product_response == expect_sensitive_results
1208-
assert update_product_response == expect_update_results
1209-
assert attribute_product_response == expect_attribute_results
1210-
assert transaction_product_response == expect_transaction_results
1211-
assert payment_instrument_product_response == expect_payment_instrument_results
1212-
12131108
def test_withdraw_account_consent(setup):
12141109
test_credit_card_account = setup['test_credit_card_account']
12151110
holder_1_response = setup['holder_1_response']

0 commit comments

Comments
 (0)