Commit 8f9f55d
authored
Migrate to Python 3.10+ Type Syntax (#548)
# Migrate to Python 3.10+ Type Syntax
## Summary
This PR modernizes the Pinecone Python SDK's type annotations by
migrating from legacy `typing` module syntax to Python 3.10+ built-in
type syntax. All `Union[X, Y]` usages are replaced with `X | Y`, all
`Optional[X]` usages are replaced with `X | None`, and deprecated typing
aliases (`Dict`, `Tuple`) are replaced with built-in types (`dict`,
`tuple`).
## Problem
The SDK was using legacy type annotation syntax that has been superseded
by cleaner, more readable Python 3.10+ syntax:
- `Union[X, Y]` is verbose and less readable than `X | Y`
- `Optional[X]` is redundant when `X | None` is more explicit
- `Dict` and `Tuple` from `typing` are deprecated in favor of built-in
`dict` and `tuple` (PEP 585)
Since the SDK already requires Python 3.10+, we can take advantage of
these modern syntax improvements.
## Solution
Migrated all type annotations throughout the codebase to use Python
3.10+ syntax:
- Replaced `Union[X, Y]` with `X | Y` syntax
- Replaced `Optional[X]` with `X | None` syntax
- Replaced `Dict` with `dict` and `Tuple` with `tuple` in non-generated
code
- Added `from __future__ import annotations` where needed for forward
references
- Used `List` from `typing` only where necessary to avoid conflicts with
methods named `list`
## User-Facing Impact
### Benefits
- **Cleaner, More Readable Code**: Modern type syntax is more concise
and easier to read
- **Better IDE Support**: IDEs better understand the modern syntax and
provide improved autocomplete
- **Future-Proof**: Aligns with Python's direction and best practices
for Python 3.10+
- **No Breaking Changes**: All changes are purely syntactic - runtime
behavior is unchanged
### Breaking Changes
**None** - This is a purely syntactic change. All existing code
continues to work without modification.
### Migration Guide
No migration required for users. The changes are internal to the SDK and
transparent to users.
## Example Usage
The changes are internal, but here's how the improved type annotations
look:
### Before
```python
from typing import Union, Optional, Dict, List
def search(
query: Union[str, Dict[str, Any]],
top_k: int,
filter: Optional[Dict[str, Any]] = None,
namespace: Optional[str] = None
) -> Dict[str, List[ScoredVector]]:
...
```
### After
```python
from typing import List # Only needed where 'list' method conflicts
def search(
query: str | dict[str, Any],
top_k: int,
filter: dict[str, Any] | None = None,
namespace: str | None = None
) -> dict[str, List[ScoredVector]]:
...
```
## Technical Details
### Type Alias Handling
For type aliases that reference forward-declared types, we use
`TypeAlias` with proper `TYPE_CHECKING` guards to ensure mypy can
resolve types correctly while maintaining runtime compatibility.
### Naming Conflicts
In classes with methods named `list`, we continue to use `List` from
`typing` to avoid shadowing the built-in type. This affects:
- `ApiKeyResource.list()` method
- `IndexAsyncioInterface.list()` method
- `_IndexAsyncio.list()` method
- `GRPCIndex.list()` method
### Generated Code
Generated files in `pinecone/core/` are not modified, as they are
automatically generated from OpenAPI specifications. These will be
updated when the code generation templates are updated in a future PR.
## Testing
- All existing tests pass (414 unit tests, 4 skipped)
- Mypy type checking passes with no errors (353 source files checked)
- All files compile successfully
## Compatibility
- **Python Version**: Requires Python 3.10+ (already a requirement)
- **Backward Compatibility**: Fully backward compatible - no API changes
- **Type Checkers**: Compatible with mypy, pyright, and other modern
type checkers1 parent 324c963 commit 8f9f55d
File tree
109 files changed
+1505
-1580
lines changed- pinecone
- admin
- resources
- config
- db_control
- models
- resources
- asyncio
- sync
- types
- db_data
- dataclasses
- resources
- asyncio
- sync
- types
- grpc
- resources
- inference
- models
- resources
- asyncio
- sync
- openapi_support
- utils
- tests
- integration
- grpc/db/data
- helpers
- rest_asyncio/db/data
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
109 files changed
+1505
-1580
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
7 | 6 | | |
8 | 7 | | |
9 | 8 | | |
| |||
34 | 33 | | |
35 | 34 | | |
36 | 35 | | |
37 | | - | |
| 36 | + | |
38 | 37 | | |
39 | 38 | | |
40 | 39 | | |
41 | 40 | | |
42 | | - | |
43 | | - | |
44 | | - | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
45 | 44 | | |
46 | 45 | | |
47 | 46 | | |
| |||
58 | 57 | | |
59 | 58 | | |
60 | 59 | | |
61 | | - | |
| 60 | + | |
62 | 61 | | |
63 | 62 | | |
64 | 63 | | |
| |||
112 | 111 | | |
113 | 112 | | |
114 | 113 | | |
115 | | - | |
| 114 | + | |
116 | 115 | | |
117 | 116 | | |
118 | 117 | | |
| |||
121 | 120 | | |
122 | 121 | | |
123 | 122 | | |
124 | | - | |
125 | | - | |
126 | | - | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
127 | 126 | | |
128 | 127 | | |
129 | 128 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
| 2 | + | |
| 3 | + | |
2 | 4 | | |
3 | 5 | | |
4 | 6 | | |
| |||
151 | 153 | | |
152 | 154 | | |
153 | 155 | | |
154 | | - | |
155 | | - | |
| 156 | + | |
| 157 | + | |
156 | 158 | | |
157 | 159 | | |
158 | 160 | | |
| |||
169 | 171 | | |
170 | 172 | | |
171 | 173 | | |
172 | | - | |
| 174 | + | |
173 | 175 | | |
174 | 176 | | |
175 | 177 | | |
| |||
210 | 212 | | |
211 | 213 | | |
212 | 214 | | |
213 | | - | |
214 | | - | |
215 | | - | |
| 215 | + | |
216 | 216 | | |
217 | 217 | | |
218 | 218 | | |
| |||
226 | 226 | | |
227 | 227 | | |
228 | 228 | | |
229 | | - | |
| 229 | + | |
230 | 230 | | |
231 | 231 | | |
232 | 232 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | 1 | | |
3 | 2 | | |
4 | 3 | | |
| |||
155 | 154 | | |
156 | 155 | | |
157 | 156 | | |
158 | | - | |
| 157 | + | |
159 | 158 | | |
160 | 159 | | |
161 | 160 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | 1 | | |
3 | 2 | | |
4 | 3 | | |
| |||
79 | 78 | | |
80 | 79 | | |
81 | 80 | | |
82 | | - | |
| 81 | + | |
83 | 82 | | |
84 | 83 | | |
85 | 84 | | |
| |||
152 | 151 | | |
153 | 152 | | |
154 | 153 | | |
155 | | - | |
| 154 | + | |
156 | 155 | | |
157 | 156 | | |
158 | 157 | | |
| |||
179 | 178 | | |
180 | 179 | | |
181 | 180 | | |
182 | | - | |
| 181 | + | |
183 | 182 | | |
184 | 183 | | |
185 | 184 | | |
| |||
206 | 205 | | |
207 | 206 | | |
208 | 207 | | |
209 | | - | |
| 208 | + | |
210 | 209 | | |
211 | 210 | | |
212 | 211 | | |
| |||
272 | 271 | | |
273 | 272 | | |
274 | 273 | | |
275 | | - | |
276 | | - | |
277 | | - | |
278 | | - | |
| 274 | + | |
279 | 275 | | |
280 | 276 | | |
281 | 277 | | |
| |||
328 | 324 | | |
329 | 325 | | |
330 | 326 | | |
331 | | - | |
332 | | - | |
333 | | - | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
334 | 330 | | |
335 | 331 | | |
336 | 332 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
| 2 | + | |
| 3 | + | |
2 | 4 | | |
3 | 5 | | |
4 | 6 | | |
| |||
9 | 11 | | |
10 | 12 | | |
11 | 13 | | |
12 | | - | |
| 14 | + | |
13 | 15 | | |
14 | 16 | | |
15 | 17 | | |
| |||
22 | 24 | | |
23 | 25 | | |
24 | 26 | | |
25 | | - | |
26 | | - | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
31 | 33 | | |
32 | 34 | | |
33 | 35 | | |
| |||
49 | 51 | | |
50 | 52 | | |
51 | 53 | | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
58 | | - | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
59 | 61 | | |
60 | 62 | | |
61 | 63 | | |
| |||
83 | 85 | | |
84 | 86 | | |
85 | 87 | | |
86 | | - | |
| 88 | + | |
87 | 89 | | |
88 | 90 | | |
89 | 91 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
3 | 2 | | |
4 | 3 | | |
5 | 4 | | |
| |||
14 | 13 | | |
15 | 14 | | |
16 | 15 | | |
17 | | - | |
| 16 | + | |
18 | 17 | | |
19 | 18 | | |
20 | 19 | | |
| |||
56 | 55 | | |
57 | 56 | | |
58 | 57 | | |
59 | | - | |
| 58 | + | |
60 | 59 | | |
61 | 60 | | |
62 | 61 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
| 6 | + | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| |||
297 | 297 | | |
298 | 298 | | |
299 | 299 | | |
300 | | - | |
| 300 | + | |
301 | 301 | | |
302 | 302 | | |
303 | 303 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | 1 | | |
3 | 2 | | |
4 | 3 | | |
| |||
13 | 12 | | |
14 | 13 | | |
15 | 14 | | |
16 | | - | |
17 | | - | |
18 | | - | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
19 | 18 | | |
20 | 19 | | |
21 | 20 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
1 | 3 | | |
2 | | - | |
| 4 | + | |
3 | 5 | | |
4 | 6 | | |
5 | 7 | | |
| |||
42 | 44 | | |
43 | 45 | | |
44 | 46 | | |
45 | | - | |
| 47 | + | |
46 | 48 | | |
47 | 49 | | |
48 | | - | |
| 50 | + | |
49 | 51 | | |
50 | 52 | | |
51 | | - | |
| 53 | + | |
52 | 54 | | |
53 | 55 | | |
54 | | - | |
| 56 | + | |
55 | 57 | | |
56 | 58 | | |
57 | 59 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
1 | 3 | | |
2 | | - | |
| 4 | + | |
3 | 5 | | |
4 | 6 | | |
5 | 7 | | |
| |||
36 | 38 | | |
37 | 39 | | |
38 | 40 | | |
39 | | - | |
| 41 | + | |
40 | 42 | | |
41 | 43 | | |
42 | | - | |
| 44 | + | |
43 | 45 | | |
44 | 46 | | |
45 | | - | |
| 47 | + | |
46 | 48 | | |
47 | 49 | | |
48 | | - | |
| 50 | + | |
49 | 51 | | |
50 | 52 | | |
51 | 53 | | |
| |||
0 commit comments