Skip to content

Commit d60bb7d

Browse files
feat(api): add types for application jobs (#171)
1 parent 65405ec commit d60bb7d

File tree

7 files changed

+61
-72
lines changed

7 files changed

+61
-72
lines changed

api.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,18 @@ Types:
3636

3737
```python
3838
from writerai.types.applications import (
39+
ApplicationGenerateAsyncResponse,
40+
ApplicationJobsListResponse,
3941
JobCreateResponse,
40-
JobRetrieveResponse,
41-
JobListResponse,
4242
JobRetryResponse,
4343
)
4444
```
4545

4646
Methods:
4747

4848
- <code title="post /v1/applications/{application_id}/jobs">client.applications.jobs.<a href="./src/writerai/resources/applications/jobs.py">create</a>(application_id, \*\*<a href="src/writerai/types/applications/job_create_params.py">params</a>) -> <a href="./src/writerai/types/applications/job_create_response.py">JobCreateResponse</a></code>
49-
- <code title="get /v1/applications/jobs/{job_id}">client.applications.jobs.<a href="./src/writerai/resources/applications/jobs.py">retrieve</a>(job_id) -> <a href="./src/writerai/types/applications/job_retrieve_response.py">JobRetrieveResponse</a></code>
50-
- <code title="get /v1/applications/{application_id}/jobs">client.applications.jobs.<a href="./src/writerai/resources/applications/jobs.py">list</a>(application_id, \*\*<a href="src/writerai/types/applications/job_list_params.py">params</a>) -> <a href="./src/writerai/types/applications/job_list_response.py">SyncApplicationJobsOffset[JobListResponse]</a></code>
49+
- <code title="get /v1/applications/jobs/{job_id}">client.applications.jobs.<a href="./src/writerai/resources/applications/jobs.py">retrieve</a>(job_id) -> <a href="./src/writerai/types/applications/application_generate_async_response.py">ApplicationGenerateAsyncResponse</a></code>
50+
- <code title="get /v1/applications/{application_id}/jobs">client.applications.jobs.<a href="./src/writerai/resources/applications/jobs.py">list</a>(application_id, \*\*<a href="src/writerai/types/applications/job_list_params.py">params</a>) -> <a href="./src/writerai/types/applications/application_generate_async_response.py">SyncApplicationJobsOffset[ApplicationGenerateAsyncResponse]</a></code>
5151
- <code title="post /v1/applications/jobs/{job_id}/retry">client.applications.jobs.<a href="./src/writerai/resources/applications/jobs.py">retry</a>(job_id) -> <a href="./src/writerai/types/applications/job_retry_response.py">JobRetryResponse</a></code>
5252

5353
## Graphs

src/writerai/resources/applications/jobs.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,9 @@
2323
from ...pagination import SyncApplicationJobsOffset, AsyncApplicationJobsOffset
2424
from ..._base_client import AsyncPaginator, make_request_options
2525
from ...types.applications import job_list_params, job_create_params
26-
from ...types.applications.job_list_response import JobListResponse
2726
from ...types.applications.job_retry_response import JobRetryResponse
2827
from ...types.applications.job_create_response import JobCreateResponse
29-
from ...types.applications.job_retrieve_response import JobRetrieveResponse
28+
from ...types.applications.application_generate_async_response import ApplicationGenerateAsyncResponse
3029

3130
__all__ = ["JobsResource", "AsyncJobsResource"]
3231

@@ -98,7 +97,7 @@ def retrieve(
9897
extra_query: Query | None = None,
9998
extra_body: Body | None = None,
10099
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
101-
) -> JobRetrieveResponse:
100+
) -> ApplicationGenerateAsyncResponse:
102101
"""
103102
Retrieves a single job created via the Async API.
104103
@@ -118,7 +117,7 @@ def retrieve(
118117
options=make_request_options(
119118
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
120119
),
121-
cast_to=JobRetrieveResponse,
120+
cast_to=ApplicationGenerateAsyncResponse,
122121
)
123122

124123
def list(
@@ -134,7 +133,7 @@ def list(
134133
extra_query: Query | None = None,
135134
extra_body: Body | None = None,
136135
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
137-
) -> SyncApplicationJobsOffset[JobListResponse]:
136+
) -> SyncApplicationJobsOffset[ApplicationGenerateAsyncResponse]:
138137
"""
139138
Retrieve all jobs created via the async API, linked to the provided application
140139
ID (or alias).
@@ -158,7 +157,7 @@ def list(
158157
raise ValueError(f"Expected a non-empty value for `application_id` but received {application_id!r}")
159158
return self._get_api_list(
160159
f"/v1/applications/{application_id}/jobs",
161-
page=SyncApplicationJobsOffset[JobListResponse],
160+
page=SyncApplicationJobsOffset[ApplicationGenerateAsyncResponse],
162161
options=make_request_options(
163162
extra_headers=extra_headers,
164163
extra_query=extra_query,
@@ -173,7 +172,7 @@ def list(
173172
job_list_params.JobListParams,
174173
),
175174
),
176-
model=JobListResponse,
175+
model=ApplicationGenerateAsyncResponse,
177176
)
178177

179178
def retry(
@@ -278,7 +277,7 @@ async def retrieve(
278277
extra_query: Query | None = None,
279278
extra_body: Body | None = None,
280279
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
281-
) -> JobRetrieveResponse:
280+
) -> ApplicationGenerateAsyncResponse:
282281
"""
283282
Retrieves a single job created via the Async API.
284283
@@ -298,7 +297,7 @@ async def retrieve(
298297
options=make_request_options(
299298
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
300299
),
301-
cast_to=JobRetrieveResponse,
300+
cast_to=ApplicationGenerateAsyncResponse,
302301
)
303302

304303
def list(
@@ -314,7 +313,7 @@ def list(
314313
extra_query: Query | None = None,
315314
extra_body: Body | None = None,
316315
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
317-
) -> AsyncPaginator[JobListResponse, AsyncApplicationJobsOffset[JobListResponse]]:
316+
) -> AsyncPaginator[ApplicationGenerateAsyncResponse, AsyncApplicationJobsOffset[ApplicationGenerateAsyncResponse]]:
318317
"""
319318
Retrieve all jobs created via the async API, linked to the provided application
320319
ID (or alias).
@@ -338,7 +337,7 @@ def list(
338337
raise ValueError(f"Expected a non-empty value for `application_id` but received {application_id!r}")
339338
return self._get_api_list(
340339
f"/v1/applications/{application_id}/jobs",
341-
page=AsyncApplicationJobsOffset[JobListResponse],
340+
page=AsyncApplicationJobsOffset[ApplicationGenerateAsyncResponse],
342341
options=make_request_options(
343342
extra_headers=extra_headers,
344343
extra_query=extra_query,
@@ -353,7 +352,7 @@ def list(
353352
job_list_params.JobListParams,
354353
),
355354
),
356-
model=JobListResponse,
355+
model=ApplicationGenerateAsyncResponse,
357356
)
358357

359358
async def retry(

src/writerai/types/applications/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
from .job_list_params import JobListParams as JobListParams
66
from .job_create_params import JobCreateParams as JobCreateParams
7-
from .job_list_response import JobListResponse as JobListResponse
87
from .job_retry_response import JobRetryResponse as JobRetryResponse
98
from .graph_update_params import GraphUpdateParams as GraphUpdateParams
109
from .job_create_response import JobCreateResponse as JobCreateResponse
11-
from .job_retrieve_response import JobRetrieveResponse as JobRetrieveResponse
1210
from .application_graphs_response import ApplicationGraphsResponse as ApplicationGraphsResponse
11+
from .application_jobs_list_response import ApplicationJobsListResponse as ApplicationJobsListResponse
12+
from .application_generate_async_response import ApplicationGenerateAsyncResponse as ApplicationGenerateAsyncResponse

src/writerai/types/applications/job_list_response.py renamed to src/writerai/types/applications/application_generate_async_response.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
from ..._models import BaseModel
88
from ..application_generate_content_response import ApplicationGenerateContentResponse
99

10-
__all__ = ["JobListResponse"]
10+
__all__ = ["ApplicationGenerateAsyncResponse"]
1111

1212

13-
class JobListResponse(BaseModel):
13+
class ApplicationGenerateAsyncResponse(BaseModel):
1414
id: str
1515
"""The unique identifier for the job."""
1616

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from typing import List, Optional
4+
5+
from pydantic import Field as FieldInfo
6+
7+
from ..._models import BaseModel
8+
from .application_generate_async_response import ApplicationGenerateAsyncResponse
9+
10+
__all__ = ["ApplicationJobsListResponse", "Pagination"]
11+
12+
13+
class Pagination(BaseModel):
14+
limit: Optional[int] = None
15+
"""The pagination limit for retrieving the jobs."""
16+
17+
offset: Optional[int] = None
18+
"""The pagination offset for retrieving the jobs."""
19+
20+
21+
class ApplicationJobsListResponse(BaseModel):
22+
result: List[ApplicationGenerateAsyncResponse]
23+
24+
pagination: Optional[Pagination] = None
25+
26+
total_count: Optional[int] = FieldInfo(alias="totalCount", default=None)
27+
"""The total number of jobs associated with the application."""

src/writerai/types/applications/job_retrieve_response.py

Lines changed: 0 additions & 36 deletions
This file was deleted.

tests/api_resources/applications/test_jobs.py

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,9 @@
1111
from tests.utils import assert_matches_type
1212
from writerai.pagination import SyncApplicationJobsOffset, AsyncApplicationJobsOffset
1313
from writerai.types.applications import (
14-
JobListResponse,
1514
JobRetryResponse,
1615
JobCreateResponse,
17-
JobRetrieveResponse,
16+
ApplicationGenerateAsyncResponse,
1817
)
1918

2019
base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
@@ -90,7 +89,7 @@ def test_method_retrieve(self, client: Writer) -> None:
9089
job = client.applications.jobs.retrieve(
9190
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
9291
)
93-
assert_matches_type(JobRetrieveResponse, job, path=["response"])
92+
assert_matches_type(ApplicationGenerateAsyncResponse, job, path=["response"])
9493

9594
@parametrize
9695
def test_raw_response_retrieve(self, client: Writer) -> None:
@@ -101,7 +100,7 @@ def test_raw_response_retrieve(self, client: Writer) -> None:
101100
assert response.is_closed is True
102101
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
103102
job = response.parse()
104-
assert_matches_type(JobRetrieveResponse, job, path=["response"])
103+
assert_matches_type(ApplicationGenerateAsyncResponse, job, path=["response"])
105104

106105
@parametrize
107106
def test_streaming_response_retrieve(self, client: Writer) -> None:
@@ -112,7 +111,7 @@ def test_streaming_response_retrieve(self, client: Writer) -> None:
112111
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
113112

114113
job = response.parse()
115-
assert_matches_type(JobRetrieveResponse, job, path=["response"])
114+
assert_matches_type(ApplicationGenerateAsyncResponse, job, path=["response"])
116115

117116
assert cast(Any, response.is_closed) is True
118117

@@ -128,7 +127,7 @@ def test_method_list(self, client: Writer) -> None:
128127
job = client.applications.jobs.list(
129128
application_id="application_id",
130129
)
131-
assert_matches_type(SyncApplicationJobsOffset[JobListResponse], job, path=["response"])
130+
assert_matches_type(SyncApplicationJobsOffset[ApplicationGenerateAsyncResponse], job, path=["response"])
132131

133132
@parametrize
134133
def test_method_list_with_all_params(self, client: Writer) -> None:
@@ -138,7 +137,7 @@ def test_method_list_with_all_params(self, client: Writer) -> None:
138137
offset=0,
139138
status="in_progress",
140139
)
141-
assert_matches_type(SyncApplicationJobsOffset[JobListResponse], job, path=["response"])
140+
assert_matches_type(SyncApplicationJobsOffset[ApplicationGenerateAsyncResponse], job, path=["response"])
142141

143142
@parametrize
144143
def test_raw_response_list(self, client: Writer) -> None:
@@ -149,7 +148,7 @@ def test_raw_response_list(self, client: Writer) -> None:
149148
assert response.is_closed is True
150149
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
151150
job = response.parse()
152-
assert_matches_type(SyncApplicationJobsOffset[JobListResponse], job, path=["response"])
151+
assert_matches_type(SyncApplicationJobsOffset[ApplicationGenerateAsyncResponse], job, path=["response"])
153152

154153
@parametrize
155154
def test_streaming_response_list(self, client: Writer) -> None:
@@ -160,7 +159,7 @@ def test_streaming_response_list(self, client: Writer) -> None:
160159
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
161160

162161
job = response.parse()
163-
assert_matches_type(SyncApplicationJobsOffset[JobListResponse], job, path=["response"])
162+
assert_matches_type(SyncApplicationJobsOffset[ApplicationGenerateAsyncResponse], job, path=["response"])
164163

165164
assert cast(Any, response.is_closed) is True
166165

@@ -280,7 +279,7 @@ async def test_method_retrieve(self, async_client: AsyncWriter) -> None:
280279
job = await async_client.applications.jobs.retrieve(
281280
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
282281
)
283-
assert_matches_type(JobRetrieveResponse, job, path=["response"])
282+
assert_matches_type(ApplicationGenerateAsyncResponse, job, path=["response"])
284283

285284
@parametrize
286285
async def test_raw_response_retrieve(self, async_client: AsyncWriter) -> None:
@@ -291,7 +290,7 @@ async def test_raw_response_retrieve(self, async_client: AsyncWriter) -> None:
291290
assert response.is_closed is True
292291
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
293292
job = await response.parse()
294-
assert_matches_type(JobRetrieveResponse, job, path=["response"])
293+
assert_matches_type(ApplicationGenerateAsyncResponse, job, path=["response"])
295294

296295
@parametrize
297296
async def test_streaming_response_retrieve(self, async_client: AsyncWriter) -> None:
@@ -302,7 +301,7 @@ async def test_streaming_response_retrieve(self, async_client: AsyncWriter) -> N
302301
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
303302

304303
job = await response.parse()
305-
assert_matches_type(JobRetrieveResponse, job, path=["response"])
304+
assert_matches_type(ApplicationGenerateAsyncResponse, job, path=["response"])
306305

307306
assert cast(Any, response.is_closed) is True
308307

@@ -318,7 +317,7 @@ async def test_method_list(self, async_client: AsyncWriter) -> None:
318317
job = await async_client.applications.jobs.list(
319318
application_id="application_id",
320319
)
321-
assert_matches_type(AsyncApplicationJobsOffset[JobListResponse], job, path=["response"])
320+
assert_matches_type(AsyncApplicationJobsOffset[ApplicationGenerateAsyncResponse], job, path=["response"])
322321

323322
@parametrize
324323
async def test_method_list_with_all_params(self, async_client: AsyncWriter) -> None:
@@ -328,7 +327,7 @@ async def test_method_list_with_all_params(self, async_client: AsyncWriter) -> N
328327
offset=0,
329328
status="in_progress",
330329
)
331-
assert_matches_type(AsyncApplicationJobsOffset[JobListResponse], job, path=["response"])
330+
assert_matches_type(AsyncApplicationJobsOffset[ApplicationGenerateAsyncResponse], job, path=["response"])
332331

333332
@parametrize
334333
async def test_raw_response_list(self, async_client: AsyncWriter) -> None:
@@ -339,7 +338,7 @@ async def test_raw_response_list(self, async_client: AsyncWriter) -> None:
339338
assert response.is_closed is True
340339
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
341340
job = await response.parse()
342-
assert_matches_type(AsyncApplicationJobsOffset[JobListResponse], job, path=["response"])
341+
assert_matches_type(AsyncApplicationJobsOffset[ApplicationGenerateAsyncResponse], job, path=["response"])
343342

344343
@parametrize
345344
async def test_streaming_response_list(self, async_client: AsyncWriter) -> None:
@@ -350,7 +349,7 @@ async def test_streaming_response_list(self, async_client: AsyncWriter) -> None:
350349
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
351350

352351
job = await response.parse()
353-
assert_matches_type(AsyncApplicationJobsOffset[JobListResponse], job, path=["response"])
352+
assert_matches_type(AsyncApplicationJobsOffset[ApplicationGenerateAsyncResponse], job, path=["response"])
354353

355354
assert cast(Any, response.is_closed) is True
356355

0 commit comments

Comments
 (0)