Skip to main content

A attrs-style wrapper for python ast

Project description

asttrs

A attrs-style wrapper for python ast

Features

1. Developer-friendly version of ast, 1) easier to access docstring and 2) easier to do codegen.

from ast import FunctionDef

help(FunctionDef)
# Help on class FunctionDef in module ast:

# class FunctionDef(stmt)
#  |  FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)
#  |  
#  |  (no docstring)
#  |  
#  |  Method resolution order:
#  |      FunctionDef
#  |      stmt
#  |      AST
#  |      builtins.object
#  |  
#  :

vs

from asttrs import FunctionDef

help(FunctionDef)
# Help on class FunctionDef in module asttrs._py3_11:

# class FunctionDef(stmt)
#  |  FunctionDef(*, name: 'identifier', args: 'arguments', body: List[ForwardRef('stmt')] = NOTHING, de
# corator_list: List[ForwardRef('expr')] = NOTHING, returns: 'expr' = None, type_comment: 'string' = Non
# e) -> None
#  |  
#  |  A function definition.
#  |  * ``name`` is a raw string of the function name.
#  |  * ``args`` is an :class:`arguments` node.
#  |  * ``body`` is the list of nodes inside the function.
#  |  * ``decorator_list`` is the list of decorators to be applied, stored outermost
#  |  first (i.e. the first in the list will be applied last).
#  |  * ``returns`` is the return annotation.
#  |  .. attribute:: type_comment
#  |  ``type_comment`` is an optional string with the type annotation as a comment.
#  :


# Then we can easily know how to build a function
from asttrs import arguments, Return, Constant

func = FunctionDef(name="foo", args=arguments(), body=[Return(value=Constant(value="Hello World"))])

print(func.to_source())
# def foo():
#     return 'Hello World'
#

2. provide Comment to codegen comments

from asttrs import Comment


comment = Comment(body="This is a comment,\nsecond line,\nthird line.")
print(comment.to_souce())
# This is a comment,
# second line,
# third line.

Development

# switch python version and environment
$ (cd cpython; git checkout v3.11.7) 
$ ln -vsfT .venv311 .venv

# run codegen based on Python.asdl
$ pdm run inv build | pdm run black - >! src/asttrs/_py3_11.py

# run testing
$ pdm run pytest --doctest-modules --cov=src --cov-report=term-missing tests

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

asttrs-1.0.1.tar.gz (42.6 kB view details)

Uploaded Source

Built Distribution

asttrs-1.0.1-py3-none-any.whl (46.2 kB view details)

Uploaded Python 3

File details

Details for the file asttrs-1.0.1.tar.gz.

File metadata

  • Download URL: asttrs-1.0.1.tar.gz
  • Upload date:
  • Size: 42.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.12.4 CPython/3.8.5

File hashes

Hashes for asttrs-1.0.1.tar.gz
Algorithm Hash digest
SHA256 dbe74c79ecc6d57515ba5f776371bc44bd9c3937cadd850a3f3c1b059e08df6a
MD5 3a12d5425dd49b526b1ae37078c17f19
BLAKE2b-256 d30f600d96a205aad9b237424628069afbef96c8b7b0b25095c10c723a8b5e83

See more details on using hashes here.

File details

Details for the file asttrs-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: asttrs-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 46.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.12.4 CPython/3.8.5

File hashes

Hashes for asttrs-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 58cd85a8ae2d9df9294d2c9cbabc4dda7bd34378a169031de58ed3b955d21d01
MD5 08184b79cced4cbbe840f56065ddc0d8
BLAKE2b-256 9d1894d143ef6f91db6538a741c0a1978e78851d8a3437d5883185cf68d224d2

See more details on using hashes here.

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