Skip to content

Commit e08e506

Browse files
committed
python sdk manual types (and small fixes/cleanups)
1 parent ae7e070 commit e08e506

19 files changed

+690
-1775
lines changed

src/runloop_api_client/sdk/_helpers.py

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,10 @@
22

33
from __future__ import annotations
44

5-
import io
6-
import os
7-
from typing import Dict, Union, Literal, Callable
5+
from typing import Any, Dict, Type, Mapping, TypeVar
86
from pathlib import Path
97

10-
# Callback for streaming output. Must be synchronous even in async contexts.
11-
LogCallback = Callable[[str], None]
12-
13-
ContentType = Literal["unspecified", "text", "binary", "gzip", "tar", "tgz"]
14-
UploadData = Union[str, bytes, bytearray, Path, os.PathLike[str], io.IOBase]
8+
from ..types.object_create_params import ContentType
159

1610
_CONTENT_TYPE_MAP: Dict[str, ContentType] = {
1711
".txt": "text",
@@ -39,22 +33,17 @@ def detect_content_type(name: str) -> ContentType:
3933
return _CONTENT_TYPE_MAP.get(ext, "unspecified")
4034

4135

42-
def read_upload_data(data: UploadData) -> bytes:
43-
if isinstance(data, bytes):
44-
return data
45-
if isinstance(data, bytearray):
46-
return bytes(data)
47-
if isinstance(data, (Path, os.PathLike)):
48-
return Path(data).read_bytes()
49-
if isinstance(data, str):
50-
return data.encode("utf-8")
51-
if isinstance(data, io.TextIOBase):
52-
return data.read().encode("utf-8")
53-
if isinstance(data, io.BufferedIOBase) or isinstance(data, io.RawIOBase):
54-
return data.read()
55-
if hasattr(data, "read"):
56-
result = data.read()
57-
if isinstance(result, str):
58-
return result.encode("utf-8")
59-
return result
60-
raise TypeError("Unsupported upload data type. Provide str, bytes, path, or file-like object.")
36+
T = TypeVar("T")
37+
38+
39+
def filter_params(params: Mapping[str, Any], type_filter: Type[T]) -> T:
40+
"""Filter params dict to only include keys defined in the given TypedDict type.
41+
42+
Args:
43+
params: Dictionary or TypedDict of parameters to filter
44+
type_filter: TypedDict class to filter against
45+
46+
Returns:
47+
Filtered dictionary matching the TypedDict structure
48+
"""
49+
return {k: v for k, v in params.items() if k in type_filter.__annotations__} # type: ignore[return-value]
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
from typing import Union, Callable, Optional
2+
from typing_extensions import TypedDict
3+
4+
from runloop_api_client.types.devboxes import DiskSnapshotUpdateParams
5+
6+
from .._types import Body, Query, Headers, Timeout, NotGiven
7+
from ..lib.polling import PollingConfig
8+
from ..types.devbox_list_params import DevboxListParams
9+
from ..types.object_list_params import ObjectListParams
10+
from ..types.devbox_create_params import DevboxCreateParams, DevboxBaseCreateParams
11+
from ..types.object_create_params import ObjectCreateParams
12+
from ..types.blueprint_list_params import BlueprintListParams
13+
from ..types.object_download_params import ObjectDownloadParams
14+
from ..types.blueprint_create_params import BlueprintCreateParams
15+
from ..types.devbox_upload_file_params import DevboxUploadFileParams
16+
from ..types.devbox_create_tunnel_params import DevboxCreateTunnelParams
17+
from ..types.devbox_download_file_params import DevboxDownloadFileParams
18+
from ..types.devbox_execute_async_params import DevboxExecuteAsyncParams
19+
from ..types.devbox_remove_tunnel_params import DevboxRemoveTunnelParams
20+
from ..types.devbox_snapshot_disk_params import DevboxSnapshotDiskParams
21+
from ..types.devbox_read_file_contents_params import DevboxReadFileContentsParams
22+
from ..types.devbox_write_file_contents_params import DevboxWriteFileContentsParams
23+
from ..types.devboxes.disk_snapshot_list_params import DiskSnapshotListParams
24+
25+
LogCallback = Callable[[str], None]
26+
27+
28+
class ExecuteStreamingCallbacks(TypedDict, total=False):
29+
stdout: Optional[LogCallback]
30+
"""Callback invoked for each stdout log line"""
31+
32+
stderr: Optional[LogCallback]
33+
"""Callback invoked for each stderr log line"""
34+
35+
output: Optional[LogCallback]
36+
"""Callback invoked for all log lines (both stdout and stderr)"""
37+
38+
39+
class RequestOptions(TypedDict, total=False):
40+
extra_headers: Optional[Headers]
41+
"""Send extra headers"""
42+
43+
extra_query: Optional[Query]
44+
"""Add additional query parameters to the request"""
45+
46+
extra_body: Optional[Body]
47+
"""Add additional JSON properties to the request"""
48+
49+
timeout: Union[float, Timeout, NotGiven, None]
50+
"""Override the client-level default timeout for this request, in seconds"""
51+
52+
53+
class LongRequestOptions(RequestOptions, total=False):
54+
idempotency_key: Optional[str]
55+
"""Specify a custom idempotency key for this request"""
56+
57+
58+
class PollingRequestOptions(RequestOptions, total=False):
59+
polling_config: Optional[PollingConfig]
60+
"""Configuration for polling behavior"""
61+
62+
63+
class LongPollingRequestOptions(LongRequestOptions, PollingRequestOptions):
64+
pass
65+
66+
67+
class SDKDevboxCreateParams(DevboxCreateParams, LongPollingRequestOptions):
68+
pass
69+
70+
71+
class SDKDevboxExtraCreateParams(DevboxBaseCreateParams, LongPollingRequestOptions):
72+
pass
73+
74+
75+
class SDKDevboxExecuteParams(DevboxExecuteAsyncParams, ExecuteStreamingCallbacks, LongPollingRequestOptions):
76+
pass
77+
78+
79+
class SDKDevboxExecuteAsyncParams(DevboxExecuteAsyncParams, ExecuteStreamingCallbacks, LongRequestOptions):
80+
pass
81+
82+
83+
class SDKDevboxListParams(DevboxListParams, RequestOptions):
84+
pass
85+
86+
87+
class SDKDevboxReadFileContentsParams(DevboxReadFileContentsParams, LongRequestOptions):
88+
pass
89+
90+
91+
class SDKDevboxWriteFileContentsParams(DevboxWriteFileContentsParams, LongRequestOptions):
92+
pass
93+
94+
95+
class SDKDevboxDownloadFileParams(DevboxDownloadFileParams, LongRequestOptions):
96+
pass
97+
98+
99+
class SDKDevboxUploadFileParams(DevboxUploadFileParams, LongRequestOptions):
100+
pass
101+
102+
103+
class SDKDevboxCreateTunnelParams(DevboxCreateTunnelParams, LongRequestOptions):
104+
pass
105+
106+
107+
class SDKDevboxRemoveTunnelParams(DevboxRemoveTunnelParams, LongRequestOptions):
108+
pass
109+
110+
111+
class SDKDevboxSnapshotDiskAsyncParams(DevboxSnapshotDiskParams, LongRequestOptions):
112+
pass
113+
114+
115+
class SDKDevboxSnapshotDiskParams(DevboxSnapshotDiskParams, LongPollingRequestOptions):
116+
pass
117+
118+
119+
class SDKDiskSnapshotListParams(DiskSnapshotListParams, RequestOptions):
120+
pass
121+
122+
123+
class SDKDiskSnapshotUpdateParams(DiskSnapshotUpdateParams, LongRequestOptions):
124+
pass
125+
126+
127+
class SDKBlueprintCreateParams(BlueprintCreateParams, LongPollingRequestOptions):
128+
pass
129+
130+
131+
class SDKBlueprintListParams(BlueprintListParams, RequestOptions):
132+
pass
133+
134+
135+
class SDKObjectListParams(ObjectListParams, RequestOptions):
136+
pass
137+
138+
139+
class SDKObjectCreateParams(ObjectCreateParams, LongRequestOptions):
140+
pass
141+
142+
143+
class SDKObjectDownloadParams(ObjectDownloadParams, RequestOptions):
144+
pass

0 commit comments

Comments
 (0)