Skip to content

Commit 68ec69e

Browse files
feat(api): add expert answer endpoints
1 parent 57567dc commit 68ec69e

22 files changed

+2600
-33
lines changed

.stats.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
configured_endpoints: 56
1+
configured_endpoints: 65
22
openapi_spec_hash: d273ca5158facc1251efa0a5f9e723c5
3-
config_hash: 9e0ed146f9f6e6d1884a4c0589d6f1c2
3+
config_hash: cd9208a2204f43e0aa5ab35ac85ef90d

api.md

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -244,14 +244,43 @@ from codex.types.projects import (
244244

245245
Methods:
246246

247-
- <code title="post /api/projects/{project_id}/remediations/">client.projects.remediations.<a href="./src/codex/resources/projects/remediations.py">create</a>(project_id, \*\*<a href="src/codex/types/projects/remediation_create_params.py">params</a>) -> <a href="./src/codex/types/projects/remediation_create_response.py">RemediationCreateResponse</a></code>
248-
- <code title="get /api/projects/{project_id}/remediations/{remediation_id}">client.projects.remediations.<a href="./src/codex/resources/projects/remediations.py">retrieve</a>(remediation_id, \*, project_id) -> <a href="./src/codex/types/projects/remediation_retrieve_response.py">RemediationRetrieveResponse</a></code>
249-
- <code title="get /api/projects/{project_id}/remediations/">client.projects.remediations.<a href="./src/codex/resources/projects/remediations.py">list</a>(project_id, \*\*<a href="src/codex/types/projects/remediation_list_params.py">params</a>) -> <a href="./src/codex/types/projects/remediation_list_response.py">SyncOffsetPageRemediations[RemediationListResponse]</a></code>
250-
- <code title="delete /api/projects/{project_id}/remediations/{remediation_id}">client.projects.remediations.<a href="./src/codex/resources/projects/remediations.py">delete</a>(remediation_id, \*, project_id) -> None</code>
251-
- <code title="patch /api/projects/{project_id}/remediations/{remediation_id}/edit_answer">client.projects.remediations.<a href="./src/codex/resources/projects/remediations.py">edit_answer</a>(remediation_id, \*, project_id, \*\*<a href="src/codex/types/projects/remediation_edit_answer_params.py">params</a>) -> <a href="./src/codex/types/projects/remediation_edit_answer_response.py">RemediationEditAnswerResponse</a></code>
252-
- <code title="patch /api/projects/{project_id}/remediations/{remediation_id}/edit_draft_answer">client.projects.remediations.<a href="./src/codex/resources/projects/remediations.py">edit_draft_answer</a>(remediation_id, \*, project_id, \*\*<a href="src/codex/types/projects/remediation_edit_draft_answer_params.py">params</a>) -> <a href="./src/codex/types/projects/remediation_edit_draft_answer_response.py">RemediationEditDraftAnswerResponse</a></code>
253-
- <code title="get /api/projects/{project_id}/remediations/{remediation_id}/resolved_logs_count">client.projects.remediations.<a href="./src/codex/resources/projects/remediations.py">get_resolved_logs_count</a>(remediation_id, \*, project_id) -> <a href="./src/codex/types/projects/remediation_get_resolved_logs_count_response.py">RemediationGetResolvedLogsCountResponse</a></code>
254-
- <code title="get /api/projects/{project_id}/remediations/{remediation_id}/resolved_logs">client.projects.remediations.<a href="./src/codex/resources/projects/remediations.py">list_resolved_logs</a>(remediation_id, \*, project_id) -> <a href="./src/codex/types/projects/remediation_list_resolved_logs_response.py">RemediationListResolvedLogsResponse</a></code>
255-
- <code title="patch /api/projects/{project_id}/remediations/{remediation_id}/pause">client.projects.remediations.<a href="./src/codex/resources/projects/remediations.py">pause</a>(remediation_id, \*, project_id) -> <a href="./src/codex/types/projects/remediation_pause_response.py">RemediationPauseResponse</a></code>
256-
- <code title="patch /api/projects/{project_id}/remediations/{remediation_id}/publish">client.projects.remediations.<a href="./src/codex/resources/projects/remediations.py">publish</a>(remediation_id, \*, project_id) -> <a href="./src/codex/types/projects/remediation_publish_response.py">RemediationPublishResponse</a></code>
257-
- <code title="patch /api/projects/{project_id}/remediations/{remediation_id}/unpause">client.projects.remediations.<a href="./src/codex/resources/projects/remediations.py">unpause</a>(remediation_id, \*, project_id) -> <a href="./src/codex/types/projects/remediation_unpause_response.py">RemediationUnpauseResponse</a></code>
247+
- <code title="post /api/projects/{project_id}/remediations/">client.projects.remediations.<a href="./src/codex/resources/projects/remediations/remediations.py">create</a>(project_id, \*\*<a href="src/codex/types/projects/remediation_create_params.py">params</a>) -> <a href="./src/codex/types/projects/remediation_create_response.py">RemediationCreateResponse</a></code>
248+
- <code title="get /api/projects/{project_id}/remediations/{remediation_id}">client.projects.remediations.<a href="./src/codex/resources/projects/remediations/remediations.py">retrieve</a>(remediation_id, \*, project_id) -> <a href="./src/codex/types/projects/remediation_retrieve_response.py">RemediationRetrieveResponse</a></code>
249+
- <code title="get /api/projects/{project_id}/remediations/">client.projects.remediations.<a href="./src/codex/resources/projects/remediations/remediations.py">list</a>(project_id, \*\*<a href="src/codex/types/projects/remediation_list_params.py">params</a>) -> <a href="./src/codex/types/projects/remediation_list_response.py">SyncOffsetPageRemediations[RemediationListResponse]</a></code>
250+
- <code title="delete /api/projects/{project_id}/remediations/{remediation_id}">client.projects.remediations.<a href="./src/codex/resources/projects/remediations/remediations.py">delete</a>(remediation_id, \*, project_id) -> None</code>
251+
- <code title="patch /api/projects/{project_id}/remediations/{remediation_id}/edit_answer">client.projects.remediations.<a href="./src/codex/resources/projects/remediations/remediations.py">edit_answer</a>(remediation_id, \*, project_id, \*\*<a href="src/codex/types/projects/remediation_edit_answer_params.py">params</a>) -> <a href="./src/codex/types/projects/remediation_edit_answer_response.py">RemediationEditAnswerResponse</a></code>
252+
- <code title="patch /api/projects/{project_id}/remediations/{remediation_id}/edit_draft_answer">client.projects.remediations.<a href="./src/codex/resources/projects/remediations/remediations.py">edit_draft_answer</a>(remediation_id, \*, project_id, \*\*<a href="src/codex/types/projects/remediation_edit_draft_answer_params.py">params</a>) -> <a href="./src/codex/types/projects/remediation_edit_draft_answer_response.py">RemediationEditDraftAnswerResponse</a></code>
253+
- <code title="get /api/projects/{project_id}/remediations/{remediation_id}/resolved_logs_count">client.projects.remediations.<a href="./src/codex/resources/projects/remediations/remediations.py">get_resolved_logs_count</a>(remediation_id, \*, project_id) -> <a href="./src/codex/types/projects/remediation_get_resolved_logs_count_response.py">RemediationGetResolvedLogsCountResponse</a></code>
254+
- <code title="get /api/projects/{project_id}/remediations/{remediation_id}/resolved_logs">client.projects.remediations.<a href="./src/codex/resources/projects/remediations/remediations.py">list_resolved_logs</a>(remediation_id, \*, project_id) -> <a href="./src/codex/types/projects/remediation_list_resolved_logs_response.py">RemediationListResolvedLogsResponse</a></code>
255+
- <code title="patch /api/projects/{project_id}/remediations/{remediation_id}/pause">client.projects.remediations.<a href="./src/codex/resources/projects/remediations/remediations.py">pause</a>(remediation_id, \*, project_id) -> <a href="./src/codex/types/projects/remediation_pause_response.py">RemediationPauseResponse</a></code>
256+
- <code title="patch /api/projects/{project_id}/remediations/{remediation_id}/publish">client.projects.remediations.<a href="./src/codex/resources/projects/remediations/remediations.py">publish</a>(remediation_id, \*, project_id) -> <a href="./src/codex/types/projects/remediation_publish_response.py">RemediationPublishResponse</a></code>
257+
- <code title="patch /api/projects/{project_id}/remediations/{remediation_id}/unpause">client.projects.remediations.<a href="./src/codex/resources/projects/remediations/remediations.py">unpause</a>(remediation_id, \*, project_id) -> <a href="./src/codex/types/projects/remediation_unpause_response.py">RemediationUnpauseResponse</a></code>
258+
259+
### ExpertAnswers
260+
261+
Types:
262+
263+
```python
264+
from codex.types.projects.remediations import (
265+
ExpertAnswerCreateResponse,
266+
ExpertAnswerRetrieveResponse,
267+
ExpertAnswerListResponse,
268+
ExpertAnswerEditAnswerResponse,
269+
ExpertAnswerEditDraftAnswerResponse,
270+
ExpertAnswerPauseResponse,
271+
ExpertAnswerPublishResponse,
272+
ExpertAnswerUnpauseResponse,
273+
)
274+
```
275+
276+
Methods:
277+
278+
- <code title="post /api/projects/{project_id}/expert_answers/">client.projects.remediations.expert_answers.<a href="./src/codex/resources/projects/remediations/expert_answers.py">create</a>(project_id, \*\*<a href="src/codex/types/projects/remediations/expert_answer_create_params.py">params</a>) -> <a href="./src/codex/types/projects/remediations/expert_answer_create_response.py">ExpertAnswerCreateResponse</a></code>
279+
- <code title="get /api/projects/{project_id}/expert_answers/{expert_answer_id}">client.projects.remediations.expert_answers.<a href="./src/codex/resources/projects/remediations/expert_answers.py">retrieve</a>(expert_answer_id, \*, project_id) -> <a href="./src/codex/types/projects/remediations/expert_answer_retrieve_response.py">ExpertAnswerRetrieveResponse</a></code>
280+
- <code title="get /api/projects/{project_id}/expert_answers/">client.projects.remediations.expert_answers.<a href="./src/codex/resources/projects/remediations/expert_answers.py">list</a>(project_id, \*\*<a href="src/codex/types/projects/remediations/expert_answer_list_params.py">params</a>) -> <a href="./src/codex/types/projects/remediations/expert_answer_list_response.py">SyncOffsetPageExpertAnswers[ExpertAnswerListResponse]</a></code>
281+
- <code title="delete /api/projects/{project_id}/expert_answers/{expert_answer_id}">client.projects.remediations.expert_answers.<a href="./src/codex/resources/projects/remediations/expert_answers.py">delete</a>(expert_answer_id, \*, project_id) -> None</code>
282+
- <code title="patch /api/projects/{project_id}/expert_answers/{expert_answer_id}/edit_expert_answer">client.projects.remediations.expert_answers.<a href="./src/codex/resources/projects/remediations/expert_answers.py">edit_answer</a>(expert_answer_id, \*, project_id, \*\*<a href="src/codex/types/projects/remediations/expert_answer_edit_answer_params.py">params</a>) -> <a href="./src/codex/types/projects/remediations/expert_answer_edit_answer_response.py">ExpertAnswerEditAnswerResponse</a></code>
283+
- <code title="patch /api/projects/{project_id}/expert_answers/{expert_answer_id}/edit_draft_expert_answer">client.projects.remediations.expert_answers.<a href="./src/codex/resources/projects/remediations/expert_answers.py">edit_draft_answer</a>(expert_answer_id, \*, project_id, \*\*<a href="src/codex/types/projects/remediations/expert_answer_edit_draft_answer_params.py">params</a>) -> <a href="./src/codex/types/projects/remediations/expert_answer_edit_draft_answer_response.py">ExpertAnswerEditDraftAnswerResponse</a></code>
284+
- <code title="patch /api/projects/{project_id}/expert_answers/{expert_answer_id}/pause">client.projects.remediations.expert_answers.<a href="./src/codex/resources/projects/remediations/expert_answers.py">pause</a>(expert_answer_id, \*, project_id) -> <a href="./src/codex/types/projects/remediations/expert_answer_pause_response.py">ExpertAnswerPauseResponse</a></code>
285+
- <code title="patch /api/projects/{project_id}/expert_answers/{expert_answer_id}/publish">client.projects.remediations.expert_answers.<a href="./src/codex/resources/projects/remediations/expert_answers.py">publish</a>(expert_answer_id, \*, project_id) -> <a href="./src/codex/types/projects/remediations/expert_answer_publish_response.py">ExpertAnswerPublishResponse</a></code>
286+
- <code title="patch /api/projects/{project_id}/expert_answers/{expert_answer_id}/unpause">client.projects.remediations.expert_answers.<a href="./src/codex/resources/projects/remediations/expert_answers.py">unpause</a>(expert_answer_id, \*, project_id) -> <a href="./src/codex/types/projects/remediations/expert_answer_unpause_response.py">ExpertAnswerUnpauseResponse</a></code>

src/codex/pagination.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
"AsyncOffsetPageQueryLogGroups",
2323
"SyncOffsetPageQueryLogsByGroup",
2424
"AsyncOffsetPageQueryLogsByGroup",
25+
"SyncOffsetPageExpertAnswers",
26+
"AsyncOffsetPageExpertAnswers",
2527
]
2628

2729
_BaseModelT = TypeVar("_BaseModelT", bound=BaseModel)
@@ -389,3 +391,63 @@ def next_page_info(self) -> Optional[PageInfo]:
389391
return PageInfo(params={"offset": current_count})
390392

391393
return None
394+
395+
396+
class SyncOffsetPageExpertAnswers(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
397+
expert_answers: List[_T]
398+
total_count: Optional[int] = None
399+
400+
@override
401+
def _get_page_items(self) -> List[_T]:
402+
expert_answers = self.expert_answers
403+
if not expert_answers:
404+
return []
405+
return expert_answers
406+
407+
@override
408+
def next_page_info(self) -> Optional[PageInfo]:
409+
offset = self._options.params.get("offset") or 0
410+
if not isinstance(offset, int):
411+
raise ValueError(f'Expected "offset" param to be an integer but got {offset}')
412+
413+
length = len(self._get_page_items())
414+
current_count = offset + length
415+
416+
total_count = self.total_count
417+
if total_count is None:
418+
return None
419+
420+
if current_count < total_count:
421+
return PageInfo(params={"offset": current_count})
422+
423+
return None
424+
425+
426+
class AsyncOffsetPageExpertAnswers(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
427+
expert_answers: List[_T]
428+
total_count: Optional[int] = None
429+
430+
@override
431+
def _get_page_items(self) -> List[_T]:
432+
expert_answers = self.expert_answers
433+
if not expert_answers:
434+
return []
435+
return expert_answers
436+
437+
@override
438+
def next_page_info(self) -> Optional[PageInfo]:
439+
offset = self._options.params.get("offset") or 0
440+
if not isinstance(offset, int):
441+
raise ValueError(f'Expected "offset" param to be an integer but got {offset}')
442+
443+
length = len(self._get_page_items())
444+
current_count = offset + length
445+
446+
total_count = self.total_count
447+
if total_count is None:
448+
return None
449+
450+
if current_count < total_count:
451+
return PageInfo(params={"offset": current_count})
452+
453+
return None

src/codex/resources/projects/projects.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,15 @@
5151
AccessKeysResourceWithStreamingResponse,
5252
AsyncAccessKeysResourceWithStreamingResponse,
5353
)
54-
from .remediations import (
54+
from ..._base_client import make_request_options
55+
from .remediations.remediations import (
5556
RemediationsResource,
5657
AsyncRemediationsResource,
5758
RemediationsResourceWithRawResponse,
5859
AsyncRemediationsResourceWithRawResponse,
5960
RemediationsResourceWithStreamingResponse,
6061
AsyncRemediationsResourceWithStreamingResponse,
6162
)
62-
from ..._base_client import make_request_options
6363
from ...types.project_list_response import ProjectListResponse
6464
from ...types.project_return_schema import ProjectReturnSchema
6565
from ...types.project_detect_response import ProjectDetectResponse
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from .remediations import (
4+
RemediationsResource,
5+
AsyncRemediationsResource,
6+
RemediationsResourceWithRawResponse,
7+
AsyncRemediationsResourceWithRawResponse,
8+
RemediationsResourceWithStreamingResponse,
9+
AsyncRemediationsResourceWithStreamingResponse,
10+
)
11+
from .expert_answers import (
12+
ExpertAnswersResource,
13+
AsyncExpertAnswersResource,
14+
ExpertAnswersResourceWithRawResponse,
15+
AsyncExpertAnswersResourceWithRawResponse,
16+
ExpertAnswersResourceWithStreamingResponse,
17+
AsyncExpertAnswersResourceWithStreamingResponse,
18+
)
19+
20+
__all__ = [
21+
"ExpertAnswersResource",
22+
"AsyncExpertAnswersResource",
23+
"ExpertAnswersResourceWithRawResponse",
24+
"AsyncExpertAnswersResourceWithRawResponse",
25+
"ExpertAnswersResourceWithStreamingResponse",
26+
"AsyncExpertAnswersResourceWithStreamingResponse",
27+
"RemediationsResource",
28+
"AsyncRemediationsResource",
29+
"RemediationsResourceWithRawResponse",
30+
"AsyncRemediationsResourceWithRawResponse",
31+
"RemediationsResourceWithStreamingResponse",
32+
"AsyncRemediationsResourceWithStreamingResponse",
33+
]

0 commit comments

Comments
 (0)