Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pydantic v2 inheritance from TypedDict is flagged as error, even though it's valid Python #4584

Closed
prrao87 opened this issue Jul 7, 2023 · 4 comments
Assignees

Comments

@prrao87
Copy link

prrao87 commented Jul 7, 2023

  • Language Server version: 2023.7.10
  • OS and version: MacOS Ventura 13.4.1
  • Python version (& distribution if applicable, e.g. Anaconda): CPython (Darwin) 3.11.2

Code Snippet

# pip install pydantic
from pydantic import TypeAdapter, field_validator
from typing_extensions import TypedDict


class Item(TypedDict):
    id: int
    price: float
    description: str | None

    @field_validator("price", mode="before")
    def check_non_zero(cls, v):
        if v <= 0:
            raise ValueError("price cannot be zero")
        else:
            return v


if __name__ == "__main__":
    ItemsTypeAdapter = TypeAdapter(list[Item])
    sample_data = [
        {"id": 1, "price": 10.0, "description": "A nice item"},
        {"id": 2, "price": 20.0, "description": "Another nice item"},
        {"id": 3, "price": 0.0, "description": "A bad item"},
    ]
    try:
        items = ItemsTypeAdapter.validate_python(sample_data)
        from pprint import pprint
        pprint(items, sort_dicts=False)
    except ValueError as e:
        print(e)

Repro steps

  1. Install Pydantic v2 to reproduce:
pip install pydantic~=2.0.0
  1. Run the code snippet above

Expected behavior

There shouldn't be any errors shown by Pylance when writing this code in VS Code. If the above code snippet is run, it produces the exact correct behavior (it's perfectly valid Python, there are no syntax errors, and the code works as intended).

Background:

Pydantic has added support for directly inheriting from Python's TypedDict instead of inheriting from its own BaseModel. Using TypedDict is very useful for performance when we need to just validate dicts, avoiding unnecessary serialization/deserialization performance overheads in Python.

Because Pydantic natively allows inheritance from TypedDict, it also allows defining methods in the resulting Pydantic object used downstream, such as the one shown in the field_validator example in the snippet above.

Actual behavior

Pylance highlights all code under the defined method as an error, even though it isn't an error from a Python perspective. The following error is produced:

Error: TypedDict classes can contain only type annotations

pylance_error_pydantic

Logs

2023-07-07 11:32:20.660 [info] [Info  - 11:32:20 AM] (6159) Pylance language server 2023.7.10 (pyright 74d8f3c4) starting
2023-07-07 11:32:20.660 [info] [Info  - 11:32:20 AM] (6159) Server root directory: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist
2023-07-07 11:32:20.663 [info] [Info  - 11:32:20 AM] (6159) Starting service instance "pydantic-v2-test-drive"
2023-07-07 11:32:20.690 [info] (6159) No configuration file found.
2023-07-07 11:32:20.690 [info] (6159) No pyproject.toml file found.
2023-07-07 11:32:20.690 [info] [Info  - 11:32:20 AM] (6159) Setting pythonPath for service "pydantic-v2-test-drive": "/Users/prrao/.pyenv/shims/python"
2023-07-07 11:32:20.692 [info] [Warn  - 11:32:20 AM] (6159) stubPath /Users/prrao/code/pydantic-v2-test-drive/typings is not a valid directory.
2023-07-07 11:32:20.759 [info] [Info  - 11:32:20 AM] (6159) Assuming Python version 3.11
2023-07-07 11:32:20.759 [info] (6159) Assuming Python platform Darwin
2023-07-07 11:32:20.919 [info] [Info  - 11:32:20 AM] (6159) Search paths for /Users/prrao/code/pydantic-v2-test-drive
2023-07-07 11:32:20.920 [info] [Info  - 11:32:20 AM] (6159)   /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib
2023-07-07 11:32:20.921 [info] [Info  - 11:32:20 AM] (6159)   /Users/prrao/code/pydantic-v2-test-drive
2023-07-07 11:32:20.926 [info] [Info  - 11:32:20 AM] (6159)   /Users/prrao/code/pydantic-v2-test-drive/typings
2023-07-07 11:32:20.926 [info] [Info  - 11:32:20 AM] (6159)   /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stubs/...
2023-07-07 11:32:20.926 [info] [Info  - 11:32:20 AM] (6159)   /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/bundled/stubs
2023-07-07 11:32:20.926 [info] [Info  - 11:32:20 AM] (6159)   /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11
2023-07-07 11:32:20.926 [info] [Info  - 11:32:20 AM] (6159)   /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/lib-dynload
2023-07-07 11:32:20.926 [info] [Info  - 11:32:20 AM] (6159)   /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages
2023-07-07 11:32:20.926 [info] [Info  - 11:32:20 AM] (6159) Adding fs watcher for library directories:
 /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11
/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/lib-dynload
/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages
2023-07-07 11:32:20.927 [info] [Info  - 11:32:20 AM] (6159) Adding fs watcher for directories:
 /Users/prrao/code/pydantic-v2-test-drive
2023-07-07 11:32:20.927 [info] (6159) Searching for source files
2023-07-07 11:32:20.927 [info] [Info  - 11:32:20 AM] (6159) Found 7 source files
2023-07-07 11:32:20.930 [info] [Info  - 11:32:20 AM] (6159) Background analysis(1) root directory: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist
2023-07-07 11:32:20.930 [info] [Info  - 11:32:20 AM] (6159) Background analysis(1) started
2023-07-07 11:32:20.930 [info] (6159) Background analysis message: setConfigOptions
2023-07-07 11:32:20.930 [info] (6159) Background analysis message: setImportResolver
2023-07-07 11:32:20.931 [info] (6159) Background analysis message: ensurePartialStubPackages
2023-07-07 11:32:20.941 [info] (6159) [FG] parsing: /Users/prrao/code/pydantic-v2-test-drive/v2/example.py (30ms)
2023-07-07 11:32:21.024 [info] (6159) [FG] parsing: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/builtins.pyi [fs read 4ms] (81ms)
2023-07-07 11:32:21.060 [info] (6159) [FG] binding: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/builtins.pyi (37ms)
2023-07-07 11:32:21.061 [info] (6159) [FG] binding: /Users/prrao/code/pydantic-v2-test-drive/v2/example.py (2ms)
2023-07-07 11:32:21.101 [info] (6159) Background analysis message: setConfigOptions
2023-07-07 11:32:21.102 [info] (6159) Background analysis message: setTrackedFiles
2023-07-07 11:32:21.108 [info] (6159) Background analysis message: markAllFilesDirty
2023-07-07 11:32:21.109 [info] (6159) Background analysis message: setFileOpened
2023-07-07 11:32:21.109 [info] (6159) Background analysis message: getSemanticTokens full
2023-07-07 11:32:21.137 [info] (6159) [BG(1)] getSemanticTokens full at /Users/prrao/code/pydantic-v2-test-drive/v2/example.py ...
2023-07-07 11:32:21.137 [info] (6159) [BG(1)]   parsing: /Users/prrao/code/pydantic-v2-test-drive/v2/example.py (28ms)
2023-07-07 11:32:21.179 [info] (6159) [BG(1)]   parsing: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/builtins.pyi [fs read 1ms] (42ms)
2023-07-07 11:32:21.201 [info] (6159) [BG(1)]   binding: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/builtins.pyi (18ms)
2023-07-07 11:32:21.202 [info] (6159) [BG(1)]   binding: /Users/prrao/code/pydantic-v2-test-drive/v2/example.py (1ms)
2023-07-07 11:32:21.217 [info] (6159) [BG(1)]   parsing: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/typing.pyi [fs read 1ms] (9ms)
2023-07-07 11:32:21.226 [info] (6159) [BG(1)]   binding: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/typing.pyi (10ms)
2023-07-07 11:32:21.230 [info] (6159) [BG(1)]   parsing: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/typing_extensions.pyi [fs read 1ms] (3ms)
2023-07-07 11:32:21.231 [info] (6159) [BG(1)]   binding: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/typing_extensions.pyi (1ms)
2023-07-07 11:32:21.234 [info] [Info  - 11:32:21 AM] (6159) Indexer background runner(2) root directory: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist (index)
2023-07-07 11:32:21.234 [info] [Info  - 11:32:21 AM] (6159) Indexing(2) started
2023-07-07 11:32:21.245 [info] (6159) [BG(1)]   parsing: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/_typeshed/__init__.pyi [fs read 1ms] (4ms)
2023-07-07 11:32:21.246 [info] (6159) [BG(1)]   binding: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/_typeshed/__init__.pyi (2ms)
2023-07-07 11:32:21.251 [info] (6159) [BG(1)]   parsing: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/types.pyi [fs read 0ms] (4ms)
2023-07-07 11:32:21.253 [info] (6159) [BG(1)]   binding: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/types.pyi (2ms)
2023-07-07 11:32:21.258 [info] (6159) [BG(1)]   parsing: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/abc.pyi [fs read 1ms] (1ms)
2023-07-07 11:32:21.259 [info] (6159) [BG(1)]   binding: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/abc.pyi (0ms)
2023-07-07 11:32:21.265 [info] (6159) [BG(1)]   parsing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/__init__.py [fs read 0ms] (6ms)
2023-07-07 11:32:21.268 [info] (6159) [BG(1)]   binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/__init__.py ...
2023-07-07 11:32:21.268 [info] (6159) [BG(1)]     parsing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/deprecated/tools.py [fs read 0ms] (1ms)
2023-07-07 11:32:21.268 [info] (6159) [BG(1)]     binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/deprecated/tools.py (0ms)
2023-07-07 11:32:21.270 [info] (6159) [BG(1)]     parsing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/errors.py [fs read 0ms] (2ms)
2023-07-07 11:32:21.271 [info] (6159) [BG(1)]     binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/errors.py (1ms)
2023-07-07 11:32:21.286 [info] (6159) [BG(1)]     parsing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/main.py [fs read 0ms] (15ms)
2023-07-07 11:32:21.290 [info] (6159) [BG(1)]     binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/main.py (4ms)
2023-07-07 11:32:21.296 [info] (6159) [BG(1)]     parsing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/networks.py [fs read 0ms] (6ms)
2023-07-07 11:32:21.297 [info] [Info  - 11:32:21 AM] (6159) Could not import 'email_validator' in file '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/networks.py'
2023-07-07 11:32:21.297 [info] [Info  - 11:32:21 AM] (6159)   Looking in stubPath '/Users/prrao/code/pydantic-v2-test-drive/typings'
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve stub package using root path '/Users/prrao/code/pydantic-v2-test-drive/typings'
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve using root path '/Users/prrao/code/pydantic-v2-test-drive/typings'
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)   Looking in root directory of execution environment '/Users/prrao/code/pydantic-v2-test-drive'
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve stub package using root path '/Users/prrao/code/pydantic-v2-test-drive'
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve using root path '/Users/prrao/code/pydantic-v2-test-drive'
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)   Finding python search paths
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)   Executing interpreter: '/Users/prrao/.pyenv/shims/python'
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)   Skipping '/Users/prrao/.pyenv/versions/3.11.2/lib/python311.zip' because it is not a valid directory
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)   Received 3 paths from interpreter
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)     /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)     /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/lib-dynload
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)     /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)   Looking in python search path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11'
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve stub package using root path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11'
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve using root path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11'
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)   Looking in python search path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/lib-dynload'
2023-07-07 11:32:21.298 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve stub package using root path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/lib-dynload'
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve using root path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/lib-dynload'
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Looking in python search path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages'
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve stub package using root path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages'
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve using root path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages'
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Looking in bundled stubs path '/Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/bundled/stubs'
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve stub package using root path '/Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/bundled/stubs'
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve using root path '/Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/bundled/stubs'
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Looking for typeshed stdlib path
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Looking for typeshed stdlib path
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve using root path '/Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib'
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Typeshed path not found
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Looking for typeshed third-party path
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Looking for typeshed stubs path
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Typeshed path not found
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159) Could not import 'email_validator' in file '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/networks.py'
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Looking in stubPath '/Users/prrao/code/pydantic-v2-test-drive/typings'
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve stub package using root path '/Users/prrao/code/pydantic-v2-test-drive/typings'
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve using root path '/Users/prrao/code/pydantic-v2-test-drive/typings'
2023-07-07 11:32:21.299 [info] [Info  - 11:32:21 AM] (6159)   Looking in root directory of execution environment '/Users/prrao/code/pydantic-v2-test-drive'
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve stub package using root path '/Users/prrao/code/pydantic-v2-test-drive'
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve using root path '/Users/prrao/code/pydantic-v2-test-drive'
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Finding python search paths
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Executing interpreter: '/Users/prrao/.pyenv/shims/python'
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Skipping '/Users/prrao/.pyenv/versions/3.11.2/lib/python311.zip' because it is not a valid directory
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Received 3 paths from interpreter
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)     /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)     /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/lib-dynload
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)     /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Looking in python search path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11'
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve stub package using root path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11'
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve using root path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11'
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Looking in python search path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/lib-dynload'
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve stub package using root path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/lib-dynload'
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve using root path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/lib-dynload'
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Looking in python search path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages'
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve stub package using root path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages'
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve using root path '/Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages'
2023-07-07 11:32:21.300 [info] [Info  - 11:32:21 AM] (6159)   Looking in bundled stubs path '/Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/bundled/stubs'
2023-07-07 11:32:21.301 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve stub package using root path '/Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/bundled/stubs'
2023-07-07 11:32:21.301 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve using root path '/Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/bundled/stubs'
2023-07-07 11:32:21.301 [info] [Info  - 11:32:21 AM] (6159)   Looking for typeshed stdlib path
2023-07-07 11:32:21.301 [info] [Info  - 11:32:21 AM] (6159)   Looking for typeshed stdlib path
2023-07-07 11:32:21.301 [info] [Info  - 11:32:21 AM] (6159)   Attempting to resolve using root path '/Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib'
2023-07-07 11:32:21.301 [info] [Info  - 11:32:21 AM] (6159)   Typeshed path not found
2023-07-07 11:32:21.301 [info] [Info  - 11:32:21 AM] (6159)   Looking for typeshed third-party path
2023-07-07 11:32:21.301 [info] [Info  - 11:32:21 AM] (6159)   Looking for typeshed stubs path
2023-07-07 11:32:21.301 [info] [Info  - 11:32:21 AM] (6159)   Typeshed path not found
2023-07-07 11:32:21.301 [info] (6159) [BG(1)]     binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/networks.py (1ms)
2023-07-07 11:32:21.312 [info] (6159) [BG(1)]     parsing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/types.py [fs read 0ms] (13ms)
2023-07-07 11:32:21.317 [info] (6159) [BG(1)]     binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/types.py (5ms)
2023-07-07 11:32:21.318 [info] (6159) [BG(1)]     parsing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/warnings.py [fs read 0ms] (1ms)
2023-07-07 11:32:21.319 [info] (6159) [BG(1)]     binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/warnings.py (0ms)
2023-07-07 11:32:21.328 [info] (6159) [BG(1)]   binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/__init__.py (54ms)
2023-07-07 11:32:21.328 [info] (6159) [BG(1)]   parsing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/type_adapter.py [fs read 0ms] (4ms)
2023-07-07 11:32:21.335 [info] (6159) [BG(1)]   binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/type_adapter.py (2ms)
2023-07-07 11:32:21.335 [info] (6159) [BG(1)]   parsing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/functional_validators.py [fs read 1ms] (6ms)
2023-07-07 11:32:21.341 [info] (6159) [IDX(2)] scan packages /Users/prrao/code/pydantic-v2-test-drive ...
2023-07-07 11:32:21.341 [info] (6159) [IDX(2)]   read stdlib indices (99ms)
2023-07-07 11:32:21.341 [info] (6159) [BG(1)]   binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/functional_validators.py (6ms)
2023-07-07 11:32:21.341 [info] [Info  - 11:32:21 AM] (6159) SourceFile: Received fs event 'change' for path '/Users/prrao/code/pydantic-v2-test-drive/.git/FETCH_HEAD'
2023-07-07 11:32:21.345 [info] (6159) [BG(1)]   parsing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic_core/__init__.py [fs read 0ms] (1ms)
2023-07-07 11:32:21.346 [info] (6159) [BG(1)]   binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic_core/__init__.py (0ms)
2023-07-07 11:32:21.363 [info] (6159) [BG(1)]   parsing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic_core/core_schema.py [fs read 1ms] (18ms)
2023-07-07 11:32:21.380 [info] (6159) [BG(1)]   binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic_core/core_schema.py (14ms)
2023-07-07 11:32:21.385 [info] (6159) [BG(1)]   parsing: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/functools.pyi [fs read 0ms] (2ms)
2023-07-07 11:32:21.385 [info] (6159) [BG(1)]   binding: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/functools.pyi (1ms)
2023-07-07 11:32:21.405 [info] (6159) [BG(1)]   parsing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/config.py [fs read 0ms] (1ms)
2023-07-07 11:32:21.406 [info] (6159) [BG(1)]   binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pydantic/config.py (1ms)
2023-07-07 11:32:21.413 [info] (6159) [BG(1)]   parsing: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/pprint.pyi [fs read 0ms] (1ms)
2023-07-07 11:32:21.413 [info] (6159) [BG(1)]   binding: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/pprint.pyi (0ms)
2023-07-07 11:32:21.417 [info] (6159) [BG(1)] getSemanticTokens full at /Users/prrao/code/pydantic-v2-test-drive/v2/example.py (307ms)
2023-07-07 11:32:21.419 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:32:21.419 [info] (6159) Background analysis message: getSemanticTokens range
2023-07-07 11:32:21.422 [info] (6159) [BG(1)] getSemanticTokens range 0:0 - 31:0 at /Users/prrao/code/pydantic-v2-test-drive/v2/example.py (4ms)
2023-07-07 11:32:21.426 [info] (6159) Background analysis message: analyze
2023-07-07 11:32:21.455 [info] (6159) [BG(1)] analyzing: /Users/prrao/code/pydantic-v2-test-drive/v2/example.py ...
2023-07-07 11:32:21.455 [info] (6159) [BG(1)]   checking: /Users/prrao/code/pydantic-v2-test-drive/v2/example.py ...
2023-07-07 11:32:21.455 [info] (6159) [BG(1)]     parsing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/typing_extensions.py [fs read 0ms] (20ms)
2023-07-07 11:32:21.470 [info] (6159) [BG(1)]     binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/typing_extensions.py (15ms)
2023-07-07 11:32:21.492 [info] (6159) [BG(1)]     parsing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/pprint.py [fs read 1ms] (6ms)
2023-07-07 11:32:21.496 [info] (6159) [BG(1)]     binding: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/pprint.py (3ms)
2023-07-07 11:32:21.504 [info] (6159) [BG(1)]   checking: /Users/prrao/code/pydantic-v2-test-drive/v2/example.py (75ms)
2023-07-07 11:32:21.507 [info] (6159) [BG(1)] analyzing: /Users/prrao/code/pydantic-v2-test-drive/v2/example.py (76ms)
2023-07-07 11:32:21.508 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:32:21.513 [info] (6159) Background analysis message: resumeAnalysis
2023-07-07 11:32:21.513 [info] (6159) [BG(1)] indexing: /Users/prrao/code/pydantic-v2-test-drive/v1/schemas.py ...
2023-07-07 11:32:21.514 [info] (6159) [BG(1)]   parsing: /Users/prrao/code/pydantic-v2-test-drive/v1/schemas.py [fs read 1ms] (2ms)
2023-07-07 11:32:21.514 [info] (6159) [BG(1)]   binding: /Users/prrao/code/pydantic-v2-test-drive/v1/schemas.py (1ms)
2023-07-07 11:32:21.515 [info] (6159) [BG(1)] indexing: /Users/prrao/code/pydantic-v2-test-drive/v1/schemas.py [found 3] (5ms)
2023-07-07 11:32:21.515 [info] (6159) Indexing Done: /Users/prrao/code/pydantic-v2-test-drive/v1/schemas.py
2023-07-07 11:32:21.522 [info] (6159) [BG(1)] indexing: /Users/prrao/code/pydantic-v2-test-drive/v1/validator.py ...
2023-07-07 11:32:21.523 [info] (6159) [BG(1)]   parsing: /Users/prrao/code/pydantic-v2-test-drive/v1/validator.py [fs read 0ms] (6ms)
2023-07-07 11:32:21.524 [info] (6159) [BG(1)]   binding: /Users/prrao/code/pydantic-v2-test-drive/v1/validator.py (1ms)
2023-07-07 11:32:21.527 [info] (6159) [BG(1)] indexing: /Users/prrao/code/pydantic-v2-test-drive/v1/validator.py [found 10] (9ms)
2023-07-07 11:32:21.529 [info] (6159) Indexing Done: /Users/prrao/code/pydantic-v2-test-drive/v1/validator.py
2023-07-07 11:32:21.529 [info] (6159) [BG(1)] indexing: /Users/prrao/code/pydantic-v2-test-drive/v2/example.py [found 5] (0ms)
2023-07-07 11:32:21.529 [info] (6159) Indexing Done: /Users/prrao/code/pydantic-v2-test-drive/v2/example.py
2023-07-07 11:32:21.529 [info] (6159) [BG(1)] indexing: /Users/prrao/code/pydantic-v2-test-drive/v2/schemas.py ...
2023-07-07 11:32:21.529 [info] (6159) [BG(1)]   parsing: /Users/prrao/code/pydantic-v2-test-drive/v2/schemas.py [fs read 0ms] (0ms)
2023-07-07 11:32:21.530 [info] (6159) [BG(1)]   binding: /Users/prrao/code/pydantic-v2-test-drive/v2/schemas.py (1ms)
2023-07-07 11:32:21.530 [info] (6159) [BG(1)] indexing: /Users/prrao/code/pydantic-v2-test-drive/v2/schemas.py [found 3] (1ms)
2023-07-07 11:32:21.530 [info] (6159) Indexing Done: /Users/prrao/code/pydantic-v2-test-drive/v2/schemas.py
2023-07-07 11:32:21.530 [info] (6159) [BG(1)] indexing: /Users/prrao/code/pydantic-v2-test-drive/v2/schemas_optimized.py ...
2023-07-07 11:32:21.530 [info] (6159) [BG(1)]   parsing: /Users/prrao/code/pydantic-v2-test-drive/v2/schemas_optimized.py [fs read 0ms] (1ms)
2023-07-07 11:32:21.530 [info] (6159) [BG(1)]   binding: /Users/prrao/code/pydantic-v2-test-drive/v2/schemas_optimized.py (0ms)
2023-07-07 11:32:21.530 [info] (6159) [BG(1)] indexing: /Users/prrao/code/pydantic-v2-test-drive/v2/schemas_optimized.py [found 6] (1ms)
2023-07-07 11:32:21.530 [info] (6159) Indexing Done: /Users/prrao/code/pydantic-v2-test-drive/v2/schemas_optimized.py
2023-07-07 11:32:21.530 [info] (6159) [BG(1)] indexing: /Users/prrao/code/pydantic-v2-test-drive/v2/validator.py ...
2023-07-07 11:32:21.530 [info] (6159) [BG(1)]   parsing: /Users/prrao/code/pydantic-v2-test-drive/v2/validator.py [fs read 0ms] (0ms)
2023-07-07 11:32:21.530 [info] (6159) [BG(1)]   binding: /Users/prrao/code/pydantic-v2-test-drive/v2/validator.py (1ms)
2023-07-07 11:32:21.530 [info] (6159) [BG(1)] indexing: /Users/prrao/code/pydantic-v2-test-drive/v2/validator.py [found 10] (1ms)
2023-07-07 11:32:21.531 [info] (6159) Indexing Done: /Users/prrao/code/pydantic-v2-test-drive/v2/validator.py
2023-07-07 11:32:21.531 [info] (6159) [BG(1)] indexing: /Users/prrao/code/pydantic-v2-test-drive/v2/validator_optimized.py ...
2023-07-07 11:32:21.531 [info] (6159) [BG(1)]   parsing: /Users/prrao/code/pydantic-v2-test-drive/v2/validator_optimized.py [fs read 0ms] (1ms)
2023-07-07 11:32:21.531 [info] (6159) [BG(1)]   binding: /Users/prrao/code/pydantic-v2-test-drive/v2/validator_optimized.py (0ms)
2023-07-07 11:32:21.531 [info] (6159) [BG(1)] indexing: /Users/prrao/code/pydantic-v2-test-drive/v2/validator_optimized.py [found 9] (2ms)
2023-07-07 11:32:21.531 [info] (6159) Indexing Done: /Users/prrao/code/pydantic-v2-test-drive/v2/validator_optimized.py
2023-07-07 11:32:21.552 [info] (6159) [IDX(2)] scan packages /Users/prrao/code/pydantic-v2-test-drive (317ms)
2023-07-07 11:32:21.552 [info] [Info  - 11:32:21 AM] (6159) scanned(2) 33 files over 1 exec env
2023-07-07 11:32:21.577 [info] (6159) [IDX(2)] index packages /Users/prrao/code/pydantic-v2-test-drive ...
2023-07-07 11:32:21.577 [info] (6159) [IDX(2)]   index execution environment /Users/prrao/code/pydantic-v2-test-drive ...
2023-07-07 11:32:21.577 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/__phello__/__init__.py [skipped: no '__all__' defined] (1ms)
2023-07-07 11:32:21.577 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/concurrent/__init__.py [skipped: no '__all__' defined] (0ms)
2023-07-07 11:32:21.577 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/distutils/__init__.py [skipped: no '__all__' defined] (0ms)
2023-07-07 11:32:21.577 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/idlelib/__init__.py [skipped: no '__all__' defined] (0ms)
2023-07-07 11:32:21.577 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/lib2to3/__init__.py [skipped: no '__all__' defined] (0ms)
2023-07-07 11:32:21.578 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/pydoc_data/__init__.py [skipped: no '__all__' defined] (1ms)
2023-07-07 11:32:21.578 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/test/__init__.py [skipped: no '__all__' defined] (0ms)
2023-07-07 11:32:21.578 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/turtledemo/__init__.py [skipped: no '__all__' defined] (0ms)
2023-07-07 11:32:21.578 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/urllib/__init__.py [skipped: no '__all__' defined] (0ms)
2023-07-07 11:32:21.578 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/wsgiref/__init__.py [skipped: no '__all__' defined] (0ms)
2023-07-07 11:32:21.579 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/xmlrpc/__init__.py [skipped: no '__all__' defined] (1ms)
2023-07-07 11:32:21.579 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/blackd/__init__.py [skipped: no '__all__' defined] (0ms)
2023-07-07 11:32:21.579 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/blib2to3/__init__.py [skipped: no '__all__' defined] (0ms)
2023-07-07 11:32:21.579 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/catalogue/__init__.py [skipped: no '__all__' defined] (0ms)
2023-07-07 11:32:21.579 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/flake8/__init__.py [skipped: no '__all__' defined] (0ms)
2023-07-07 11:32:21.579 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/ruff/__init__.py [skipped: no '__all__' defined] (0ms)
2023-07-07 11:32:21.580 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/srsly/__init__.py [skipped: no '__all__' defined] (1ms)
2023-07-07 11:32:21.580 [info] (6159) [IDX(2)]     indexing: /Users/prrao/.pyenv/versions/3.11.2/lib/python3.11/site-packages/wheel/__init__.py [skipped: no '__all__' defined] (0ms)
2023-07-07 11:32:21.580 [info] (6159) [IDX(2)]   index execution environment /Users/prrao/code/pydantic-v2-test-drive [found 453 in 15 files] (6ms)
2023-07-07 11:32:21.581 [info] (6159) [IDX(2)] index packages /Users/prrao/code/pydantic-v2-test-drive [found 453 in 1 exec envs] (10ms)
2023-07-07 11:32:21.581 [info] [Info  - 11:32:21 AM] (6159) indexed(2) 15 files over 1 exec env
2023-07-07 11:32:21.582 [info] [Info  - 11:32:21 AM] (6159) Indexing finished(2).
2023-07-07 11:32:21.798 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:32:21.798 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:32:25.197 [info] [Info  - 11:32:25 AM] (6159) SourceFile: Received fs event 'change' for path '/Users/prrao/code/pydantic-v2-test-drive/.git/index.lock'
2023-07-07 11:32:26.943 [info] [Info  - 11:32:26 AM] (6159) SourceFile: Received fs event 'change' for path '/Users/prrao/code/pydantic-v2-test-drive/.git/index.lock'
2023-07-07 11:32:28.249 [info] [Info  - 11:32:28 AM] (6159) SourceFile: Received fs event 'change' for path '/Users/prrao/code/pydantic-v2-test-drive/.git/index.lock'
2023-07-07 11:32:29.920 [info] [Info  - 11:32:29 AM] (6159) SourceFile: Received fs event 'change' for path '/Users/prrao/code/pydantic-v2-test-drive/.git/index.lock'
2023-07-07 11:33:01.845 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:33:01.845 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:33:02.092 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:33:02.092 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:33:02.287 [info] (6159) Background analysis message: getSemanticTokens delta
2023-07-07 11:33:02.290 [info] (6159) [BG(1)] getSemanticTokens delta previousResultId:1688743941202 at /Users/prrao/code/pydantic-v2-test-drive/v2/example.py (3ms)
2023-07-07 11:33:02.380 [info] (6159) [FG] parsing: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/typing.pyi [fs read 3ms] (26ms)
2023-07-07 11:33:02.384 [info] (6159) [FG] binding: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/typing.pyi (4ms)
2023-07-07 11:33:02.622 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:33:02.622 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:33:07.037 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:33:07.037 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:33:39.000 [info] (6159) [FG] parsing: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/typing_extensions.pyi [fs read 0ms] (7ms)
2023-07-07 11:33:39.003 [info] (6159) [FG] binding: /Users/prrao/.vscode/extensions/ms-python.vscode-pylance-2023.7.10/dist/typeshed-fallback/stdlib/typing_extensions.pyi (3ms)
2023-07-07 11:33:51.224 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:33:51.224 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:34:00.106 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:34:00.106 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:35:25.440 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:35:25.440 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:35:26.066 [info] [Info  - 11:35:26 AM] (6159) SourceFile: Received fs event 'change' for path '/Users/prrao/code/pydantic-v2-test-drive/.git/FETCH_HEAD'
2023-07-07 11:35:58.967 [info] (6159) Background analysis message: getDiagnosticsForRange
2023-07-07 11:35:58.970 [info] (6159) Background analysis message: getDiagnosticsForRange
@alfawal
Copy link

alfawal commented Jul 7, 2023

I couldn't find any example that inherits from TypedDict and has a field validator. Can you confirm that the field_validator works as expected and that this is the correct way to do it?

Maybe using the BaseModel is the correct way to do it if it includes a custom field validation.

@prrao87
Copy link
Author

prrao87 commented Jul 7, 2023

Hi @alfawal, looks like the Pydantic v2 docs aren't fully up to date yet. In fact, I was myself unaware you could do this, until Samuel Colvin issued a PR on my repo to suggest using TypedDict over BaseModel for cases where most of the time is spent in serialization (converting the model to a dict). The PR he issued is linked below, and it came straight from the source :)

prrao87/pydantic-benchmarks#1

@prrao87
Copy link
Author

prrao87 commented Jul 7, 2023

This is confusing enough to me that I've started a discussion in the Pydantic repo on this! I'll update this issue with what they say, in due course.
pydantic/pydantic#6517

@prrao87
Copy link
Author

prrao87 commented Jul 8, 2023

@alfawal I think it's worth closing this issue, as it's something that type checkers are unlikely to want to support (it's too specific to Pydantic and it violates PEP 589, so Pylance and Pyright are behaving as expected). For any future readers, see the workaround in the Pydantic repo discussion for more details.

The code snippet given above works perfectly fine at runtime and the Pylance errors can be turned off in VS code by simply adding a # type: ignore line inside the decorator functions, as follows:

from pydantic import TypeAdapter, field_validator
from typing_extensions import TypedDict


class Item(TypedDict):
    id: int
    price: float
    description: str | None

    @field_validator("price", mode="before")
    def check_non_zero(cls, v):
        # type: ignore
        if v <= 0:
            raise ValueError("price cannot be zero")
        else:
            return v

Maybe at some point in the future we might see this not be a type issue! But for now things work as intended.

@prrao87 prrao87 closed this as completed Jul 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants