spctre-sdk 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- spctre/__init__.py +43 -0
- spctre/_generated/__init__.py +8 -0
- spctre/_generated/api/__init__.py +1 -0
- spctre/_generated/api/approvals/__init__.py +1 -0
- spctre/_generated/api/approvals/get_approval.py +174 -0
- spctre/_generated/api/auth/__init__.py +1 -0
- spctre/_generated/api/auth/refresh_token.py +203 -0
- spctre/_generated/api/auth/revoke_token.py +149 -0
- spctre/_generated/api/blueprint/__init__.py +1 -0
- spctre/_generated/api/blueprint/import_blueprint.py +217 -0
- spctre/_generated/api/bundle/__init__.py +1 -0
- spctre/_generated/api/bundle/get_bundle_latest.py +312 -0
- spctre/_generated/api/bundle/retain_latest_published_bundle.py +162 -0
- spctre/_generated/api/compliance/__init__.py +1 -0
- spctre/_generated/api/compliance/export_compliance.py +217 -0
- spctre/_generated/api/evidence/__init__.py +1 -0
- spctre/_generated/api/evidence/forensic_evidence_query.py +261 -0
- spctre/_generated/api/evidence/get_policy_content_artifact.py +192 -0
- spctre/_generated/api/evidence/ingest_evidence.py +206 -0
- spctre/_generated/api/evidence/ingest_git_checkpoint.py +210 -0
- spctre/_generated/api/evidence/retain_policy_content_artifact.py +211 -0
- spctre/_generated/api/gateway/__init__.py +1 -0
- spctre/_generated/api/gateway/gateway_decide.py +192 -0
- spctre/_generated/api/gateway/gateway_resolve.py +188 -0
- spctre/_generated/api/gateway/get_escalation_status.py +189 -0
- spctre/_generated/api/gateway/ingest_helicone_gateway_event.py +197 -0
- spctre/_generated/api/gateway/ingest_lite_llm_gateway_event.py +197 -0
- spctre/_generated/api/gateway/ingest_notion_gateway_event.py +201 -0
- spctre/_generated/api/gateway/ingest_portkey_gateway_event.py +197 -0
- spctre/_generated/api/gateway/list_escalations.py +178 -0
- spctre/_generated/api/gateway/register_agt_escalation_request.py +175 -0
- spctre/_generated/api/meta/__init__.py +1 -0
- spctre/_generated/api/meta/get_open_api_spec.py +136 -0
- spctre/_generated/api/policy/__init__.py +1 -0
- spctre/_generated/api/policy/import_policy.py +209 -0
- spctre/_generated/api/scim/__init__.py +1 -0
- spctre/_generated/api/scim/scim_create_user.py +180 -0
- spctre/_generated/api/scim/scim_list_users.py +210 -0
- spctre/_generated/api/simulation/__init__.py +1 -0
- spctre/_generated/api/simulation/evaluate_policy.py +193 -0
- spctre/_generated/api/trust/__init__.py +1 -0
- spctre/_generated/api/trust/evaluate_trust_governance.py +190 -0
- spctre/_generated/api/trust/ingest_context_budget_event.py +190 -0
- spctre/_generated/api/trust/ingest_trust_score.py +188 -0
- spctre/_generated/api/verification/__init__.py +1 -0
- spctre/_generated/api/verification/ingest_verification.py +183 -0
- spctre/_generated/api/verification/list_verifications.py +204 -0
- spctre/_generated/client.py +282 -0
- spctre/_generated/errors.py +16 -0
- spctre/_generated/models/__init__.py +317 -0
- spctre/_generated/models/api_error.py +100 -0
- spctre/_generated/models/api_error_issues_item.py +70 -0
- spctre/_generated/models/api_meta.py +78 -0
- spctre/_generated/models/approval_response.py +77 -0
- spctre/_generated/models/approval_response_approval.py +47 -0
- spctre/_generated/models/blueprint_import_request.py +74 -0
- spctre/_generated/models/blueprint_import_response.py +124 -0
- spctre/_generated/models/bundle_export_blocked_response.py +85 -0
- spctre/_generated/models/bundle_export_envelope.py +112 -0
- spctre/_generated/models/bundle_export_envelope_artifact_type_1.py +47 -0
- spctre/_generated/models/bundle_export_format.py +12 -0
- spctre/_generated/models/bundle_export_manifest.py +159 -0
- spctre/_generated/models/bundle_export_manifest_compatibility_level.py +10 -0
- spctre/_generated/models/bundle_export_manifest_provenance.py +148 -0
- spctre/_generated/models/bundle_export_manifest_provenance_target_stacks_item.py +47 -0
- spctre/_generated/models/bundle_export_preview_response.py +85 -0
- spctre/_generated/models/bundle_export_verification.py +91 -0
- spctre/_generated/models/bundle_export_verification_failed_response.py +95 -0
- spctre/_generated/models/bundle_response.py +50 -0
- spctre/_generated/models/compliance_export_response.py +305 -0
- spctre/_generated/models/compliance_export_response_approvals_item.py +47 -0
- spctre/_generated/models/compliance_export_response_artifact.py +47 -0
- spctre/_generated/models/compliance_export_response_escalations_item.py +47 -0
- spctre/_generated/models/compliance_export_response_framework_annotation_type_0.py +47 -0
- spctre/_generated/models/compliance_export_response_retention_plan_type_0.py +47 -0
- spctre/_generated/models/compliance_export_response_summary.py +126 -0
- spctre/_generated/models/compliance_export_response_timeline_item.py +47 -0
- spctre/_generated/models/compliance_export_response_verification_results_type_0.py +47 -0
- spctre/_generated/models/context_budget_ingest_request.py +192 -0
- spctre/_generated/models/context_budget_ingest_request_context_source_mix.py +47 -0
- spctre/_generated/models/context_budget_ingest_request_event_type.py +11 -0
- spctre/_generated/models/context_budget_ingest_request_governance_action.py +11 -0
- spctre/_generated/models/credential_grant.py +86 -0
- spctre/_generated/models/escalation_queue_item.py +194 -0
- spctre/_generated/models/escalation_status_response.py +257 -0
- spctre/_generated/models/escalation_status_response_approved_tool_parameters.py +52 -0
- spctre/_generated/models/escalation_status_response_resolution_outcome.py +10 -0
- spctre/_generated/models/escalation_status_response_status.py +11 -0
- spctre/_generated/models/evaluate_request.py +124 -0
- spctre/_generated/models/evaluate_request_tool_parameters.py +47 -0
- spctre/_generated/models/evaluate_response.py +150 -0
- spctre/_generated/models/evaluate_response_result.py +47 -0
- spctre/_generated/models/evaluate_trust_governance_response_200.py +47 -0
- spctre/_generated/models/evidence_ingest_request.py +567 -0
- spctre/_generated/models/evidence_ingest_request_execution_context.py +107 -0
- spctre/_generated/models/evidence_ingest_request_ingest_mode.py +9 -0
- spctre/_generated/models/evidence_ingest_request_orchestrator_ref.py +91 -0
- spctre/_generated/models/evidence_ingest_request_plugin_source.py +11 -0
- spctre/_generated/models/evidence_ingest_request_raw_evidence.py +47 -0
- spctre/_generated/models/evidence_ingest_request_skill_context.py +96 -0
- spctre/_generated/models/evidence_ingest_request_tool_parameters.py +47 -0
- spctre/_generated/models/evidence_ingest_response.py +112 -0
- spctre/_generated/models/evidence_ingest_response_evidence.py +47 -0
- spctre/_generated/models/evidence_ingest_response_gateway.py +109 -0
- spctre/_generated/models/evidence_ingest_response_gateway_outcome.py +10 -0
- spctre/_generated/models/evidence_ingest_response_gateway_risk_level.py +11 -0
- spctre/_generated/models/evidence_layer.py +9 -0
- spctre/_generated/models/export_compliance_format.py +9 -0
- spctre/_generated/models/export_compliance_framework.py +15 -0
- spctre/_generated/models/forensic_evidence_query_response_200.py +47 -0
- spctre/_generated/models/forensic_evidence_query_response_402.py +119 -0
- spctre/_generated/models/forensic_evidence_query_response_402_plan.py +8 -0
- spctre/_generated/models/gateway_decision.py +120 -0
- spctre/_generated/models/gateway_decision_outcome.py +10 -0
- spctre/_generated/models/gateway_decision_request.py +284 -0
- spctre/_generated/models/gateway_decision_request_risk_level.py +11 -0
- spctre/_generated/models/gateway_decision_request_tool_parameters.py +47 -0
- spctre/_generated/models/gateway_decision_response.py +109 -0
- spctre/_generated/models/gateway_decision_risk_level.py +11 -0
- spctre/_generated/models/gateway_ingest_response.py +92 -0
- spctre/_generated/models/gateway_resolve_request.py +94 -0
- spctre/_generated/models/gateway_resolve_request_resolution_outcome.py +10 -0
- spctre/_generated/models/gateway_resolve_response_200.py +83 -0
- spctre/_generated/models/gateway_webhook_request.py +50 -0
- spctre/_generated/models/get_open_api_spec_response_200.py +47 -0
- spctre/_generated/models/git_checkpoint_ingest_request.py +182 -0
- spctre/_generated/models/git_checkpoint_ingest_request_agent.py +70 -0
- spctre/_generated/models/git_checkpoint_ingest_request_checkpoint.py +132 -0
- spctre/_generated/models/git_checkpoint_ingest_request_checkpoint_diff.py +119 -0
- spctre/_generated/models/git_checkpoint_ingest_request_checkpoint_diff_files_item.py +91 -0
- spctre/_generated/models/git_checkpoint_ingest_request_checkpoint_diff_files_item_status.py +13 -0
- spctre/_generated/models/git_checkpoint_ingest_request_checkpoint_diff_format.py +10 -0
- spctre/_generated/models/git_checkpoint_ingest_request_checkpoint_repository.py +72 -0
- spctre/_generated/models/git_checkpoint_ingest_request_metadata.py +47 -0
- spctre/_generated/models/ingest_context_budget_event_response_201.py +47 -0
- spctre/_generated/models/ingest_trust_score_response_201.py +47 -0
- spctre/_generated/models/list_escalations_response_200.py +141 -0
- spctre/_generated/models/list_verifications_response_200.py +147 -0
- spctre/_generated/models/list_verifications_response_200_results_item.py +47 -0
- spctre/_generated/models/pagination.py +77 -0
- spctre/_generated/models/policy_content_artifact_retain_response.py +83 -0
- spctre/_generated/models/policy_import_request.py +127 -0
- spctre/_generated/models/policy_import_request_scope.py +11 -0
- spctre/_generated/models/policy_import_response.py +115 -0
- spctre/_generated/models/register_agt_escalation_request_body.py +69 -0
- spctre/_generated/models/retain_latest_published_bundle_response_201.py +91 -0
- spctre/_generated/models/runtime_decision_status.py +11 -0
- spctre/_generated/models/runtime_policy_context.py +115 -0
- spctre/_generated/models/runtime_policy_context_scope.py +12 -0
- spctre/_generated/models/runtime_stack.py +26 -0
- spctre/_generated/models/runtime_target.py +101 -0
- spctre/_generated/models/scim_create_user_body.py +47 -0
- spctre/_generated/models/scim_create_user_response_201.py +47 -0
- spctre/_generated/models/scim_create_user_response_402.py +117 -0
- spctre/_generated/models/scim_create_user_response_402_plan.py +8 -0
- spctre/_generated/models/scim_list_users_response_200.py +47 -0
- spctre/_generated/models/scim_list_users_response_402.py +117 -0
- spctre/_generated/models/scim_list_users_response_402_plan.py +8 -0
- spctre/_generated/models/token_refresh_request.py +61 -0
- spctre/_generated/models/token_refresh_response.py +104 -0
- spctre/_generated/models/trigger_kind.py +13 -0
- spctre/_generated/models/trust_evaluate_request.py +160 -0
- spctre/_generated/models/trust_evaluate_request_consequence_tier.py +11 -0
- spctre/_generated/models/trust_score_ingest_request.py +115 -0
- spctre/_generated/models/trust_score_ingest_request_source.py +12 -0
- spctre/_generated/models/verification_ingest_request.py +369 -0
- spctre/_generated/models/verification_ingest_request_compatibility_check_outcome.py +10 -0
- spctre/_generated/models/verification_ingest_request_escrow_verification_outcome.py +10 -0
- spctre/_generated/models/verification_ingest_request_outcome.py +10 -0
- spctre/_generated/models/verification_ingest_request_summary.py +47 -0
- spctre/_generated/models/verification_ingest_request_verification_type.py +13 -0
- spctre/_generated/models/verification_ingest_response.py +97 -0
- spctre/_generated/models/verification_ingest_response_outcome.py +10 -0
- spctre/_generated/types.py +54 -0
- spctre/_url.py +52 -0
- spctre/_version.py +1 -0
- spctre/client.py +313 -0
- spctre/errors.py +160 -0
- spctre/models.py +15 -0
- spctre/py.typed +0 -0
- spctre_sdk-0.1.0.dist-info/METADATA +145 -0
- spctre_sdk-0.1.0.dist-info/RECORD +183 -0
- spctre_sdk-0.1.0.dist-info/WHEEL +4 -0
spctre/__init__.py
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""Supported Python client for the Spctre control plane.
|
|
2
|
+
|
|
3
|
+
from spctre import SpctreClient
|
|
4
|
+
|
|
5
|
+
client = SpctreClient(base_url="https://app-staging.spctre.dev", token=token)
|
|
6
|
+
decision = client.gateway.decide(request)
|
|
7
|
+
|
|
8
|
+
Request and response models live in `spctre.models`. The full generated
|
|
9
|
+
surface, including operations the facade does not wrap, is under
|
|
10
|
+
`spctre._generated` — regenerated wholesale from the OpenAPI spec and not
|
|
11
|
+
covered by this package's stability promise.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from . import models
|
|
15
|
+
from ._url import API_PREFIX, normalize_base_url
|
|
16
|
+
from ._version import __version__
|
|
17
|
+
from .client import UNSET, SpctreClient, Unset
|
|
18
|
+
from .errors import (
|
|
19
|
+
SpctreAuthError,
|
|
20
|
+
SpctreError,
|
|
21
|
+
SpctrePermissionError,
|
|
22
|
+
SpctreRequestError,
|
|
23
|
+
SpctreResponseError,
|
|
24
|
+
SpctreServerError,
|
|
25
|
+
SpctreTransportError,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
__all__ = [
|
|
29
|
+
"API_PREFIX",
|
|
30
|
+
"SpctreAuthError",
|
|
31
|
+
"SpctreClient",
|
|
32
|
+
"SpctreError",
|
|
33
|
+
"SpctrePermissionError",
|
|
34
|
+
"SpctreRequestError",
|
|
35
|
+
"SpctreResponseError",
|
|
36
|
+
"SpctreServerError",
|
|
37
|
+
"SpctreTransportError",
|
|
38
|
+
"UNSET",
|
|
39
|
+
"Unset",
|
|
40
|
+
"__version__",
|
|
41
|
+
"models",
|
|
42
|
+
"normalize_base_url",
|
|
43
|
+
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Contains methods for accessing the API"""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Contains endpoint functions for accessing the API"""
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
from http import HTTPStatus
|
|
2
|
+
from typing import Any
|
|
3
|
+
from urllib.parse import quote
|
|
4
|
+
|
|
5
|
+
import httpx
|
|
6
|
+
|
|
7
|
+
from ... import errors
|
|
8
|
+
from ...client import AuthenticatedClient, Client
|
|
9
|
+
from ...models.api_error import ApiError
|
|
10
|
+
from ...models.approval_response import ApprovalResponse
|
|
11
|
+
from ...types import Response
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _get_kwargs(
|
|
15
|
+
id: str,
|
|
16
|
+
) -> dict[str, Any]:
|
|
17
|
+
|
|
18
|
+
_kwargs: dict[str, Any] = {
|
|
19
|
+
"method": "get",
|
|
20
|
+
"url": "/approvals/{id}".format(
|
|
21
|
+
id=quote(str(id), safe=""),
|
|
22
|
+
),
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return _kwargs
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _parse_response(
|
|
29
|
+
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
30
|
+
) -> ApiError | ApprovalResponse | None:
|
|
31
|
+
if response.status_code == 200:
|
|
32
|
+
response_200 = ApprovalResponse.from_dict(response.json())
|
|
33
|
+
|
|
34
|
+
return response_200
|
|
35
|
+
|
|
36
|
+
if response.status_code == 401:
|
|
37
|
+
response_401 = ApiError.from_dict(response.json())
|
|
38
|
+
|
|
39
|
+
return response_401
|
|
40
|
+
|
|
41
|
+
if response.status_code == 404:
|
|
42
|
+
response_404 = ApiError.from_dict(response.json())
|
|
43
|
+
|
|
44
|
+
return response_404
|
|
45
|
+
|
|
46
|
+
if client.raise_on_unexpected_status:
|
|
47
|
+
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
48
|
+
else:
|
|
49
|
+
return None
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _build_response(
|
|
53
|
+
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
54
|
+
) -> Response[ApiError | ApprovalResponse]:
|
|
55
|
+
return Response(
|
|
56
|
+
status_code=HTTPStatus(response.status_code),
|
|
57
|
+
content=response.content,
|
|
58
|
+
headers=response.headers,
|
|
59
|
+
parsed=_parse_response(client=client, response=response),
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def sync_detailed(
|
|
64
|
+
id: str,
|
|
65
|
+
*,
|
|
66
|
+
client: AuthenticatedClient | Client,
|
|
67
|
+
) -> Response[ApiError | ApprovalResponse]:
|
|
68
|
+
"""Get an approval by ID
|
|
69
|
+
|
|
70
|
+
Returns the approval record for a specific revision approval ID.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
id (str):
|
|
74
|
+
|
|
75
|
+
Raises:
|
|
76
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
77
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
Response[ApiError | ApprovalResponse]
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
kwargs = _get_kwargs(
|
|
84
|
+
id=id,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
response = client.get_httpx_client().request(
|
|
88
|
+
**kwargs,
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
return _build_response(client=client, response=response)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def sync(
|
|
95
|
+
id: str,
|
|
96
|
+
*,
|
|
97
|
+
client: AuthenticatedClient | Client,
|
|
98
|
+
) -> ApiError | ApprovalResponse | None:
|
|
99
|
+
"""Get an approval by ID
|
|
100
|
+
|
|
101
|
+
Returns the approval record for a specific revision approval ID.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
id (str):
|
|
105
|
+
|
|
106
|
+
Raises:
|
|
107
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
108
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
ApiError | ApprovalResponse
|
|
112
|
+
"""
|
|
113
|
+
|
|
114
|
+
return sync_detailed(
|
|
115
|
+
id=id,
|
|
116
|
+
client=client,
|
|
117
|
+
).parsed
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
async def asyncio_detailed(
|
|
121
|
+
id: str,
|
|
122
|
+
*,
|
|
123
|
+
client: AuthenticatedClient | Client,
|
|
124
|
+
) -> Response[ApiError | ApprovalResponse]:
|
|
125
|
+
"""Get an approval by ID
|
|
126
|
+
|
|
127
|
+
Returns the approval record for a specific revision approval ID.
|
|
128
|
+
|
|
129
|
+
Args:
|
|
130
|
+
id (str):
|
|
131
|
+
|
|
132
|
+
Raises:
|
|
133
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
134
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
135
|
+
|
|
136
|
+
Returns:
|
|
137
|
+
Response[ApiError | ApprovalResponse]
|
|
138
|
+
"""
|
|
139
|
+
|
|
140
|
+
kwargs = _get_kwargs(
|
|
141
|
+
id=id,
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
response = await client.get_async_httpx_client().request(**kwargs)
|
|
145
|
+
|
|
146
|
+
return _build_response(client=client, response=response)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
async def asyncio(
|
|
150
|
+
id: str,
|
|
151
|
+
*,
|
|
152
|
+
client: AuthenticatedClient | Client,
|
|
153
|
+
) -> ApiError | ApprovalResponse | None:
|
|
154
|
+
"""Get an approval by ID
|
|
155
|
+
|
|
156
|
+
Returns the approval record for a specific revision approval ID.
|
|
157
|
+
|
|
158
|
+
Args:
|
|
159
|
+
id (str):
|
|
160
|
+
|
|
161
|
+
Raises:
|
|
162
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
163
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
ApiError | ApprovalResponse
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
return (
|
|
170
|
+
await asyncio_detailed(
|
|
171
|
+
id=id,
|
|
172
|
+
client=client,
|
|
173
|
+
)
|
|
174
|
+
).parsed
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Contains endpoint functions for accessing the API"""
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
from http import HTTPStatus
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
import httpx
|
|
5
|
+
|
|
6
|
+
from ... import errors
|
|
7
|
+
from ...client import AuthenticatedClient, Client
|
|
8
|
+
from ...models.api_error import ApiError
|
|
9
|
+
from ...models.token_refresh_request import TokenRefreshRequest
|
|
10
|
+
from ...models.token_refresh_response import TokenRefreshResponse
|
|
11
|
+
from ...types import UNSET, Response, Unset
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _get_kwargs(
|
|
15
|
+
*,
|
|
16
|
+
body: TokenRefreshRequest,
|
|
17
|
+
idempotency_key: str | Unset = UNSET,
|
|
18
|
+
) -> dict[str, Any]:
|
|
19
|
+
headers: dict[str, Any] = {}
|
|
20
|
+
if not isinstance(idempotency_key, Unset):
|
|
21
|
+
headers["Idempotency-Key"] = idempotency_key
|
|
22
|
+
|
|
23
|
+
_kwargs: dict[str, Any] = {
|
|
24
|
+
"method": "post",
|
|
25
|
+
"url": "/token/refresh",
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
_kwargs["json"] = body.to_dict()
|
|
29
|
+
|
|
30
|
+
headers["Content-Type"] = "application/json"
|
|
31
|
+
|
|
32
|
+
_kwargs["headers"] = headers
|
|
33
|
+
return _kwargs
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _parse_response(
|
|
37
|
+
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
38
|
+
) -> ApiError | TokenRefreshResponse | None:
|
|
39
|
+
if response.status_code == 200:
|
|
40
|
+
response_200 = TokenRefreshResponse.from_dict(response.json())
|
|
41
|
+
|
|
42
|
+
return response_200
|
|
43
|
+
|
|
44
|
+
if response.status_code == 400:
|
|
45
|
+
response_400 = ApiError.from_dict(response.json())
|
|
46
|
+
|
|
47
|
+
return response_400
|
|
48
|
+
|
|
49
|
+
if response.status_code == 401:
|
|
50
|
+
response_401 = ApiError.from_dict(response.json())
|
|
51
|
+
|
|
52
|
+
return response_401
|
|
53
|
+
|
|
54
|
+
if response.status_code == 503:
|
|
55
|
+
response_503 = ApiError.from_dict(response.json())
|
|
56
|
+
|
|
57
|
+
return response_503
|
|
58
|
+
|
|
59
|
+
if client.raise_on_unexpected_status:
|
|
60
|
+
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
61
|
+
else:
|
|
62
|
+
return None
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _build_response(
|
|
66
|
+
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
67
|
+
) -> Response[ApiError | TokenRefreshResponse]:
|
|
68
|
+
return Response(
|
|
69
|
+
status_code=HTTPStatus(response.status_code),
|
|
70
|
+
content=response.content,
|
|
71
|
+
headers=response.headers,
|
|
72
|
+
parsed=_parse_response(client=client, response=response),
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def sync_detailed(
|
|
77
|
+
*,
|
|
78
|
+
client: AuthenticatedClient | Client,
|
|
79
|
+
body: TokenRefreshRequest,
|
|
80
|
+
idempotency_key: str | Unset = UNSET,
|
|
81
|
+
) -> Response[ApiError | TokenRefreshResponse]:
|
|
82
|
+
"""Rotate an access/refresh token pair
|
|
83
|
+
|
|
84
|
+
Exchanges a valid refresh token for a fresh short-lived access token and rolling refresh token. The
|
|
85
|
+
previous access token is revoked and the previous refresh token is marked rotated.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
idempotency_key (str | Unset):
|
|
89
|
+
body (TokenRefreshRequest):
|
|
90
|
+
|
|
91
|
+
Raises:
|
|
92
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
93
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
Response[ApiError | TokenRefreshResponse]
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
kwargs = _get_kwargs(
|
|
100
|
+
body=body,
|
|
101
|
+
idempotency_key=idempotency_key,
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
response = client.get_httpx_client().request(
|
|
105
|
+
**kwargs,
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
return _build_response(client=client, response=response)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def sync(
|
|
112
|
+
*,
|
|
113
|
+
client: AuthenticatedClient | Client,
|
|
114
|
+
body: TokenRefreshRequest,
|
|
115
|
+
idempotency_key: str | Unset = UNSET,
|
|
116
|
+
) -> ApiError | TokenRefreshResponse | None:
|
|
117
|
+
"""Rotate an access/refresh token pair
|
|
118
|
+
|
|
119
|
+
Exchanges a valid refresh token for a fresh short-lived access token and rolling refresh token. The
|
|
120
|
+
previous access token is revoked and the previous refresh token is marked rotated.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
idempotency_key (str | Unset):
|
|
124
|
+
body (TokenRefreshRequest):
|
|
125
|
+
|
|
126
|
+
Raises:
|
|
127
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
128
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
ApiError | TokenRefreshResponse
|
|
132
|
+
"""
|
|
133
|
+
|
|
134
|
+
return sync_detailed(
|
|
135
|
+
client=client,
|
|
136
|
+
body=body,
|
|
137
|
+
idempotency_key=idempotency_key,
|
|
138
|
+
).parsed
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
async def asyncio_detailed(
|
|
142
|
+
*,
|
|
143
|
+
client: AuthenticatedClient | Client,
|
|
144
|
+
body: TokenRefreshRequest,
|
|
145
|
+
idempotency_key: str | Unset = UNSET,
|
|
146
|
+
) -> Response[ApiError | TokenRefreshResponse]:
|
|
147
|
+
"""Rotate an access/refresh token pair
|
|
148
|
+
|
|
149
|
+
Exchanges a valid refresh token for a fresh short-lived access token and rolling refresh token. The
|
|
150
|
+
previous access token is revoked and the previous refresh token is marked rotated.
|
|
151
|
+
|
|
152
|
+
Args:
|
|
153
|
+
idempotency_key (str | Unset):
|
|
154
|
+
body (TokenRefreshRequest):
|
|
155
|
+
|
|
156
|
+
Raises:
|
|
157
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
158
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
159
|
+
|
|
160
|
+
Returns:
|
|
161
|
+
Response[ApiError | TokenRefreshResponse]
|
|
162
|
+
"""
|
|
163
|
+
|
|
164
|
+
kwargs = _get_kwargs(
|
|
165
|
+
body=body,
|
|
166
|
+
idempotency_key=idempotency_key,
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
response = await client.get_async_httpx_client().request(**kwargs)
|
|
170
|
+
|
|
171
|
+
return _build_response(client=client, response=response)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
async def asyncio(
|
|
175
|
+
*,
|
|
176
|
+
client: AuthenticatedClient | Client,
|
|
177
|
+
body: TokenRefreshRequest,
|
|
178
|
+
idempotency_key: str | Unset = UNSET,
|
|
179
|
+
) -> ApiError | TokenRefreshResponse | None:
|
|
180
|
+
"""Rotate an access/refresh token pair
|
|
181
|
+
|
|
182
|
+
Exchanges a valid refresh token for a fresh short-lived access token and rolling refresh token. The
|
|
183
|
+
previous access token is revoked and the previous refresh token is marked rotated.
|
|
184
|
+
|
|
185
|
+
Args:
|
|
186
|
+
idempotency_key (str | Unset):
|
|
187
|
+
body (TokenRefreshRequest):
|
|
188
|
+
|
|
189
|
+
Raises:
|
|
190
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
191
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
192
|
+
|
|
193
|
+
Returns:
|
|
194
|
+
ApiError | TokenRefreshResponse
|
|
195
|
+
"""
|
|
196
|
+
|
|
197
|
+
return (
|
|
198
|
+
await asyncio_detailed(
|
|
199
|
+
client=client,
|
|
200
|
+
body=body,
|
|
201
|
+
idempotency_key=idempotency_key,
|
|
202
|
+
)
|
|
203
|
+
).parsed
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
from http import HTTPStatus
|
|
2
|
+
from typing import Any, cast
|
|
3
|
+
|
|
4
|
+
import httpx
|
|
5
|
+
|
|
6
|
+
from ... import errors
|
|
7
|
+
from ...client import AuthenticatedClient, Client
|
|
8
|
+
from ...models.api_error import ApiError
|
|
9
|
+
from ...types import Response
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _get_kwargs() -> dict[str, Any]:
|
|
13
|
+
|
|
14
|
+
_kwargs: dict[str, Any] = {
|
|
15
|
+
"method": "post",
|
|
16
|
+
"url": "/token/revoke",
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return _kwargs
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _parse_response(
|
|
23
|
+
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
24
|
+
) -> Any | ApiError | None:
|
|
25
|
+
if response.status_code == 204:
|
|
26
|
+
response_204 = cast(Any, None)
|
|
27
|
+
return response_204
|
|
28
|
+
|
|
29
|
+
if response.status_code == 401:
|
|
30
|
+
response_401 = ApiError.from_dict(response.json())
|
|
31
|
+
|
|
32
|
+
return response_401
|
|
33
|
+
|
|
34
|
+
if response.status_code == 503:
|
|
35
|
+
response_503 = ApiError.from_dict(response.json())
|
|
36
|
+
|
|
37
|
+
return response_503
|
|
38
|
+
|
|
39
|
+
if client.raise_on_unexpected_status:
|
|
40
|
+
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
41
|
+
else:
|
|
42
|
+
return None
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _build_response(
|
|
46
|
+
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
47
|
+
) -> Response[Any | ApiError]:
|
|
48
|
+
return Response(
|
|
49
|
+
status_code=HTTPStatus(response.status_code),
|
|
50
|
+
content=response.content,
|
|
51
|
+
headers=response.headers,
|
|
52
|
+
parsed=_parse_response(client=client, response=response),
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def sync_detailed(
|
|
57
|
+
*,
|
|
58
|
+
client: AuthenticatedClient,
|
|
59
|
+
) -> Response[Any | ApiError]:
|
|
60
|
+
"""Revoke the current service token
|
|
61
|
+
|
|
62
|
+
Revokes the bearer access token used for the request and any active refresh token linked to it.
|
|
63
|
+
Successful revocation returns 204 with no body.
|
|
64
|
+
|
|
65
|
+
Raises:
|
|
66
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
67
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
Response[Any | ApiError]
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
kwargs = _get_kwargs()
|
|
74
|
+
|
|
75
|
+
response = client.get_httpx_client().request(
|
|
76
|
+
**kwargs,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
return _build_response(client=client, response=response)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def sync(
|
|
83
|
+
*,
|
|
84
|
+
client: AuthenticatedClient,
|
|
85
|
+
) -> Any | ApiError | None:
|
|
86
|
+
"""Revoke the current service token
|
|
87
|
+
|
|
88
|
+
Revokes the bearer access token used for the request and any active refresh token linked to it.
|
|
89
|
+
Successful revocation returns 204 with no body.
|
|
90
|
+
|
|
91
|
+
Raises:
|
|
92
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
93
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
Any | ApiError
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
return sync_detailed(
|
|
100
|
+
client=client,
|
|
101
|
+
).parsed
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
async def asyncio_detailed(
|
|
105
|
+
*,
|
|
106
|
+
client: AuthenticatedClient,
|
|
107
|
+
) -> Response[Any | ApiError]:
|
|
108
|
+
"""Revoke the current service token
|
|
109
|
+
|
|
110
|
+
Revokes the bearer access token used for the request and any active refresh token linked to it.
|
|
111
|
+
Successful revocation returns 204 with no body.
|
|
112
|
+
|
|
113
|
+
Raises:
|
|
114
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
115
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
Response[Any | ApiError]
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
kwargs = _get_kwargs()
|
|
122
|
+
|
|
123
|
+
response = await client.get_async_httpx_client().request(**kwargs)
|
|
124
|
+
|
|
125
|
+
return _build_response(client=client, response=response)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
async def asyncio(
|
|
129
|
+
*,
|
|
130
|
+
client: AuthenticatedClient,
|
|
131
|
+
) -> Any | ApiError | None:
|
|
132
|
+
"""Revoke the current service token
|
|
133
|
+
|
|
134
|
+
Revokes the bearer access token used for the request and any active refresh token linked to it.
|
|
135
|
+
Successful revocation returns 204 with no body.
|
|
136
|
+
|
|
137
|
+
Raises:
|
|
138
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
139
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
140
|
+
|
|
141
|
+
Returns:
|
|
142
|
+
Any | ApiError
|
|
143
|
+
"""
|
|
144
|
+
|
|
145
|
+
return (
|
|
146
|
+
await asyncio_detailed(
|
|
147
|
+
client=client,
|
|
148
|
+
)
|
|
149
|
+
).parsed
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Contains endpoint functions for accessing the API"""
|