Commit 0b35bbe
refactor!: update default timeout tiers on non-storage resource clients (#664)
## Goal
Update default timeout tiers on individual resource client methods.
## Tier philosophy
| Tier | Value | Use for |
|------|-------|---------|
| `short` (5s) | Simple metadata CRUD | get/update/delete single
resources, quick checks |
| `medium` (30s) | Moderate operations | list with pagination, create,
batch ops, triggering runs/builds |
| `long` (360s) | Heavy operations | downloading/streaming large data,
large payloads |
| `no_timeout` | Indefinite | Polling/waiting (`wait_for_finish`,
`call`, streaming logs) |
## Current state
Only storage clients (Dataset, KVS, RQ) were tiered in PR #653.
Everything else defaults to `'long'` — meaning even a simple
`actor.get()` has a 360s timeout.
## Changes description
### ActorClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `get()` | long | **short** | Simple metadata fetch |
| `update()` | long | **short** | Simple metadata update |
| `delete()` | long | **short** | Simple delete |
| `start()` | long | **medium** | Triggers a run, returns run info (some
server processing) |
| `call()` | long | **no_timeout** | Starts run AND waits for finish —
can take minutes or even much more |
| `build()` | long | **medium** | Triggers a build, returns quickly |
| `default_build()` | long | **short** | Simple metadata fetch |
| `last_run()` | long | **short** | Simple metadata fetch |
| `validate_input()` | long | **short** | Quick validation call |
### ActorCollectionClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `list()` | long | **medium** | Paginated list, could be large |
| `create()` | long | **medium** | Creates resource, some processing |
### ActorVersionClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `get()` | long | **short** | Simple metadata |
| `update()` | long | **short** | Simple metadata |
| `delete()` | long | **short** | Simple delete |
### ActorVersionCollectionClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `list()` | long | **short** | Typically small lists |
| `create()` | long | **short** | Simple create |
### ActorEnvVarClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `get()` | long | **short** | Simple metadata |
| `update()` | long | **short** | Simple metadata |
| `delete()` | long | **short** | Simple delete |
### ActorEnvVarCollectionClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `list()` | long | **short** | Small lists |
| `create()` | long | **short** | Simple create |
### BuildClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `get()` | long | **short** | Simple metadata |
| `delete()` | long | **short** | Simple delete |
| `abort()` | long | **short** | Sends abort signal, returns immediately
|
| `get_open_api_definition()` | long | **medium** | Could be a larger
JSON payload |
| `wait_for_finish()` | no_timeout | no_timeout | Already correct |
### BuildCollectionClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `list()` | long | **medium** | Paginated list |
### RunClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `get()` | long | **short** | Simple metadata |
| `update()` | long | **short** | Simple metadata |
| `delete()` | long | **short** | Simple delete |
| `abort()` | long | **short** | Sends abort signal |
| `wait_for_finish()` | no_timeout | no_timeout | Already correct |
| `metamorph()` | long | **medium** | Triggers transformation |
| `resurrect()` | long | **medium** | Restarts a run |
| `reboot()` | long | **medium** | Reboots a run |
| `get_streamed_log()` | long | **long** | Streaming, keep long |
| `charge()` | long | **short** | Quick API call |
| `get_status_message_watcher()` | long | **long** | Long-lived watcher
|
### RunCollectionClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `list()` | long | **medium** | Paginated list |
### TaskClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `get()` | long | **short** | Simple metadata |
| `update()` | long | **short** | Simple metadata |
| `delete()` | long | **short** | Simple delete |
| `start()` | long | **medium** | Triggers a run |
| `call()` | long | **no_timeout** | Starts and waits for completion |
| `get_input()` | long | **short** | Simple metadata |
| `update_input()` | long | **short** | Simple metadata update |
| `last_run()` | long | **short** | Simple metadata |
### TaskCollectionClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `list()` | long | **medium** | Paginated list |
| `create()` | long | **medium** | Creates resource |
### ScheduleClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `get()` | long | **short** | Simple metadata |
| `update()` | long | **short** | Simple metadata |
| `delete()` | long | **short** | Simple delete |
| `get_log()` | long | **medium** | Returns list of schedule invocations
|
### ScheduleCollectionClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `list()` | long | **medium** | Paginated list |
| `create()` | long | **short** | Simple create |
### WebhookClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `get()` | long | **short** | Simple metadata |
| `update()` | long | **short** | Simple metadata |
| `delete()` | long | **short** | Simple delete |
| `test()` | long | **medium** | Triggers test dispatch |
### WebhookCollectionClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `list()` | long | **medium** | Paginated list |
| `create()` | long | **short** | Simple create |
### WebhookDispatchClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `get()` | long | **short** | Simple metadata |
### WebhookDispatchCollectionClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `list()` | long | **medium** | Paginated list |
### StoreCollectionClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `list()` | long | **medium** | Paginated list |
### LogClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `get()` | long | **long** | This is not metadata call. Logs can be
large — keep as is |
| `get_as_bytes()` | long | **long** | Same |
| `stream()` | long | **long** | Streaming — long is reasonable |
### UserClient
| Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `get()` | long | **short** | Simple metadata |
| `monthly_usage()` | long | **short** | Simple metadata |
| `limits()` | long | **short** | Simple metadata |
| `update_limits()` | long | **short** | Simple metadata update |
### Storage Collection Clients (currently all `long`)
| Client.Method | Current | Recommended | Rationale |
|--------|---------|-------------|-----------|
| `DatasetCollectionClient.list()` | long | **medium** | Paginated list
|
| `DatasetCollectionClient.get_or_create()` | long | **short** | Quick
idempotent op |
| `KeyValueStoreCollectionClient.list()` | long | **medium** | Paginated
list |
| `KeyValueStoreCollectionClient.get_or_create()` | long | **short** |
Quick idempotent op |
| `RequestQueueCollectionClient.list()` | long | **medium** | Paginated
list |
| `RequestQueueCollectionClient.get_or_create()` | long | **short** |
Quick idempotent op |
## Summary of Changes
- **~60 methods** `long` → `short` (simple CRUD on non-storage
resources)
- **~20 methods** `long` → `medium` (list operations, creates, trigger
operations)
- **2 methods** `long` → `no_timeout` (`actor.call()`, `task.call()`)
- **~10 methods** stay `long` (log operations, streaming, data-heavy
ops)
- **Storage clients** (dataset, kvs, request_queue) already well-tiered
— only their collection clients need updates
## Test plan
- [x] CI passes
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>1 parent b0b2dac commit 0b35bbe
File tree
23 files changed
+136
-136
lines changed- src/apify_client/_resource_clients
23 files changed
+136
-136
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
85 | 85 | | |
86 | 86 | | |
87 | 87 | | |
88 | | - | |
| 88 | + | |
89 | 89 | | |
90 | 90 | | |
91 | 91 | | |
| |||
129 | 129 | | |
130 | 130 | | |
131 | 131 | | |
132 | | - | |
| 132 | + | |
133 | 133 | | |
134 | 134 | | |
135 | 135 | | |
| |||
209 | 209 | | |
210 | 210 | | |
211 | 211 | | |
212 | | - | |
| 212 | + | |
213 | 213 | | |
214 | 214 | | |
215 | 215 | | |
| |||
233 | 233 | | |
234 | 234 | | |
235 | 235 | | |
236 | | - | |
| 236 | + | |
237 | 237 | | |
238 | 238 | | |
239 | 239 | | |
| |||
310 | 310 | | |
311 | 311 | | |
312 | 312 | | |
313 | | - | |
| 313 | + | |
314 | 314 | | |
315 | 315 | | |
316 | 316 | | |
| |||
386 | 386 | | |
387 | 387 | | |
388 | 388 | | |
389 | | - | |
| 389 | + | |
390 | 390 | | |
391 | 391 | | |
392 | 392 | | |
| |||
444 | 444 | | |
445 | 445 | | |
446 | 446 | | |
447 | | - | |
| 447 | + | |
448 | 448 | | |
449 | 449 | | |
450 | 450 | | |
| |||
533 | 533 | | |
534 | 534 | | |
535 | 535 | | |
536 | | - | |
| 536 | + | |
537 | 537 | | |
538 | 538 | | |
539 | 539 | | |
| |||
581 | 581 | | |
582 | 582 | | |
583 | 583 | | |
584 | | - | |
| 584 | + | |
585 | 585 | | |
586 | 586 | | |
587 | 587 | | |
| |||
625 | 625 | | |
626 | 626 | | |
627 | 627 | | |
628 | | - | |
| 628 | + | |
629 | 629 | | |
630 | 630 | | |
631 | 631 | | |
| |||
705 | 705 | | |
706 | 706 | | |
707 | 707 | | |
708 | | - | |
| 708 | + | |
709 | 709 | | |
710 | 710 | | |
711 | 711 | | |
| |||
729 | 729 | | |
730 | 730 | | |
731 | 731 | | |
732 | | - | |
| 732 | + | |
733 | 733 | | |
734 | 734 | | |
735 | 735 | | |
| |||
806 | 806 | | |
807 | 807 | | |
808 | 808 | | |
809 | | - | |
| 809 | + | |
810 | 810 | | |
811 | 811 | | |
812 | 812 | | |
| |||
886 | 886 | | |
887 | 887 | | |
888 | 888 | | |
889 | | - | |
| 889 | + | |
890 | 890 | | |
891 | 891 | | |
892 | 892 | | |
| |||
944 | 944 | | |
945 | 945 | | |
946 | 946 | | |
947 | | - | |
| 947 | + | |
948 | 948 | | |
949 | 949 | | |
950 | 950 | | |
| |||
1033 | 1033 | | |
1034 | 1034 | | |
1035 | 1035 | | |
1036 | | - | |
| 1036 | + | |
1037 | 1037 | | |
1038 | 1038 | | |
1039 | 1039 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
52 | | - | |
| 52 | + | |
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
| |||
94 | 94 | | |
95 | 95 | | |
96 | 96 | | |
97 | | - | |
| 97 | + | |
98 | 98 | | |
99 | 99 | | |
100 | 100 | | |
| |||
194 | 194 | | |
195 | 195 | | |
196 | 196 | | |
197 | | - | |
| 197 | + | |
198 | 198 | | |
199 | 199 | | |
200 | 200 | | |
| |||
239 | 239 | | |
240 | 240 | | |
241 | 241 | | |
242 | | - | |
| 242 | + | |
243 | 243 | | |
244 | 244 | | |
245 | 245 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
34 | | - | |
| 34 | + | |
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
| |||
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
56 | | - | |
| 56 | + | |
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
| |||
74 | 74 | | |
75 | 75 | | |
76 | 76 | | |
77 | | - | |
| 77 | + | |
78 | 78 | | |
79 | 79 | | |
80 | 80 | | |
| |||
106 | 106 | | |
107 | 107 | | |
108 | 108 | | |
109 | | - | |
| 109 | + | |
110 | 110 | | |
111 | 111 | | |
112 | 112 | | |
| |||
128 | 128 | | |
129 | 129 | | |
130 | 130 | | |
131 | | - | |
| 131 | + | |
132 | 132 | | |
133 | 133 | | |
134 | 134 | | |
| |||
149 | 149 | | |
150 | 150 | | |
151 | 151 | | |
152 | | - | |
| 152 | + | |
153 | 153 | | |
154 | 154 | | |
155 | 155 | | |
| |||
Lines changed: 4 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
| 32 | + | |
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| |||
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
52 | | - | |
| 52 | + | |
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
| |||
90 | 90 | | |
91 | 91 | | |
92 | 92 | | |
93 | | - | |
| 93 | + | |
94 | 94 | | |
95 | 95 | | |
96 | 96 | | |
| |||
110 | 110 | | |
111 | 111 | | |
112 | 112 | | |
113 | | - | |
| 113 | + | |
114 | 114 | | |
115 | 115 | | |
116 | 116 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
52 | | - | |
| 52 | + | |
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
| |||
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
79 | | - | |
| 79 | + | |
80 | 80 | | |
81 | 81 | | |
82 | 82 | | |
| |||
115 | 115 | | |
116 | 116 | | |
117 | 117 | | |
118 | | - | |
| 118 | + | |
119 | 119 | | |
120 | 120 | | |
121 | 121 | | |
| |||
165 | 165 | | |
166 | 166 | | |
167 | 167 | | |
168 | | - | |
| 168 | + | |
169 | 169 | | |
170 | 170 | | |
171 | 171 | | |
| |||
192 | 192 | | |
193 | 193 | | |
194 | 194 | | |
195 | | - | |
| 195 | + | |
196 | 196 | | |
197 | 197 | | |
198 | 198 | | |
| |||
231 | 231 | | |
232 | 232 | | |
233 | 233 | | |
234 | | - | |
| 234 | + | |
235 | 235 | | |
236 | 236 | | |
237 | 237 | | |
| |||
Lines changed: 4 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
47 | | - | |
| 47 | + | |
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
| |||
70 | 70 | | |
71 | 71 | | |
72 | 72 | | |
73 | | - | |
| 73 | + | |
74 | 74 | | |
75 | 75 | | |
76 | 76 | | |
| |||
131 | 131 | | |
132 | 132 | | |
133 | 133 | | |
134 | | - | |
| 134 | + | |
135 | 135 | | |
136 | 136 | | |
137 | 137 | | |
| |||
157 | 157 | | |
158 | 158 | | |
159 | 159 | | |
160 | | - | |
| 160 | + | |
161 | 161 | | |
162 | 162 | | |
163 | 163 | | |
| |||
0 commit comments