Skip to content

Commit 9687a1e

Browse files
feat(webhooks): add types to the unwrap method (#258)
1 parent a2f83bc commit 9687a1e

14 files changed

+655
-7
lines changed

api.md

+18-1
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,26 @@ Methods:
179179

180180
# Webhooks
181181

182+
Types:
183+
184+
```python
185+
from finch.types import (
186+
AccountUpdateEvent,
187+
BaseWebhookEvent,
188+
CompanyEvent,
189+
DirectoryEvent,
190+
EmploymentEvent,
191+
IndividualEvent,
192+
JobCompletionEvent,
193+
PayStatementEvent,
194+
PaymentEvent,
195+
WebhookEvent,
196+
)
197+
```
198+
182199
Methods:
183200

184-
- <code>client.webhooks.<a href="./src/finch/resources/webhooks.py">unwrap</a>(\*args) -> object</code>
201+
- <code>client.webhooks.<a href="./src/finch/resources/webhooks.py">unwrap</a>(\*args) -> WebhookEvent</code>
185202
- <code>client.webhooks.<a href="./src/finch/resources/webhooks.py">verify_signature</a>(\*args) -> None</code>
186203

187204
# RequestForwarding

src/finch/resources/webhooks.py

+19-4
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,17 @@
77
import math
88
import base64
99
import hashlib
10+
from typing import cast
1011
from datetime import datetime, timezone, timedelta
1112

13+
from ..types import WebhookEvent
1214
from .._types import (
1315
HeadersLike,
1416
)
1517
from .._utils import (
1618
get_required_header,
1719
)
20+
from .._models import construct_type
1821
from .._resource import SyncAPIResource, AsyncAPIResource
1922

2023
__all__ = ["Webhooks", "AsyncWebhooks"]
@@ -27,10 +30,16 @@ def unwrap(
2730
headers: HeadersLike,
2831
*,
2932
secret: str | None = None,
30-
) -> object:
33+
) -> WebhookEvent:
3134
"""Validates that the given payload was sent by Finch and parses the payload."""
3235
self.verify_signature(payload=payload, headers=headers, secret=secret)
33-
return json.loads(payload)
36+
return cast(
37+
WebhookEvent,
38+
construct_type(
39+
value=json.loads(payload),
40+
type_=WebhookEvent, # type: ignore[arg-type]
41+
),
42+
)
3443

3544
def verify_signature(
3645
self,
@@ -120,10 +129,16 @@ def unwrap(
120129
headers: HeadersLike,
121130
*,
122131
secret: str | None = None,
123-
) -> object:
132+
) -> WebhookEvent:
124133
"""Validates that the given payload was sent by Finch and parses the payload."""
125134
self.verify_signature(payload=payload, headers=headers, secret=secret)
126-
return json.loads(payload)
135+
return cast(
136+
WebhookEvent,
137+
construct_type(
138+
value=json.loads(payload),
139+
type_=WebhookEvent, # type: ignore[arg-type]
140+
),
141+
)
127142

128143
def verify_signature(
129144
self,

src/finch/types/__init__.py

+10
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,19 @@
1414
from .provider import Provider as Provider
1515
from .money_param import MoneyParam as MoneyParam
1616
from .income_param import IncomeParam as IncomeParam
17+
from .company_event import CompanyEvent as CompanyEvent
1718
from .introspection import Introspection as Introspection
19+
from .payment_event import PaymentEvent as PaymentEvent
20+
from .webhook_event import WebhookEvent as WebhookEvent
1821
from .location_param import LocationParam as LocationParam
22+
from .directory_event import DirectoryEvent as DirectoryEvent
23+
from .employment_event import EmploymentEvent as EmploymentEvent
24+
from .individual_event import IndividualEvent as IndividualEvent
25+
from .base_webhook_event import BaseWebhookEvent as BaseWebhookEvent
1926
from .disconnect_response import DisconnectResponse as DisconnectResponse
27+
from .pay_statement_event import PayStatementEvent as PayStatementEvent
28+
from .account_update_event import AccountUpdateEvent as AccountUpdateEvent
29+
from .job_completion_event import JobCompletionEvent as JobCompletionEvent
2030
from .access_token_create_params import AccessTokenCreateParams as AccessTokenCreateParams
2131
from .create_access_token_response import CreateAccessTokenResponse as CreateAccessTokenResponse
2232
from .request_forwarding_forward_params import RequestForwardingForwardParams as RequestForwardingForwardParams

0 commit comments

Comments
 (0)