Skip to content

Commit ae79a63

Browse files
feat(api): add proj analytics endpoint
1 parent 9dec3ac commit ae79a63

File tree

7 files changed

+299
-3
lines changed

7 files changed

+299
-3
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: 42
1+
configured_endpoints: 43
22
openapi_spec_hash: 62b629dd5b215c1eebc57e0c6039eea7
3-
config_hash: 2d88a0a41f5faca603ff2789a116d988
3+
config_hash: 5e459b33c53ffa6e554087a779bdb790

api.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ from codex.types import (
141141
ProjectListResponse,
142142
ProjectExportResponse,
143143
ProjectIncrementQueriesResponse,
144+
ProjectRetrieveAnalyticsResponse,
144145
)
145146
```
146147

@@ -153,6 +154,7 @@ Methods:
153154
- <code title="delete /api/projects/{project_id}">client.projects.<a href="./src/codex/resources/projects/projects.py">delete</a>(project_id) -> None</code>
154155
- <code title="get /api/projects/{project_id}/export">client.projects.<a href="./src/codex/resources/projects/projects.py">export</a>(project_id) -> <a href="./src/codex/types/project_export_response.py">object</a></code>
155156
- <code title="post /api/projects/{project_id}/increment_queries">client.projects.<a href="./src/codex/resources/projects/projects.py">increment_queries</a>(project_id) -> <a href="./src/codex/types/project_increment_queries_response.py">object</a></code>
157+
- <code title="get /api/projects/{project_id}/analytics/">client.projects.<a href="./src/codex/resources/projects/projects.py">retrieve_analytics</a>(project_id, \*\*<a href="src/codex/types/project_retrieve_analytics_params.py">params</a>) -> <a href="./src/codex/types/project_retrieve_analytics_response.py">ProjectRetrieveAnalyticsResponse</a></code>
156158

157159
## AccessKeys
158160

src/codex/resources/projects/projects.py

Lines changed: 125 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@
77

88
import httpx
99

10-
from ...types import project_list_params, project_create_params, project_update_params
10+
from ...types import (
11+
project_list_params,
12+
project_create_params,
13+
project_update_params,
14+
project_retrieve_analytics_params,
15+
)
1116
from .entries import (
1217
EntriesResource,
1318
AsyncEntriesResource,
@@ -46,6 +51,7 @@
4651
from ...types.project_list_response import ProjectListResponse
4752
from ...types.project_return_schema import ProjectReturnSchema
4853
from ...types.project_retrieve_response import ProjectRetrieveResponse
54+
from ...types.project_retrieve_analytics_response import ProjectRetrieveAnalyticsResponse
4955

5056
__all__ = ["ProjectsResource", "AsyncProjectsResource"]
5157

@@ -354,6 +360,59 @@ def increment_queries(
354360
cast_to=object,
355361
)
356362

363+
def retrieve_analytics(
364+
self,
365+
project_id: str,
366+
*,
367+
end: int | NotGiven = NOT_GIVEN,
368+
sme_limit: int | NotGiven = NOT_GIVEN,
369+
start: int | NotGiven = NOT_GIVEN,
370+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
371+
# The extra values given here take precedence over values defined on the client or passed to this method.
372+
extra_headers: Headers | None = None,
373+
extra_query: Query | None = None,
374+
extra_body: Body | None = None,
375+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
376+
) -> ProjectRetrieveAnalyticsResponse:
377+
"""
378+
Get Project Analytics Route
379+
380+
Args:
381+
end: End timestamp in seconds since epoch
382+
383+
sme_limit: Limit the number of top SME contributors to return.
384+
385+
start: Start timestamp in seconds since epoch
386+
387+
extra_headers: Send extra headers
388+
389+
extra_query: Add additional query parameters to the request
390+
391+
extra_body: Add additional JSON properties to the request
392+
393+
timeout: Override the client-level default timeout for this request, in seconds
394+
"""
395+
if not project_id:
396+
raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}")
397+
return self._get(
398+
f"/api/projects/{project_id}/analytics/",
399+
options=make_request_options(
400+
extra_headers=extra_headers,
401+
extra_query=extra_query,
402+
extra_body=extra_body,
403+
timeout=timeout,
404+
query=maybe_transform(
405+
{
406+
"end": end,
407+
"sme_limit": sme_limit,
408+
"start": start,
409+
},
410+
project_retrieve_analytics_params.ProjectRetrieveAnalyticsParams,
411+
),
412+
),
413+
cast_to=ProjectRetrieveAnalyticsResponse,
414+
)
415+
357416

358417
class AsyncProjectsResource(AsyncAPIResource):
359418
@cached_property
@@ -659,6 +718,59 @@ async def increment_queries(
659718
cast_to=object,
660719
)
661720

721+
async def retrieve_analytics(
722+
self,
723+
project_id: str,
724+
*,
725+
end: int | NotGiven = NOT_GIVEN,
726+
sme_limit: int | NotGiven = NOT_GIVEN,
727+
start: int | NotGiven = NOT_GIVEN,
728+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
729+
# The extra values given here take precedence over values defined on the client or passed to this method.
730+
extra_headers: Headers | None = None,
731+
extra_query: Query | None = None,
732+
extra_body: Body | None = None,
733+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
734+
) -> ProjectRetrieveAnalyticsResponse:
735+
"""
736+
Get Project Analytics Route
737+
738+
Args:
739+
end: End timestamp in seconds since epoch
740+
741+
sme_limit: Limit the number of top SME contributors to return.
742+
743+
start: Start timestamp in seconds since epoch
744+
745+
extra_headers: Send extra headers
746+
747+
extra_query: Add additional query parameters to the request
748+
749+
extra_body: Add additional JSON properties to the request
750+
751+
timeout: Override the client-level default timeout for this request, in seconds
752+
"""
753+
if not project_id:
754+
raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}")
755+
return await self._get(
756+
f"/api/projects/{project_id}/analytics/",
757+
options=make_request_options(
758+
extra_headers=extra_headers,
759+
extra_query=extra_query,
760+
extra_body=extra_body,
761+
timeout=timeout,
762+
query=await async_maybe_transform(
763+
{
764+
"end": end,
765+
"sme_limit": sme_limit,
766+
"start": start,
767+
},
768+
project_retrieve_analytics_params.ProjectRetrieveAnalyticsParams,
769+
),
770+
),
771+
cast_to=ProjectRetrieveAnalyticsResponse,
772+
)
773+
662774

663775
class ProjectsResourceWithRawResponse:
664776
def __init__(self, projects: ProjectsResource) -> None:
@@ -685,6 +797,9 @@ def __init__(self, projects: ProjectsResource) -> None:
685797
self.increment_queries = to_raw_response_wrapper(
686798
projects.increment_queries,
687799
)
800+
self.retrieve_analytics = to_raw_response_wrapper(
801+
projects.retrieve_analytics,
802+
)
688803

689804
@cached_property
690805
def access_keys(self) -> AccessKeysResourceWithRawResponse:
@@ -724,6 +839,9 @@ def __init__(self, projects: AsyncProjectsResource) -> None:
724839
self.increment_queries = async_to_raw_response_wrapper(
725840
projects.increment_queries,
726841
)
842+
self.retrieve_analytics = async_to_raw_response_wrapper(
843+
projects.retrieve_analytics,
844+
)
727845

728846
@cached_property
729847
def access_keys(self) -> AsyncAccessKeysResourceWithRawResponse:
@@ -763,6 +881,9 @@ def __init__(self, projects: ProjectsResource) -> None:
763881
self.increment_queries = to_streamed_response_wrapper(
764882
projects.increment_queries,
765883
)
884+
self.retrieve_analytics = to_streamed_response_wrapper(
885+
projects.retrieve_analytics,
886+
)
766887

767888
@cached_property
768889
def access_keys(self) -> AccessKeysResourceWithStreamingResponse:
@@ -802,6 +923,9 @@ def __init__(self, projects: AsyncProjectsResource) -> None:
802923
self.increment_queries = async_to_streamed_response_wrapper(
803924
projects.increment_queries,
804925
)
926+
self.retrieve_analytics = async_to_streamed_response_wrapper(
927+
projects.retrieve_analytics,
928+
)
805929

806930
@cached_property
807931
def access_keys(self) -> AsyncAccessKeysResourceWithStreamingResponse:

src/codex/types/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
from .project_retrieve_response import ProjectRetrieveResponse as ProjectRetrieveResponse
1616
from .organization_schema_public import OrganizationSchemaPublic as OrganizationSchemaPublic
1717
from .user_activate_account_params import UserActivateAccountParams as UserActivateAccountParams
18+
from .project_retrieve_analytics_params import ProjectRetrieveAnalyticsParams as ProjectRetrieveAnalyticsParams
1819
from .organization_list_members_response import OrganizationListMembersResponse as OrganizationListMembersResponse
20+
from .project_retrieve_analytics_response import ProjectRetrieveAnalyticsResponse as ProjectRetrieveAnalyticsResponse
1921
from .organization_retrieve_permissions_response import (
2022
OrganizationRetrievePermissionsResponse as OrganizationRetrievePermissionsResponse,
2123
)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from __future__ import annotations
4+
5+
from typing_extensions import TypedDict
6+
7+
__all__ = ["ProjectRetrieveAnalyticsParams"]
8+
9+
10+
class ProjectRetrieveAnalyticsParams(TypedDict, total=False):
11+
end: int
12+
"""End timestamp in seconds since epoch"""
13+
14+
sme_limit: int
15+
"""Limit the number of top SME contributors to return."""
16+
17+
start: int
18+
"""Start timestamp in seconds since epoch"""
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from typing import Dict, List
4+
5+
from .._models import BaseModel
6+
7+
__all__ = [
8+
"ProjectRetrieveAnalyticsResponse",
9+
"AnswersPublished",
10+
"AnswersPublishedAnswersByAuthor",
11+
"BadResponses",
12+
"Queries",
13+
]
14+
15+
16+
class AnswersPublishedAnswersByAuthor(BaseModel):
17+
answers_published: int
18+
19+
name: str
20+
21+
user_id: str
22+
23+
24+
class AnswersPublished(BaseModel):
25+
answers_by_author: List[AnswersPublishedAnswersByAuthor]
26+
27+
28+
class BadResponses(BaseModel):
29+
responses_by_type: Dict[str, int]
30+
31+
total: int
32+
33+
34+
class Queries(BaseModel):
35+
total: int
36+
37+
38+
class ProjectRetrieveAnalyticsResponse(BaseModel):
39+
answers_published: AnswersPublished
40+
41+
bad_responses: BadResponses
42+
43+
queries: Queries

0 commit comments

Comments
 (0)