Skip to content

Commit 6a9fd83

Browse files
fix: add async audience aliases (#230)
1 parent 1258807 commit 6a9fd83

2 files changed

Lines changed: 207 additions & 0 deletions

File tree

resend/audiences/_audiences.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,3 +195,91 @@ def remove(cls, id: str) -> RemoveAudienceResponse:
195195
stacklevel=2,
196196
)
197197
return Segments.remove(id)
198+
199+
@classmethod
200+
async def create_async(cls, params: CreateParams) -> CreateAudienceResponse:
201+
"""
202+
Create a list of contacts (async).
203+
see more: https://resend.com/docs/api-reference/audiences/create-audience
204+
205+
Args:
206+
params (CreateParams): The audience creation parameters
207+
208+
Returns:
209+
CreateAudienceResponse: The created audience response
210+
211+
.. deprecated::
212+
Use Segments.create_async() instead. Audiences is now an alias for Segments.
213+
"""
214+
warnings.warn(
215+
"Audiences is deprecated. Use Segments instead.",
216+
DeprecationWarning,
217+
stacklevel=2,
218+
)
219+
return await Segments.create_async(params)
220+
221+
@classmethod
222+
async def list_async(cls, params: Optional[ListParams] = None) -> ListResponse:
223+
"""
224+
Retrieve a list of audiences (async).
225+
see more: https://resend.com/docs/api-reference/audiences/list-audiences
226+
227+
Args:
228+
params (Optional[ListParams]): Optional pagination parameters
229+
230+
Returns:
231+
ListResponse: A list of audience objects
232+
233+
.. deprecated::
234+
Use Segments.list_async() instead. Audiences is now an alias for Segments.
235+
"""
236+
warnings.warn(
237+
"Audiences is deprecated. Use Segments instead.",
238+
DeprecationWarning,
239+
stacklevel=2,
240+
)
241+
return await Segments.list_async(params)
242+
243+
@classmethod
244+
async def get_async(cls, id: str) -> Audience:
245+
"""
246+
Retrieve a single audience (async).
247+
see more: https://resend.com/docs/api-reference/audiences/get-audience
248+
249+
Args:
250+
id (str): The audience ID
251+
252+
Returns:
253+
Audience: The audience object
254+
255+
.. deprecated::
256+
Use Segments.get_async() instead. Audiences is now an alias for Segments.
257+
"""
258+
warnings.warn(
259+
"Audiences is deprecated. Use Segments instead.",
260+
DeprecationWarning,
261+
stacklevel=2,
262+
)
263+
return await Segments.get_async(id)
264+
265+
@classmethod
266+
async def remove_async(cls, id: str) -> RemoveAudienceResponse:
267+
"""
268+
Delete a single audience (async).
269+
see more: https://resend.com/docs/api-reference/audiences/delete-audience
270+
271+
Args:
272+
id (str): The audience ID
273+
274+
Returns:
275+
RemoveAudienceResponse: The removed audience response
276+
277+
.. deprecated::
278+
Use Segments.remove_async() instead. Audiences is now an alias for Segments.
279+
"""
280+
warnings.warn(
281+
"Audiences is deprecated. Use Segments instead.",
282+
DeprecationWarning,
283+
stacklevel=2,
284+
)
285+
return await Segments.remove_async(id)

tests/audiences_async_test.py

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,3 +110,122 @@ async def test_should_list_segments_async_raise_exception_when_no_content(
110110
self.set_mock_json(None)
111111
with pytest.raises(NoContentError):
112112
_ = await resend.Segments.list_async()
113+
114+
115+
class TestResendAudiencesAsync(AsyncResendBaseTest):
116+
async def test_audiences_create_async(self) -> None:
117+
self.set_mock_json(
118+
{
119+
"object": "audience",
120+
"id": "78261eea-8f8b-4381-83c6-79fa7120f1cf",
121+
"name": "Registered Users",
122+
}
123+
)
124+
125+
params: resend.Audiences.CreateParams = {
126+
"name": "Python SDK Audience",
127+
}
128+
with pytest.warns(DeprecationWarning):
129+
audience = await resend.Audiences.create_async(params)
130+
assert audience["id"] == "78261eea-8f8b-4381-83c6-79fa7120f1cf"
131+
assert audience["name"] == "Registered Users"
132+
133+
async def test_audiences_create_async_raises_when_no_content(
134+
self,
135+
) -> None:
136+
self.set_mock_json(None)
137+
params: resend.Audiences.CreateParams = {
138+
"name": "Python SDK Audience",
139+
}
140+
with pytest.warns(DeprecationWarning):
141+
with pytest.raises(NoContentError):
142+
_ = await resend.Audiences.create_async(params)
143+
144+
async def test_audiences_get_async(self) -> None:
145+
self.set_mock_json(
146+
{
147+
"object": "audience",
148+
"id": "78261eea-8f8b-4381-83c6-79fa7120f1cf",
149+
"name": "Registered Users",
150+
"created_at": "2023-10-06T22:59:55.977Z",
151+
}
152+
)
153+
154+
with pytest.warns(DeprecationWarning):
155+
audience = await resend.Audiences.get_async(
156+
id="78261eea-8f8b-4381-83c6-79fa7120f1cf"
157+
)
158+
assert audience["id"] == "78261eea-8f8b-4381-83c6-79fa7120f1cf"
159+
assert audience["name"] == "Registered Users"
160+
assert audience["created_at"] == "2023-10-06T22:59:55.977Z"
161+
162+
async def test_audiences_get_async_raises_when_no_content(
163+
self,
164+
) -> None:
165+
self.set_mock_json(None)
166+
with pytest.warns(DeprecationWarning):
167+
with pytest.raises(NoContentError):
168+
_ = await resend.Audiences.get_async(
169+
id="78261eea-8f8b-4381-83c6-79fa7120f1cf"
170+
)
171+
172+
async def test_audiences_remove_async(self) -> None:
173+
self.set_mock_json(
174+
{
175+
"object": "audience",
176+
"id": "78261eea-8f8b-4381-83c6-79fa7120f1cf",
177+
"deleted": True,
178+
}
179+
)
180+
181+
with pytest.warns(DeprecationWarning):
182+
rmed: resend.Audiences.RemoveAudienceResponse = (
183+
await resend.Audiences.remove_async(
184+
"78261eea-8f8b-4381-83c6-79fa7120f1cf"
185+
)
186+
)
187+
assert rmed["object"] == "audience"
188+
assert rmed["id"] == "78261eea-8f8b-4381-83c6-79fa7120f1cf"
189+
assert rmed["deleted"] is True
190+
191+
async def test_audiences_remove_async_raises_when_no_content(
192+
self,
193+
) -> None:
194+
self.set_mock_json(None)
195+
with pytest.warns(DeprecationWarning):
196+
with pytest.raises(NoContentError):
197+
_ = await resend.Audiences.remove_async(
198+
id="78261eea-8f8b-4381-83c6-79fa7120f1cf"
199+
)
200+
201+
async def test_audiences_list_async(self) -> None:
202+
self.set_mock_json(
203+
{
204+
"object": "list",
205+
"has_more": False,
206+
"data": [
207+
{
208+
"id": "78261eea-8f8b-4381-83c6-79fa7120f1cf",
209+
"name": "Registered Users",
210+
"created_at": "2023-10-06T22:59:55.977Z",
211+
}
212+
],
213+
}
214+
)
215+
216+
with pytest.warns(DeprecationWarning):
217+
audiences: resend.Audiences.ListResponse = (
218+
await resend.Audiences.list_async()
219+
)
220+
assert audiences["object"] == "list"
221+
assert audiences["has_more"] is False
222+
assert audiences["data"][0]["id"] == "78261eea-8f8b-4381-83c6-79fa7120f1cf"
223+
assert audiences["data"][0]["name"] == "Registered Users"
224+
225+
async def test_audiences_list_async_raises_when_no_content(
226+
self,
227+
) -> None:
228+
self.set_mock_json(None)
229+
with pytest.warns(DeprecationWarning):
230+
with pytest.raises(NoContentError):
231+
_ = await resend.Audiences.list_async()

0 commit comments

Comments
 (0)