mirror of
https://github.com/wassname/openrouter-python-sdk-retry-errors.git
synced 2026-07-29 11:23:49 +08:00
Co-authored-by: speakeasybot <bot@speakeasyapi.dev> Co-authored-by: speakeasy-github[bot] <128539517+speakeasy-github[bot]@users.noreply.github.com>
662 lines
30 KiB
Python
662 lines
30 KiB
Python
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
|
|
from .basesdk import BaseSDK
|
|
from openrouter import components, errors, operations, utils
|
|
from openrouter._hooks import HookContext
|
|
from openrouter.types import OptionalNullable, UNSET
|
|
from openrouter.utils import get_security_from_env
|
|
from openrouter.utils.unmarshal_json_response import unmarshal_json_response
|
|
from typing import Any, Iterable, List, Mapping, Optional, Union
|
|
|
|
|
|
class BetaAnalytics(BaseSDK):
|
|
r"""beta.Analytics endpoints"""
|
|
|
|
def get_analytics_meta(
|
|
self,
|
|
*,
|
|
http_referer: Optional[str] = None,
|
|
x_open_router_title: Optional[str] = None,
|
|
x_open_router_categories: Optional[str] = None,
|
|
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
server_url: Optional[str] = None,
|
|
timeout_ms: Optional[int] = None,
|
|
http_headers: Optional[Mapping[str, str]] = None,
|
|
) -> operations.GetAnalyticsMetaResponse:
|
|
r"""Get available analytics metrics and dimensions
|
|
|
|
Returns the available metrics, dimensions, filter operators, and granularities for the analytics query endpoint. [Management key](/docs/guides/overview/auth/management-api-keys) required.
|
|
|
|
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
|
This is used to track API usage per application.
|
|
|
|
:param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
|
|
|
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
|
|
|
:param retries: Override the default retry configuration for this method
|
|
:param server_url: Override the default server URL for this method
|
|
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
:param http_headers: Additional headers to set or replace on requests.
|
|
"""
|
|
base_url = None
|
|
url_variables = None
|
|
if timeout_ms is None:
|
|
timeout_ms = self.sdk_configuration.timeout_ms
|
|
|
|
if server_url is not None:
|
|
base_url = server_url
|
|
else:
|
|
base_url = self._get_url(base_url, url_variables)
|
|
|
|
request = operations.GetAnalyticsMetaRequest(
|
|
http_referer=http_referer,
|
|
x_open_router_title=x_open_router_title,
|
|
x_open_router_categories=x_open_router_categories,
|
|
)
|
|
|
|
req = self._build_request(
|
|
method="GET",
|
|
path="/analytics/meta",
|
|
base_url=base_url,
|
|
url_variables=url_variables,
|
|
request=request,
|
|
request_body_required=False,
|
|
request_has_path_params=False,
|
|
request_has_query_params=True,
|
|
user_agent_header="user-agent",
|
|
accept_header_value="application/json",
|
|
http_headers=http_headers,
|
|
_globals=operations.GetAnalyticsMetaGlobals(
|
|
http_referer=self.sdk_configuration.globals.http_referer,
|
|
x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
|
|
x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
|
|
),
|
|
security=self.sdk_configuration.security,
|
|
allow_empty_value=None,
|
|
timeout_ms=timeout_ms,
|
|
)
|
|
|
|
if retries == UNSET:
|
|
if self.sdk_configuration.retry_config is not UNSET:
|
|
retries = self.sdk_configuration.retry_config
|
|
else:
|
|
retries = utils.RetryConfig(
|
|
"backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
|
|
)
|
|
|
|
retry_config = None
|
|
if isinstance(retries, utils.RetryConfig):
|
|
retry_config = (retries, ["5XX"])
|
|
|
|
http_res = self.do_request(
|
|
hook_ctx=HookContext(
|
|
config=self.sdk_configuration,
|
|
base_url=base_url or "",
|
|
operation_id="getAnalyticsMeta",
|
|
oauth2_scopes=None,
|
|
security_source=get_security_from_env(
|
|
self.sdk_configuration.security, components.Security
|
|
),
|
|
tags=["beta.Analytics"],
|
|
extensions=None,
|
|
),
|
|
request=req,
|
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
retry_config=retry_config,
|
|
)
|
|
|
|
response_data: Any = None
|
|
if utils.match_response(http_res, "200", "application/json"):
|
|
return unmarshal_json_response(
|
|
operations.GetAnalyticsMetaResponse, http_res
|
|
)
|
|
if utils.match_response(http_res, "401", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.UnauthorizedResponseErrorData, http_res
|
|
)
|
|
raise errors.UnauthorizedResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "403", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.ForbiddenResponseErrorData, http_res
|
|
)
|
|
raise errors.ForbiddenResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "500", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.InternalServerResponseErrorData, http_res
|
|
)
|
|
raise errors.InternalServerResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "4XX", "*"):
|
|
http_res_text = utils.stream_to_text(http_res)
|
|
raise errors.OpenRouterDefaultError(
|
|
"API error occurred", http_res, http_res_text
|
|
)
|
|
if utils.match_response(http_res, "5XX", "*"):
|
|
http_res_text = utils.stream_to_text(http_res)
|
|
raise errors.OpenRouterDefaultError(
|
|
"API error occurred", http_res, http_res_text
|
|
)
|
|
|
|
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
|
|
|
|
async def get_analytics_meta_async(
|
|
self,
|
|
*,
|
|
http_referer: Optional[str] = None,
|
|
x_open_router_title: Optional[str] = None,
|
|
x_open_router_categories: Optional[str] = None,
|
|
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
server_url: Optional[str] = None,
|
|
timeout_ms: Optional[int] = None,
|
|
http_headers: Optional[Mapping[str, str]] = None,
|
|
) -> operations.GetAnalyticsMetaResponse:
|
|
r"""Get available analytics metrics and dimensions
|
|
|
|
Returns the available metrics, dimensions, filter operators, and granularities for the analytics query endpoint. [Management key](/docs/guides/overview/auth/management-api-keys) required.
|
|
|
|
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
|
This is used to track API usage per application.
|
|
|
|
:param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
|
|
|
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
|
|
|
:param retries: Override the default retry configuration for this method
|
|
:param server_url: Override the default server URL for this method
|
|
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
:param http_headers: Additional headers to set or replace on requests.
|
|
"""
|
|
base_url = None
|
|
url_variables = None
|
|
if timeout_ms is None:
|
|
timeout_ms = self.sdk_configuration.timeout_ms
|
|
|
|
if server_url is not None:
|
|
base_url = server_url
|
|
else:
|
|
base_url = self._get_url(base_url, url_variables)
|
|
|
|
request = operations.GetAnalyticsMetaRequest(
|
|
http_referer=http_referer,
|
|
x_open_router_title=x_open_router_title,
|
|
x_open_router_categories=x_open_router_categories,
|
|
)
|
|
|
|
req = self._build_request_async(
|
|
method="GET",
|
|
path="/analytics/meta",
|
|
base_url=base_url,
|
|
url_variables=url_variables,
|
|
request=request,
|
|
request_body_required=False,
|
|
request_has_path_params=False,
|
|
request_has_query_params=True,
|
|
user_agent_header="user-agent",
|
|
accept_header_value="application/json",
|
|
http_headers=http_headers,
|
|
_globals=operations.GetAnalyticsMetaGlobals(
|
|
http_referer=self.sdk_configuration.globals.http_referer,
|
|
x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
|
|
x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
|
|
),
|
|
security=self.sdk_configuration.security,
|
|
allow_empty_value=None,
|
|
timeout_ms=timeout_ms,
|
|
)
|
|
|
|
if retries == UNSET:
|
|
if self.sdk_configuration.retry_config is not UNSET:
|
|
retries = self.sdk_configuration.retry_config
|
|
else:
|
|
retries = utils.RetryConfig(
|
|
"backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
|
|
)
|
|
|
|
retry_config = None
|
|
if isinstance(retries, utils.RetryConfig):
|
|
retry_config = (retries, ["5XX"])
|
|
|
|
http_res = await self.do_request_async(
|
|
hook_ctx=HookContext(
|
|
config=self.sdk_configuration,
|
|
base_url=base_url or "",
|
|
operation_id="getAnalyticsMeta",
|
|
oauth2_scopes=None,
|
|
security_source=get_security_from_env(
|
|
self.sdk_configuration.security, components.Security
|
|
),
|
|
tags=["beta.Analytics"],
|
|
extensions=None,
|
|
),
|
|
request=req,
|
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
retry_config=retry_config,
|
|
)
|
|
|
|
response_data: Any = None
|
|
if utils.match_response(http_res, "200", "application/json"):
|
|
return unmarshal_json_response(
|
|
operations.GetAnalyticsMetaResponse, http_res
|
|
)
|
|
if utils.match_response(http_res, "401", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.UnauthorizedResponseErrorData, http_res
|
|
)
|
|
raise errors.UnauthorizedResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "403", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.ForbiddenResponseErrorData, http_res
|
|
)
|
|
raise errors.ForbiddenResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "500", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.InternalServerResponseErrorData, http_res
|
|
)
|
|
raise errors.InternalServerResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "4XX", "*"):
|
|
http_res_text = await utils.stream_to_text_async(http_res)
|
|
raise errors.OpenRouterDefaultError(
|
|
"API error occurred", http_res, http_res_text
|
|
)
|
|
if utils.match_response(http_res, "5XX", "*"):
|
|
http_res_text = await utils.stream_to_text_async(http_res)
|
|
raise errors.OpenRouterDefaultError(
|
|
"API error occurred", http_res, http_res_text
|
|
)
|
|
|
|
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
|
|
|
|
def query_analytics(
|
|
self,
|
|
*,
|
|
metrics: Iterable[str],
|
|
http_referer: Optional[str] = None,
|
|
x_open_router_title: Optional[str] = None,
|
|
x_open_router_categories: Optional[str] = None,
|
|
classifier_dimensions: Optional[
|
|
Union[
|
|
operations.ClassifierDimensions,
|
|
operations.ClassifierDimensionsTypedDict,
|
|
]
|
|
] = None,
|
|
classifier_filters: Optional[
|
|
Union[operations.ClassifierFilters, operations.ClassifierFiltersTypedDict]
|
|
] = None,
|
|
dimensions: Optional[Iterable[str]] = None,
|
|
filters: Optional[
|
|
Union[Iterable[operations.Filter], Iterable[operations.FilterTypedDict]]
|
|
] = None,
|
|
granularity: Optional[str] = None,
|
|
group_limit: Optional[int] = None,
|
|
limit: Optional[int] = None,
|
|
order_by: Optional[
|
|
Union[operations.OrderBy, operations.OrderByTypedDict]
|
|
] = None,
|
|
time_range: Optional[
|
|
Union[operations.TimeRange, operations.TimeRangeTypedDict]
|
|
] = None,
|
|
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
server_url: Optional[str] = None,
|
|
timeout_ms: Optional[int] = None,
|
|
http_headers: Optional[Mapping[str, str]] = None,
|
|
) -> operations.QueryAnalyticsResponse:
|
|
r"""Query analytics data
|
|
|
|
Execute an analytics query with specified metrics, dimensions, filters, and time range. [Management key](/docs/guides/overview/auth/management-api-keys) required.
|
|
|
|
:param metrics:
|
|
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
|
This is used to track API usage per application.
|
|
|
|
:param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
|
|
|
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
|
|
|
:param classifier_dimensions: Group results by custom classifier tags, breaking down metrics by the specified dimension values. Requires an active classifier on the workspace.
|
|
:param classifier_filters: Filter results to generations with specific classifier tag values. Can be combined with classifier_dimensions (must use the same classifier_id) or used independently with standard dimensions.
|
|
:param dimensions:
|
|
:param filters:
|
|
:param granularity: Time granularity
|
|
:param group_limit: Maximum rows per distinct combination of dimensions. When omitted on time-series queries (granularity + dimensions), auto-computed to avoid truncating time windows. Explicit values override the default and may truncate time buckets if set lower than the number of buckets in the range. Ignored when no dimensions are specified.
|
|
:param limit: Maximum total rows returned. Defaults to 1000. On time-series queries with dimensions and no explicit group_limit, the server may raise this to accommodate the expected number of unique time-bucket/dimension combinations.
|
|
:param order_by:
|
|
:param time_range:
|
|
:param retries: Override the default retry configuration for this method
|
|
:param server_url: Override the default server URL for this method
|
|
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
:param http_headers: Additional headers to set or replace on requests.
|
|
"""
|
|
base_url = None
|
|
url_variables = None
|
|
if timeout_ms is None:
|
|
timeout_ms = self.sdk_configuration.timeout_ms
|
|
|
|
if server_url is not None:
|
|
base_url = server_url
|
|
else:
|
|
base_url = self._get_url(base_url, url_variables)
|
|
|
|
request = operations.QueryAnalyticsRequest(
|
|
http_referer=http_referer,
|
|
x_open_router_title=x_open_router_title,
|
|
x_open_router_categories=x_open_router_categories,
|
|
request_body=operations.QueryAnalyticsRequestBody(
|
|
classifier_dimensions=utils.get_pydantic_model(
|
|
classifier_dimensions, Optional[operations.ClassifierDimensions]
|
|
),
|
|
classifier_filters=utils.get_pydantic_model(
|
|
classifier_filters, Optional[operations.ClassifierFilters]
|
|
),
|
|
dimensions=utils.unmarshal(dimensions, Optional[List[str]]),
|
|
filters=utils.get_pydantic_model(
|
|
filters, Optional[List[operations.Filter]]
|
|
),
|
|
granularity=granularity,
|
|
group_limit=group_limit,
|
|
limit=limit,
|
|
metrics=utils.unmarshal(metrics, List[str]),
|
|
order_by=utils.get_pydantic_model(
|
|
order_by, Optional[operations.OrderBy]
|
|
),
|
|
time_range=utils.get_pydantic_model(
|
|
time_range, Optional[operations.TimeRange]
|
|
),
|
|
),
|
|
)
|
|
|
|
req = self._build_request(
|
|
method="POST",
|
|
path="/analytics/query",
|
|
base_url=base_url,
|
|
url_variables=url_variables,
|
|
request=request,
|
|
request_body_required=True,
|
|
request_has_path_params=False,
|
|
request_has_query_params=True,
|
|
user_agent_header="user-agent",
|
|
accept_header_value="application/json",
|
|
http_headers=http_headers,
|
|
_globals=operations.QueryAnalyticsGlobals(
|
|
http_referer=self.sdk_configuration.globals.http_referer,
|
|
x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
|
|
x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
|
|
),
|
|
security=self.sdk_configuration.security,
|
|
get_serialized_body=lambda: utils.serialize_request_body(
|
|
request.request_body,
|
|
False,
|
|
False,
|
|
"json",
|
|
operations.QueryAnalyticsRequestBody,
|
|
),
|
|
allow_empty_value=None,
|
|
timeout_ms=timeout_ms,
|
|
)
|
|
|
|
if retries == UNSET:
|
|
if self.sdk_configuration.retry_config is not UNSET:
|
|
retries = self.sdk_configuration.retry_config
|
|
else:
|
|
retries = utils.RetryConfig(
|
|
"backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
|
|
)
|
|
|
|
retry_config = None
|
|
if isinstance(retries, utils.RetryConfig):
|
|
retry_config = (retries, ["5XX"])
|
|
|
|
http_res = self.do_request(
|
|
hook_ctx=HookContext(
|
|
config=self.sdk_configuration,
|
|
base_url=base_url or "",
|
|
operation_id="queryAnalytics",
|
|
oauth2_scopes=None,
|
|
security_source=get_security_from_env(
|
|
self.sdk_configuration.security, components.Security
|
|
),
|
|
tags=["beta.Analytics"],
|
|
extensions=None,
|
|
),
|
|
request=req,
|
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
retry_config=retry_config,
|
|
)
|
|
|
|
response_data: Any = None
|
|
if utils.match_response(http_res, "200", "application/json"):
|
|
return unmarshal_json_response(operations.QueryAnalyticsResponse, http_res)
|
|
if utils.match_response(http_res, "400", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.BadRequestResponseErrorData, http_res
|
|
)
|
|
raise errors.BadRequestResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "401", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.UnauthorizedResponseErrorData, http_res
|
|
)
|
|
raise errors.UnauthorizedResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "403", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.ForbiddenResponseErrorData, http_res
|
|
)
|
|
raise errors.ForbiddenResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "408", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.RequestTimeoutResponseErrorData, http_res
|
|
)
|
|
raise errors.RequestTimeoutResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "500", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.InternalServerResponseErrorData, http_res
|
|
)
|
|
raise errors.InternalServerResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "4XX", "*"):
|
|
http_res_text = utils.stream_to_text(http_res)
|
|
raise errors.OpenRouterDefaultError(
|
|
"API error occurred", http_res, http_res_text
|
|
)
|
|
if utils.match_response(http_res, "5XX", "*"):
|
|
http_res_text = utils.stream_to_text(http_res)
|
|
raise errors.OpenRouterDefaultError(
|
|
"API error occurred", http_res, http_res_text
|
|
)
|
|
|
|
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
|
|
|
|
async def query_analytics_async(
|
|
self,
|
|
*,
|
|
metrics: Iterable[str],
|
|
http_referer: Optional[str] = None,
|
|
x_open_router_title: Optional[str] = None,
|
|
x_open_router_categories: Optional[str] = None,
|
|
classifier_dimensions: Optional[
|
|
Union[
|
|
operations.ClassifierDimensions,
|
|
operations.ClassifierDimensionsTypedDict,
|
|
]
|
|
] = None,
|
|
classifier_filters: Optional[
|
|
Union[operations.ClassifierFilters, operations.ClassifierFiltersTypedDict]
|
|
] = None,
|
|
dimensions: Optional[Iterable[str]] = None,
|
|
filters: Optional[
|
|
Union[Iterable[operations.Filter], Iterable[operations.FilterTypedDict]]
|
|
] = None,
|
|
granularity: Optional[str] = None,
|
|
group_limit: Optional[int] = None,
|
|
limit: Optional[int] = None,
|
|
order_by: Optional[
|
|
Union[operations.OrderBy, operations.OrderByTypedDict]
|
|
] = None,
|
|
time_range: Optional[
|
|
Union[operations.TimeRange, operations.TimeRangeTypedDict]
|
|
] = None,
|
|
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
server_url: Optional[str] = None,
|
|
timeout_ms: Optional[int] = None,
|
|
http_headers: Optional[Mapping[str, str]] = None,
|
|
) -> operations.QueryAnalyticsResponse:
|
|
r"""Query analytics data
|
|
|
|
Execute an analytics query with specified metrics, dimensions, filters, and time range. [Management key](/docs/guides/overview/auth/management-api-keys) required.
|
|
|
|
:param metrics:
|
|
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
|
|
This is used to track API usage per application.
|
|
|
|
:param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
|
|
|
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
|
|
|
|
:param classifier_dimensions: Group results by custom classifier tags, breaking down metrics by the specified dimension values. Requires an active classifier on the workspace.
|
|
:param classifier_filters: Filter results to generations with specific classifier tag values. Can be combined with classifier_dimensions (must use the same classifier_id) or used independently with standard dimensions.
|
|
:param dimensions:
|
|
:param filters:
|
|
:param granularity: Time granularity
|
|
:param group_limit: Maximum rows per distinct combination of dimensions. When omitted on time-series queries (granularity + dimensions), auto-computed to avoid truncating time windows. Explicit values override the default and may truncate time buckets if set lower than the number of buckets in the range. Ignored when no dimensions are specified.
|
|
:param limit: Maximum total rows returned. Defaults to 1000. On time-series queries with dimensions and no explicit group_limit, the server may raise this to accommodate the expected number of unique time-bucket/dimension combinations.
|
|
:param order_by:
|
|
:param time_range:
|
|
:param retries: Override the default retry configuration for this method
|
|
:param server_url: Override the default server URL for this method
|
|
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
:param http_headers: Additional headers to set or replace on requests.
|
|
"""
|
|
base_url = None
|
|
url_variables = None
|
|
if timeout_ms is None:
|
|
timeout_ms = self.sdk_configuration.timeout_ms
|
|
|
|
if server_url is not None:
|
|
base_url = server_url
|
|
else:
|
|
base_url = self._get_url(base_url, url_variables)
|
|
|
|
request = operations.QueryAnalyticsRequest(
|
|
http_referer=http_referer,
|
|
x_open_router_title=x_open_router_title,
|
|
x_open_router_categories=x_open_router_categories,
|
|
request_body=operations.QueryAnalyticsRequestBody(
|
|
classifier_dimensions=utils.get_pydantic_model(
|
|
classifier_dimensions, Optional[operations.ClassifierDimensions]
|
|
),
|
|
classifier_filters=utils.get_pydantic_model(
|
|
classifier_filters, Optional[operations.ClassifierFilters]
|
|
),
|
|
dimensions=utils.unmarshal(dimensions, Optional[List[str]]),
|
|
filters=utils.get_pydantic_model(
|
|
filters, Optional[List[operations.Filter]]
|
|
),
|
|
granularity=granularity,
|
|
group_limit=group_limit,
|
|
limit=limit,
|
|
metrics=utils.unmarshal(metrics, List[str]),
|
|
order_by=utils.get_pydantic_model(
|
|
order_by, Optional[operations.OrderBy]
|
|
),
|
|
time_range=utils.get_pydantic_model(
|
|
time_range, Optional[operations.TimeRange]
|
|
),
|
|
),
|
|
)
|
|
|
|
req = self._build_request_async(
|
|
method="POST",
|
|
path="/analytics/query",
|
|
base_url=base_url,
|
|
url_variables=url_variables,
|
|
request=request,
|
|
request_body_required=True,
|
|
request_has_path_params=False,
|
|
request_has_query_params=True,
|
|
user_agent_header="user-agent",
|
|
accept_header_value="application/json",
|
|
http_headers=http_headers,
|
|
_globals=operations.QueryAnalyticsGlobals(
|
|
http_referer=self.sdk_configuration.globals.http_referer,
|
|
x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
|
|
x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
|
|
),
|
|
security=self.sdk_configuration.security,
|
|
get_serialized_body=lambda: utils.serialize_request_body(
|
|
request.request_body,
|
|
False,
|
|
False,
|
|
"json",
|
|
operations.QueryAnalyticsRequestBody,
|
|
),
|
|
allow_empty_value=None,
|
|
timeout_ms=timeout_ms,
|
|
)
|
|
|
|
if retries == UNSET:
|
|
if self.sdk_configuration.retry_config is not UNSET:
|
|
retries = self.sdk_configuration.retry_config
|
|
else:
|
|
retries = utils.RetryConfig(
|
|
"backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
|
|
)
|
|
|
|
retry_config = None
|
|
if isinstance(retries, utils.RetryConfig):
|
|
retry_config = (retries, ["5XX"])
|
|
|
|
http_res = await self.do_request_async(
|
|
hook_ctx=HookContext(
|
|
config=self.sdk_configuration,
|
|
base_url=base_url or "",
|
|
operation_id="queryAnalytics",
|
|
oauth2_scopes=None,
|
|
security_source=get_security_from_env(
|
|
self.sdk_configuration.security, components.Security
|
|
),
|
|
tags=["beta.Analytics"],
|
|
extensions=None,
|
|
),
|
|
request=req,
|
|
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
|
|
retry_config=retry_config,
|
|
)
|
|
|
|
response_data: Any = None
|
|
if utils.match_response(http_res, "200", "application/json"):
|
|
return unmarshal_json_response(operations.QueryAnalyticsResponse, http_res)
|
|
if utils.match_response(http_res, "400", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.BadRequestResponseErrorData, http_res
|
|
)
|
|
raise errors.BadRequestResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "401", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.UnauthorizedResponseErrorData, http_res
|
|
)
|
|
raise errors.UnauthorizedResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "403", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.ForbiddenResponseErrorData, http_res
|
|
)
|
|
raise errors.ForbiddenResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "408", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.RequestTimeoutResponseErrorData, http_res
|
|
)
|
|
raise errors.RequestTimeoutResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "500", "application/json"):
|
|
response_data = unmarshal_json_response(
|
|
errors.InternalServerResponseErrorData, http_res
|
|
)
|
|
raise errors.InternalServerResponseError(response_data, http_res)
|
|
if utils.match_response(http_res, "4XX", "*"):
|
|
http_res_text = await utils.stream_to_text_async(http_res)
|
|
raise errors.OpenRouterDefaultError(
|
|
"API error occurred", http_res, http_res_text
|
|
)
|
|
if utils.match_response(http_res, "5XX", "*"):
|
|
http_res_text = await utils.stream_to_text_async(http_res)
|
|
raise errors.OpenRouterDefaultError(
|
|
"API error occurred", http_res, http_res_text
|
|
)
|
|
|
|
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
|