Pydantic AST
Pydantic models covering Python AST types.
Installation
pip install pydantic-ast
Usage
Use it as a drop-in replacement to ast.parse with a more readable representation.
>>> import ast
>>> import pydantic_ast
>>> source = "x = 1"
>>> ast.parse(source)
<ast.Module object at 0x7fef82567610>
>>> pydantic_ast.parse(source)
body=[Assign(targets=[Name(id='x', ctx=Store())], value=Constant(value=1), type_comment=None)] type_ignores=[]
Use it on the command line to quickly get an AST of a Python program or a section of one
echo '"Hello world"' | pydantic-ast
⇣
body=[Expr(value=Constant(value='Hello world'))] type_ignores=[]
Use it on ASTs you got from elsewhere to make them readable, or to inspect parts of them more easily.
The AST_to_pydantic class is a ast.NodeTransformer that converts nodes in the AST to
pydantic_ast model types when the tree nodes are visited.
>>> from pydantic_ast import AST_to_pydantic
>>> source = "123 + 345 == expected"
>>> my_mystery_ast = ast.parse(source)
>>> ast_model = AST_to_pydantic().visit(my_mystery_ast)
>>> ast_model
body=[Expr(value=Compare(left=BinOp(left=Constant(value=123), op=Add(), right=Constant(value=345)), ops=[Eq()], comparators=[Name(id='expected', ctx=Load())]))] type_ignores=[]
>>> ast_model.body
[Expr(value=Compare(left=BinOp(left=Constant(value=123), op=Add(), right=Constant(value=345)), ops=[Eq()], comparators=[Name(id='expected', ctx=Load())]))]
It's simply much easier to drill down into a tree when you can see the fields in a repr.
>>> ast_model.body[0].value
Compare(left=BinOp(left=Constant(value=123), op=Add(), right=Constant(value=345)), ops=[Eq()],
comparators=[Name(id='expected', ctx=Load())])
>>> ast_model.body[0].value.left
BinOp(left=Constant(value=123), op=Add(), right=Constant(value=345))
>>> ast_model.body[0].value.left.left
Constant(value=123)
>>> ast_model.body[0].value.left.left.value
123
Development
-
To set up pre-commit hooks (to keep the CI bot happy) run
pre-commit install-hooksso all git commits trigger the pre-commit checks. I use Conventional Commits. This runsblack,flake8,autopep8,pyupgrade, etc. -
To set up a dev env, I first create a new conda environment and use it in PDM with
which python > .pdm-python. To usevirtualenvenvironment instead of conda, skip that. Runpdm installand a.venvwill be created if no Python binary path is found in.pdm-python. -
To run tests, run
pdm run python -m pytestand the PDM environment will be used to run the test suite.
Metadata
Release files for pydantic-ast 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pydantic_ast-0.2.1.tar.gz | 7.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pydantic_ast-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.7 kB
Release files / pydantic_ast-0.2.1.tar.gz
| Download URL | pydantic_ast-0.2.1.tar.gz |
|---|---|
| Size | 7.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b288e6f3c3e3b74f791fb5616cfa283a9f7b1b6842f3107d804159b9ca176f25
|
|
BLAKE2b-256 checksum How to use checksums |
62d02d338d5a1adc0a5411b94d079951c363fc7c0bf671d860322313d090e1ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / pydantic_ast-0.2.1-py3-none-any.whl
| Download URL | pydantic_ast-0.2.1-py3-none-any.whl |
|---|---|
| Size | 13.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
eb05b3edc043d9ccc41d8d31ec30501fdd07ed0df4dad0c1aa82591ed2a9cfbb
|
|
BLAKE2b-256 checksum How to use checksums |
088a25f2b3692e5360a12048f9ce42110deaa563cf7ab9e9d9b457bed805176a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency log