Skip to main content

Create ASTs from `ast.dump()` output.

Project description

astload

Create ASTs from ast.dump() output.

It's possible to serialize an AST node from Python's ast module to a string, using ast.dump. However, it's not possible to convert the said string back to an AST node. This simple module adds that functionality.

Examples

We will take a simple Python AST, serialize it and then deserialize it:

>>> import ast
>>> import astload
>>> tree1 = ast.parse('1 == 2')
>>> ast_string = ast.dump(tree1, indent=2)
>>> print(ast_string)
Module(
  body=[
    Expr(
      value=Compare(
        left=Constant(value=1),
        ops=[
          Eq()],
        comparators=[
          Constant(value=2)]))],
  type_ignores=[])
>>> tree2 = astload.load(ast_string)
>>> print(ast.dump(tree2, indent=2))
Module(
  body=[
    Expr(
      value=Compare(
        left=Constant(value=1),
        ops=[
          Eq()],
        comparators=[
          Constant(value=2)]))],
  type_ignores=[])
>>> ast.dump(tree1) == ast.dump(tree2)
True
>>> ast.unparse(tree2)
'1 == 2'

Adding load() to the ast module

If you prefer ast.load() instead of astload.load(), you can do the following to add a load function to the ast module directly:

>>> import astload
>>> astload.install()
>>> import ast
>>> tree = ast.parse('print(2 + 2)')
>>> copy_tree = ast.load(ast.dump(tree))
>>> ast.unparse(copy_tree)
'print(2 + 2)'

astpretty support

astload supports astpretty output also:

>>> ast_string = astpretty.pformat(ast.parse('1 == 2'))
>>> print(ast_string)
Module(
    body=[
        Expr(
            lineno=1,
            col_offset=0,
            end_lineno=1,
            end_col_offset=6,
            value=Compare(
                lineno=1,
                col_offset=0,
                end_lineno=1,
                end_col_offset=6,
                left=Constant(lineno=1, col_offset=0, end_lineno=1, end_col_offset=1, value=1, kind=None),
                ops=[Eq()],
                comparators=[Constant(lineno=1, col_offset=5, end_lineno=1, end_col_offset=6, value=2, kind=None)],
            ),
        ),
    ],
    type_ignores=[],
)
>>> tree = astload.load(ast_string)
>>> astpretty.pprint(tree)
Module(
    body=[
        Expr(
            lineno=1,
            col_offset=0,
            end_lineno=1,
            end_col_offset=6,
            value=Compare(
                lineno=1,
                col_offset=0,
                end_lineno=1,
                end_col_offset=6,
                left=Constant(lineno=1, col_offset=0, end_lineno=1, end_col_offset=1, value=1, kind=None),
                ops=[Eq()],
                comparators=[Constant(lineno=1, col_offset=5, end_lineno=1, end_col_offset=6, value=2, kind=None)],
            ),
        ),
    ],
    type_ignores=[],
)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

astload-0.1.1.tar.gz (3.0 kB view hashes)

Uploaded Source

Built Distribution

astload-0.1.1-py3-none-any.whl (3.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page