Skip to content

Commit 43ea95e

Browse files
release: 1.21.0 (#647)
* feat(api): api update (#646) * chore(internal): expand CI branch coverage (#648) * feat(api): benefits mutation API endpoints (create benefit, update benefit, enroll individual, unenroll individual) now properly return async response types (#649) * chore: fix typo (#650) * feat(api): add models for hrs benefits individuals async responses * chore: fix typo * chore(internal): reduce CI branch coverage * release: 1.21.0 --------- Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com>
1 parent c4b8703 commit 43ea95e

20 files changed

+117
-136
lines changed

.github/workflows/ci.yml

-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ jobs:
1212
lint:
1313
name: lint
1414
runs-on: ubuntu-latest
15-
1615
steps:
1716
- uses: actions/checkout@v4
1817

@@ -33,7 +32,6 @@ jobs:
3332
test:
3433
name: test
3534
runs-on: ubuntu-latest
36-
3735
steps:
3836
- uses: actions/checkout@v4
3937

.release-please-manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "1.20.1"
2+
".": "1.21.0"
33
}

.stats.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 46
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-14d375aab89e6b212fe459805a42d6ea7d7da8eae2037ae710a187d06911be1d.yml
3-
openapi_spec_hash: 08b86ecbec3323717d48e4aaee48ed54
4-
config_hash: ce10384813f68ba3fed61c7b601b396b
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bf858f37d7ab420841ddc6329dad8c46377308b6a5c8e935908011d0f9845e22.yml
3+
openapi_spec_hash: 2523952a32436e3c7fd3b55508c2e7ee
4+
config_hash: 53778a0b839c4f6ad34fbba051f5e8a6

CHANGELOG.md

+18
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
# Changelog
22

3+
## 1.21.0 (2025-04-09)
4+
5+
Full Changelog: [v1.20.1...v1.21.0](https://github.com/Finch-API/finch-api-python/compare/v1.20.1...v1.21.0)
6+
7+
### Features
8+
9+
* **api:** add models for hrs benefits individuals async responses ([6452c2c](https://github.com/Finch-API/finch-api-python/commit/6452c2ce11111b2eba1c2cb941ccd32fdd1c5a82))
10+
* **api:** api update ([#646](https://github.com/Finch-API/finch-api-python/issues/646)) ([7ac8751](https://github.com/Finch-API/finch-api-python/commit/7ac875106bdcfb8bfb097b971f48ecd88d06c26a))
11+
* **api:** benefits mutation API endpoints (create benefit, update benefit, enroll individual, unenroll individual) now properly return async response types ([#649](https://github.com/Finch-API/finch-api-python/issues/649)) ([4109f6c](https://github.com/Finch-API/finch-api-python/commit/4109f6cd3a880cab1e7ca9d90d8a29cf0ce737f4))
12+
13+
14+
### Chores
15+
16+
* fix typo ([8772010](https://github.com/Finch-API/finch-api-python/commit/8772010e01df66a41bae7b5689bf7af20f2c0411))
17+
* fix typo ([#650](https://github.com/Finch-API/finch-api-python/issues/650)) ([17dc2ea](https://github.com/Finch-API/finch-api-python/commit/17dc2ea50995d6883ad07a77a4c039a8c097253f))
18+
* **internal:** expand CI branch coverage ([#648](https://github.com/Finch-API/finch-api-python/issues/648)) ([bc6c22d](https://github.com/Finch-API/finch-api-python/commit/bc6c22d497fe8bb886e34095b01016904fe8258d))
19+
* **internal:** reduce CI branch coverage ([bad1202](https://github.com/Finch-API/finch-api-python/commit/bad1202ad8b8e73fb4ae4c8624405997c2ad33e2))
20+
321
## 1.20.1 (2025-04-08)
422

523
Full Changelog: [v1.20.0...v1.20.1](https://github.com/Finch-API/finch-api-python/compare/v1.20.0...v1.20.1)

api.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ from finch.types.hris import (
170170
SupportPerBenefitType,
171171
SupportedBenefit,
172172
UpdateCompanyBenefitResponse,
173+
BenefitListSupportedBenefitsResponse,
173174
BenfitContribution,
174175
)
175176
```
@@ -180,27 +181,27 @@ Methods:
180181
- <code title="get /employer/benefits/{benefit_id}">client.hris.benefits.<a href="./src/finch/resources/hris/benefits/benefits.py">retrieve</a>(benefit_id) -> <a href="./src/finch/types/hris/company_benefit.py">CompanyBenefit</a></code>
181182
- <code title="post /employer/benefits/{benefit_id}">client.hris.benefits.<a href="./src/finch/resources/hris/benefits/benefits.py">update</a>(benefit_id, \*\*<a href="src/finch/types/hris/benefit_update_params.py">params</a>) -> <a href="./src/finch/types/hris/update_company_benefit_response.py">UpdateCompanyBenefitResponse</a></code>
182183
- <code title="get /employer/benefits">client.hris.benefits.<a href="./src/finch/resources/hris/benefits/benefits.py">list</a>() -> <a href="./src/finch/types/hris/company_benefit.py">SyncSinglePage[CompanyBenefit]</a></code>
183-
- <code title="get /employer/benefits/meta">client.hris.benefits.<a href="./src/finch/resources/hris/benefits/benefits.py">list_supported_benefits</a>() -> <a href="./src/finch/types/hris/supported_benefit.py">SyncSinglePage[SupportedBenefit]</a></code>
184+
- <code title="get /employer/benefits/meta">client.hris.benefits.<a href="./src/finch/resources/hris/benefits/benefits.py">list_supported_benefits</a>() -> <a href="./src/finch/types/hris/benefit_list_supported_benefits_response.py">SyncSinglePage[BenefitListSupportedBenefitsResponse]</a></code>
184185

185186
### Individuals
186187

187188
Types:
188189

189190
```python
190191
from finch.types.hris.benefits import (
191-
EnrolledIndividual,
192+
EnrolledIndividualBenefitResponse,
192193
IndividualBenefit,
193-
UnenrolledIndividual,
194+
UnenrolledIndividualBenefitResponse,
194195
IndividualEnrolledIDsResponse,
195196
)
196197
```
197198

198199
Methods:
199200

200-
- <code title="post /employer/benefits/{benefit_id}/individuals">client.hris.benefits.individuals.<a href="./src/finch/resources/hris/benefits/individuals.py">enroll_many</a>(benefit_id, \*\*<a href="src/finch/types/hris/benefits/individual_enroll_many_params.py">params</a>) -> <a href="./src/finch/types/hris/benefits/enrolled_individual.py">SyncSinglePage[EnrolledIndividual]</a></code>
201+
- <code title="post /employer/benefits/{benefit_id}/individuals">client.hris.benefits.individuals.<a href="./src/finch/resources/hris/benefits/individuals.py">enroll_many</a>(benefit_id, \*\*<a href="src/finch/types/hris/benefits/individual_enroll_many_params.py">params</a>) -> <a href="./src/finch/types/hris/benefits/enrolled_individual_benefit_response.py">EnrolledIndividualBenefitResponse</a></code>
201202
- <code title="get /employer/benefits/{benefit_id}/enrolled">client.hris.benefits.individuals.<a href="./src/finch/resources/hris/benefits/individuals.py">enrolled_ids</a>(benefit_id) -> <a href="./src/finch/types/hris/benefits/individual_enrolled_ids_response.py">IndividualEnrolledIDsResponse</a></code>
202203
- <code title="get /employer/benefits/{benefit_id}/individuals">client.hris.benefits.individuals.<a href="./src/finch/resources/hris/benefits/individuals.py">retrieve_many_benefits</a>(benefit_id, \*\*<a href="src/finch/types/hris/benefits/individual_retrieve_many_benefits_params.py">params</a>) -> <a href="./src/finch/types/hris/benefits/individual_benefit.py">SyncSinglePage[IndividualBenefit]</a></code>
203-
- <code title="delete /employer/benefits/{benefit_id}/individuals">client.hris.benefits.individuals.<a href="./src/finch/resources/hris/benefits/individuals.py">unenroll_many</a>(benefit_id, \*\*<a href="src/finch/types/hris/benefits/individual_unenroll_many_params.py">params</a>) -> <a href="./src/finch/types/hris/benefits/unenrolled_individual.py">SyncSinglePage[UnenrolledIndividual]</a></code>
204+
- <code title="delete /employer/benefits/{benefit_id}/individuals">client.hris.benefits.individuals.<a href="./src/finch/resources/hris/benefits/individuals.py">unenroll_many</a>(benefit_id, \*\*<a href="src/finch/types/hris/benefits/individual_unenroll_many_params.py">params</a>) -> <a href="./src/finch/types/hris/benefits/unenrolled_individual_benefit_response.py">UnenrolledIndividualBenefitResponse</a></code>
204205

205206
# Providers
206207

pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "finch-api"
3-
version = "1.20.1"
3+
version = "1.21.0"
44
description = "The official Python library for the Finch API"
55
dynamic = ["readme"]
66
license = "Apache-2.0"

src/finch/_version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22

33
__title__ = "finch"
4-
__version__ = "1.20.1" # x-release-please-version
4+
__version__ = "1.21.0" # x-release-please-version

src/finch/resources/hris/benefits/benefits.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@
2929
from ....types.hris.benefit_type import BenefitType
3030
from ....types.hris.company_benefit import CompanyBenefit
3131
from ....types.hris.benefit_frequency import BenefitFrequency
32-
from ....types.hris.supported_benefit import SupportedBenefit
3332
from ....types.hris.update_company_benefit_response import UpdateCompanyBenefitResponse
3433
from ....types.hris.create_company_benefits_response import CreateCompanyBenefitsResponse
34+
from ....types.hris.benefit_list_supported_benefits_response import BenefitListSupportedBenefitsResponse
3535

3636
__all__ = ["Benefits", "AsyncBenefits"]
3737

@@ -210,15 +210,15 @@ def list_supported_benefits(
210210
extra_query: Query | None = None,
211211
extra_body: Body | None = None,
212212
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
213-
) -> SyncSinglePage[SupportedBenefit]:
213+
) -> SyncSinglePage[BenefitListSupportedBenefitsResponse]:
214214
"""Get deductions metadata"""
215215
return self._get_api_list(
216216
"/employer/benefits/meta",
217-
page=SyncSinglePage[SupportedBenefit],
217+
page=SyncSinglePage[BenefitListSupportedBenefitsResponse],
218218
options=make_request_options(
219219
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
220220
),
221-
model=SupportedBenefit,
221+
model=BenefitListSupportedBenefitsResponse,
222222
)
223223

224224

@@ -396,15 +396,15 @@ def list_supported_benefits(
396396
extra_query: Query | None = None,
397397
extra_body: Body | None = None,
398398
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
399-
) -> AsyncPaginator[SupportedBenefit, AsyncSinglePage[SupportedBenefit]]:
399+
) -> AsyncPaginator[BenefitListSupportedBenefitsResponse, AsyncSinglePage[BenefitListSupportedBenefitsResponse]]:
400400
"""Get deductions metadata"""
401401
return self._get_api_list(
402402
"/employer/benefits/meta",
403-
page=AsyncSinglePage[SupportedBenefit],
403+
page=AsyncSinglePage[BenefitListSupportedBenefitsResponse],
404404
options=make_request_options(
405405
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
406406
),
407-
model=SupportedBenefit,
407+
model=BenefitListSupportedBenefitsResponse,
408408
)
409409

410410

src/finch/resources/hris/benefits/individuals.py

+22-27
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88

99
from .... import _legacy_response
1010
from ...._types import NOT_GIVEN, Body, Query, Headers, NotGiven
11-
from ...._utils import maybe_transform
11+
from ...._utils import (
12+
maybe_transform,
13+
async_maybe_transform,
14+
)
1215
from ...._compat import cached_property
1316
from ...._resource import SyncAPIResource, AsyncAPIResource
1417
from ...._response import to_streamed_response_wrapper, async_to_streamed_response_wrapper
@@ -20,9 +23,9 @@
2023
individual_retrieve_many_benefits_params,
2124
)
2225
from ....types.hris.benefits.individual_benefit import IndividualBenefit
23-
from ....types.hris.benefits.enrolled_individual import EnrolledIndividual
24-
from ....types.hris.benefits.unenrolled_individual import UnenrolledIndividual
2526
from ....types.hris.benefits.individual_enrolled_ids_response import IndividualEnrolledIDsResponse
27+
from ....types.hris.benefits.enrolled_individual_benefit_response import EnrolledIndividualBenefitResponse
28+
from ....types.hris.benefits.unenrolled_individual_benefit_response import UnenrolledIndividualBenefitResponse
2629

2730
__all__ = ["Individuals", "AsyncIndividuals"]
2831

@@ -58,7 +61,7 @@ def enroll_many(
5861
extra_query: Query | None = None,
5962
extra_body: Body | None = None,
6063
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
61-
) -> SyncSinglePage[EnrolledIndividual]:
64+
) -> EnrolledIndividualBenefitResponse:
6265
"""Enroll an individual into a deduction or contribution.
6366
6467
This is an overwrite
@@ -79,15 +82,13 @@ def enroll_many(
7982
"""
8083
if not benefit_id:
8184
raise ValueError(f"Expected a non-empty value for `benefit_id` but received {benefit_id!r}")
82-
return self._get_api_list(
85+
return self._post(
8386
f"/employer/benefits/{benefit_id}/individuals",
84-
page=SyncSinglePage[EnrolledIndividual],
8587
body=maybe_transform(individuals, Iterable[individual_enroll_many_params.Individual]),
8688
options=make_request_options(
8789
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
8890
),
89-
model=EnrolledIndividual,
90-
method="post",
91+
cast_to=EnrolledIndividualBenefitResponse,
9192
)
9293

9394
def enrolled_ids(
@@ -179,7 +180,7 @@ def unenroll_many(
179180
extra_query: Query | None = None,
180181
extra_body: Body | None = None,
181182
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
182-
) -> SyncSinglePage[UnenrolledIndividual]:
183+
) -> UnenrolledIndividualBenefitResponse:
183184
"""
184185
Unenroll individuals from a deduction or contribution
185186
@@ -196,17 +197,15 @@ def unenroll_many(
196197
"""
197198
if not benefit_id:
198199
raise ValueError(f"Expected a non-empty value for `benefit_id` but received {benefit_id!r}")
199-
return self._get_api_list(
200+
return self._delete(
200201
f"/employer/benefits/{benefit_id}/individuals",
201-
page=SyncSinglePage[UnenrolledIndividual],
202202
body=maybe_transform(
203203
{"individual_ids": individual_ids}, individual_unenroll_many_params.IndividualUnenrollManyParams
204204
),
205205
options=make_request_options(
206206
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
207207
),
208-
model=UnenrolledIndividual,
209-
method="delete",
208+
cast_to=UnenrolledIndividualBenefitResponse,
210209
)
211210

212211

@@ -230,7 +229,7 @@ def with_streaming_response(self) -> AsyncIndividualsWithStreamingResponse:
230229
"""
231230
return AsyncIndividualsWithStreamingResponse(self)
232231

233-
def enroll_many(
232+
async def enroll_many(
234233
self,
235234
benefit_id: str,
236235
*,
@@ -241,7 +240,7 @@ def enroll_many(
241240
extra_query: Query | None = None,
242241
extra_body: Body | None = None,
243242
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
244-
) -> AsyncPaginator[EnrolledIndividual, AsyncSinglePage[EnrolledIndividual]]:
243+
) -> EnrolledIndividualBenefitResponse:
245244
"""Enroll an individual into a deduction or contribution.
246245
247246
This is an overwrite
@@ -262,15 +261,13 @@ def enroll_many(
262261
"""
263262
if not benefit_id:
264263
raise ValueError(f"Expected a non-empty value for `benefit_id` but received {benefit_id!r}")
265-
return self._get_api_list(
264+
return await self._post(
266265
f"/employer/benefits/{benefit_id}/individuals",
267-
page=AsyncSinglePage[EnrolledIndividual],
268-
body=maybe_transform(individuals, Iterable[individual_enroll_many_params.Individual]),
266+
body=await async_maybe_transform(individuals, Iterable[individual_enroll_many_params.Individual]),
269267
options=make_request_options(
270268
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
271269
),
272-
model=EnrolledIndividual,
273-
method="post",
270+
cast_to=EnrolledIndividualBenefitResponse,
274271
)
275272

276273
async def enrolled_ids(
@@ -351,7 +348,7 @@ def retrieve_many_benefits(
351348
model=IndividualBenefit,
352349
)
353350

354-
def unenroll_many(
351+
async def unenroll_many(
355352
self,
356353
benefit_id: str,
357354
*,
@@ -362,7 +359,7 @@ def unenroll_many(
362359
extra_query: Query | None = None,
363360
extra_body: Body | None = None,
364361
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
365-
) -> AsyncPaginator[UnenrolledIndividual, AsyncSinglePage[UnenrolledIndividual]]:
362+
) -> UnenrolledIndividualBenefitResponse:
366363
"""
367364
Unenroll individuals from a deduction or contribution
368365
@@ -379,17 +376,15 @@ def unenroll_many(
379376
"""
380377
if not benefit_id:
381378
raise ValueError(f"Expected a non-empty value for `benefit_id` but received {benefit_id!r}")
382-
return self._get_api_list(
379+
return await self._delete(
383380
f"/employer/benefits/{benefit_id}/individuals",
384-
page=AsyncSinglePage[UnenrolledIndividual],
385-
body=maybe_transform(
381+
body=await async_maybe_transform(
386382
{"individual_ids": individual_ids}, individual_unenroll_many_params.IndividualUnenrollManyParams
387383
),
388384
options=make_request_options(
389385
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
390386
),
391-
model=UnenrolledIndividual,
392-
method="delete",
387+
cast_to=UnenrolledIndividualBenefitResponse,
393388
)
394389

395390

src/finch/types/hris/__init__.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from .benefits_support import BenefitsSupport as BenefitsSupport
1515
from .benefit_frequency import BenefitFrequency as BenefitFrequency
1616
from .document_response import DocumentResponse as DocumentResponse
17-
from .supported_benefit import SupportedBenefit as SupportedBenefit
1817
from .benfit_contribution import BenfitContribution as BenfitContribution
1918
from .individual_response import IndividualResponse as IndividualResponse
2019
from .payment_list_params import PaymentListParams as PaymentListParams
@@ -37,3 +36,6 @@
3736
from .create_company_benefits_response import CreateCompanyBenefitsResponse as CreateCompanyBenefitsResponse
3837
from .directory_list_individuals_params import DirectoryListIndividualsParams as DirectoryListIndividualsParams
3938
from .pay_statement_retrieve_many_params import PayStatementRetrieveManyParams as PayStatementRetrieveManyParams
39+
from .benefit_list_supported_benefits_response import (
40+
BenefitListSupportedBenefitsResponse as BenefitListSupportedBenefitsResponse,
41+
)

src/finch/types/hris/supported_benefit.py renamed to src/finch/types/hris/benefit_list_supported_benefits_response.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@
44
from typing_extensions import Literal
55

66
from ..._models import BaseModel
7-
from .benefit_type import BenefitType
87
from .benefit_frequency import BenefitFrequency
98

10-
__all__ = ["SupportedBenefit"]
9+
__all__ = ["BenefitListSupportedBenefitsResponse"]
1110

1211

13-
class SupportedBenefit(BaseModel):
12+
class BenefitListSupportedBenefitsResponse(BaseModel):
1413
annual_maximum: Optional[bool] = None
1514
"""Whether the provider supports an annual maximum for this benefit."""
1615

@@ -43,6 +42,3 @@ class SupportedBenefit(BaseModel):
4342
Empty if this feature is not supported for the benefit. This array only has
4443
values for HSA benefits.
4544
"""
46-
47-
type: Optional[BenefitType] = None
48-
"""Type of benefit."""

src/finch/types/hris/benefits/__init__.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
from __future__ import annotations
44

55
from .individual_benefit import IndividualBenefit as IndividualBenefit
6-
from .enrolled_individual import EnrolledIndividual as EnrolledIndividual
7-
from .unenrolled_individual import UnenrolledIndividual as UnenrolledIndividual
86
from .individual_enroll_many_params import IndividualEnrollManyParams as IndividualEnrollManyParams
97
from .individual_unenroll_many_params import IndividualUnenrollManyParams as IndividualUnenrollManyParams
108
from .individual_enrolled_ids_response import IndividualEnrolledIDsResponse as IndividualEnrolledIDsResponse
9+
from .enrolled_individual_benefit_response import EnrolledIndividualBenefitResponse as EnrolledIndividualBenefitResponse
10+
from .unenrolled_individual_benefit_response import (
11+
UnenrolledIndividualBenefitResponse as UnenrolledIndividualBenefitResponse,
12+
)
1113
from .individual_retrieve_many_benefits_params import (
1214
IndividualRetrieveManyBenefitsParams as IndividualRetrieveManyBenefitsParams,
1315
)

src/finch/types/hris/benefits/enrolled_individual.py

-28
This file was deleted.

0 commit comments

Comments
 (0)