Skip to content

Commit cda6f91

Browse files
feat(api): add expert review endpoints
1 parent 5848aac commit cda6f91

16 files changed

+1672
-2
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: 65
1+
configured_endpoints: 70
22
openapi_spec_hash: 9018ebfb2a9e1afa87058b3a4bd41b0b
3-
config_hash: cd9208a2204f43e0aa5ab35ac85ef90d
3+
config_hash: aad16f20fed13ac50211fc1d0e2ea621

api.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,3 +284,24 @@ Methods:
284284
- <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>
285285
- <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>
286286
- <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>
287+
288+
### ExpertReviews
289+
290+
Types:
291+
292+
```python
293+
from codex.types.projects.remediations import (
294+
ExpertReviewCreateResponse,
295+
ExpertReviewRetrieveResponse,
296+
ExpertReviewListResponse,
297+
ExpertReviewEditResponse,
298+
)
299+
```
300+
301+
Methods:
302+
303+
- <code title="post /api/projects/{project_id}/expert_reviews/">client.projects.remediations.expert_reviews.<a href="./src/codex/resources/projects/remediations/expert_reviews.py">create</a>(project_id, \*\*<a href="src/codex/types/projects/remediations/expert_review_create_params.py">params</a>) -> <a href="./src/codex/types/projects/remediations/expert_review_create_response.py">ExpertReviewCreateResponse</a></code>
304+
- <code title="get /api/projects/{project_id}/expert_reviews/{expert_review_id}">client.projects.remediations.expert_reviews.<a href="./src/codex/resources/projects/remediations/expert_reviews.py">retrieve</a>(expert_review_id, \*, project_id) -> <a href="./src/codex/types/projects/remediations/expert_review_retrieve_response.py">ExpertReviewRetrieveResponse</a></code>
305+
- <code title="get /api/projects/{project_id}/expert_reviews/">client.projects.remediations.expert_reviews.<a href="./src/codex/resources/projects/remediations/expert_reviews.py">list</a>(project_id, \*\*<a href="src/codex/types/projects/remediations/expert_review_list_params.py">params</a>) -> <a href="./src/codex/types/projects/remediations/expert_review_list_response.py">SyncOffsetPageExpertReviews[ExpertReviewListResponse]</a></code>
306+
- <code title="delete /api/projects/{project_id}/expert_reviews/{expert_review_id}">client.projects.remediations.expert_reviews.<a href="./src/codex/resources/projects/remediations/expert_reviews.py">delete</a>(expert_review_id, \*, project_id, \*\*<a href="src/codex/types/projects/remediations/expert_review_delete_params.py">params</a>) -> None</code>
307+
- <code title="patch /api/projects/{project_id}/expert_reviews/{expert_review_id}">client.projects.remediations.expert_reviews.<a href="./src/codex/resources/projects/remediations/expert_reviews.py">edit</a>(expert_review_id, \*, project_id, \*\*<a href="src/codex/types/projects/remediations/expert_review_edit_params.py">params</a>) -> <a href="./src/codex/types/projects/remediations/expert_review_edit_response.py">ExpertReviewEditResponse</a></code>

src/codex/pagination.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
"AsyncOffsetPageQueryLogsByGroup",
2525
"SyncOffsetPageExpertAnswers",
2626
"AsyncOffsetPageExpertAnswers",
27+
"SyncOffsetPageExpertReviews",
28+
"AsyncOffsetPageExpertReviews",
2729
]
2830

2931
_BaseModelT = TypeVar("_BaseModelT", bound=BaseModel)
@@ -451,3 +453,63 @@ def next_page_info(self) -> Optional[PageInfo]:
451453
return PageInfo(params={"offset": current_count})
452454

453455
return None
456+
457+
458+
class SyncOffsetPageExpertReviews(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
459+
expert_reviews: List[_T]
460+
total_count: Optional[int] = None
461+
462+
@override
463+
def _get_page_items(self) -> List[_T]:
464+
expert_reviews = self.expert_reviews
465+
if not expert_reviews:
466+
return []
467+
return expert_reviews
468+
469+
@override
470+
def next_page_info(self) -> Optional[PageInfo]:
471+
offset = self._options.params.get("offset") or 0
472+
if not isinstance(offset, int):
473+
raise ValueError(f'Expected "offset" param to be an integer but got {offset}')
474+
475+
length = len(self._get_page_items())
476+
current_count = offset + length
477+
478+
total_count = self.total_count
479+
if total_count is None:
480+
return None
481+
482+
if current_count < total_count:
483+
return PageInfo(params={"offset": current_count})
484+
485+
return None
486+
487+
488+
class AsyncOffsetPageExpertReviews(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
489+
expert_reviews: List[_T]
490+
total_count: Optional[int] = None
491+
492+
@override
493+
def _get_page_items(self) -> List[_T]:
494+
expert_reviews = self.expert_reviews
495+
if not expert_reviews:
496+
return []
497+
return expert_reviews
498+
499+
@override
500+
def next_page_info(self) -> Optional[PageInfo]:
501+
offset = self._options.params.get("offset") or 0
502+
if not isinstance(offset, int):
503+
raise ValueError(f'Expected "offset" param to be an integer but got {offset}')
504+
505+
length = len(self._get_page_items())
506+
current_count = offset + length
507+
508+
total_count = self.total_count
509+
if total_count is None:
510+
return None
511+
512+
if current_count < total_count:
513+
return PageInfo(params={"offset": current_count})
514+
515+
return None

src/codex/resources/projects/remediations/__init__.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@
1616
ExpertAnswersResourceWithStreamingResponse,
1717
AsyncExpertAnswersResourceWithStreamingResponse,
1818
)
19+
from .expert_reviews import (
20+
ExpertReviewsResource,
21+
AsyncExpertReviewsResource,
22+
ExpertReviewsResourceWithRawResponse,
23+
AsyncExpertReviewsResourceWithRawResponse,
24+
ExpertReviewsResourceWithStreamingResponse,
25+
AsyncExpertReviewsResourceWithStreamingResponse,
26+
)
1927

2028
__all__ = [
2129
"ExpertAnswersResource",
@@ -24,6 +32,12 @@
2432
"AsyncExpertAnswersResourceWithRawResponse",
2533
"ExpertAnswersResourceWithStreamingResponse",
2634
"AsyncExpertAnswersResourceWithStreamingResponse",
35+
"ExpertReviewsResource",
36+
"AsyncExpertReviewsResource",
37+
"ExpertReviewsResourceWithRawResponse",
38+
"AsyncExpertReviewsResourceWithRawResponse",
39+
"ExpertReviewsResourceWithStreamingResponse",
40+
"AsyncExpertReviewsResourceWithStreamingResponse",
2741
"RemediationsResource",
2842
"AsyncRemediationsResource",
2943
"RemediationsResourceWithRawResponse",

0 commit comments

Comments
 (0)