Skip to main content

Python binding for the FastParse Tree-sitter parser library with bundled native runtime

Project description

FastParse Python Binding

Small ctypes binding for the FastParse native C library.

The binding keeps the same design boundary as the native library:

  • Python owns file I/O.
  • Python passes bytes already loaded in RAM.
  • FastParse returns JSON, CSV, MessagePack binary, diagnostics, or stats in RAM.
  • FastParse can execute Tree-sitter queries and return matches/captures in RAM.
  • Python copies the returned native buffer and frees the native result.

Install

From PyPI, once the package is published:

pip install --pre fastparse

From a downloaded wheel:

pip install fastparse-0.1.0rc17-py3-none-macosx_11_0_arm64.whl

The wheel includes the native library for its platform and py.typed markers for type-aware tooling, so normal users do not need FASTPARSE_LIBRARY_PATH.

Quick Use

from fastparse import FastParse, Field, OutputFormat, ParseOptions

parser = FastParse()
source = b"class Demo { void run() {} }"

result = parser.parse_bytes(
    source,
    ParseOptions(
        language="java",
        output_format=OutputFormat.JSON,
        fields=Field.RULE | Field.TEXT | Field.BYTE_RANGE,
    ),
)

print(result.node_count)
print(result.json())

Tree-sitter query output:

from fastparse import QueryOptions

query_result = parser.query_text(
    "class Demo { void run() {} }",
    "(method_declaration name: (identifier) @method.name) @method",
    QueryOptions(
        language="java",
        output_format=OutputFormat.JSON,
        fields=Field.CAPTURE_NAME | Field.RULE | Field.TEXT | Field.RANGE | Field.BYTE_RANGE,
    ),
)

print(query_result.json())

Binary MessagePack output:

result = parser.parse_bytes(
    source,
    language="java",
    output_format="binary",
    fields=["rule", "text", "byte_range"],
)

print(result.node_count)
print(result.data)  # MessagePack bytes

Decode binary output into Python dataclasses:

document = result.binary_document()
print(document.nodes[0].rule)
print(document.nodes[0].text)

If the caller only needs node/output counts and does not need to copy the generated JSON/CSV into Python:

summary = parser.parse_bytes_summary(
    source,
    language="java",
    output_format="json",
)

print(summary.node_count)
print(summary.output_length)

Use FASTPARSE_LIBRARY_PATH to point at a specific native library:

FASTPARSE_LIBRARY_PATH=/path/to/libfastparse.dylib python your_script.py

Examples

From the repository root:

python3 examples/python/03_binary_decode/binary_decode.py
python3 examples/python/04_inventory_to_sqlite/inventory_to_sqlite.py --workers 12
python3 examples/python/05_diagnostics_scan/diagnostics_scan.py /path/to/java/root --glob "*.java" --workers 12

04_inventory_to_sqlite is the enterprise pattern for high-throughput work: the parent Python app reads files, uses threads, decodes binary output into dataclasses, and writes SQLite tables outside the native library.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

fastparse-0.1.0rc29-py3-none-win_amd64.whl (144.1 kB view details)

Uploaded Python 3Windows x86-64

fastparse-0.1.0rc29-py3-none-manylinux2014_x86_64.whl (191.6 kB view details)

Uploaded Python 3

fastparse-0.1.0rc29-py3-none-macosx_11_0_arm64.whl (172.8 kB view details)

Uploaded Python 3macOS 11.0+ ARM64

fastparse-0.1.0rc29-py3-none-macosx_10_15_x86_64.whl (178.2 kB view details)

Uploaded Python 3macOS 10.15+ x86-64

File details

Details for the file fastparse-0.1.0rc29-py3-none-win_amd64.whl.

File metadata

  • Download URL: fastparse-0.1.0rc29-py3-none-win_amd64.whl
  • Upload date:
  • Size: 144.1 kB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fastparse-0.1.0rc29-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 c5e079030f4fdeec2f0d8767596ccf43aaa80020ff7487851afe63cddbbdd99c
MD5 7af1a6e7fcccae89c8ac5859ccff5529
BLAKE2b-256 c2ad0ddd82699459e4eaffbf16b94766c92dfb52567632bc9fd1e563dc8e41c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastparse-0.1.0rc29-py3-none-win_amd64.whl:

Publisher: release.yml on natan-sysview/fast_parser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fastparse-0.1.0rc29-py3-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastparse-0.1.0rc29-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 93c8d6f2f1c6d5155102ab072bdb44d7352b547ffa967b1b01b41f3050076b37
MD5 ce2529c2878a3b2d6e7a3a46bbeb838d
BLAKE2b-256 34ac0b513d7ccab96bdec4dbca236c38b546628dd74bf13bc2f7f41cf58fac89

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastparse-0.1.0rc29-py3-none-manylinux2014_x86_64.whl:

Publisher: release.yml on natan-sysview/fast_parser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fastparse-0.1.0rc29-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fastparse-0.1.0rc29-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03489a0c11f68d4dd5221d058a59b7efc4aa4c766a3aff99b5ba43d2a9e20515
MD5 678eeebfccbf517ee58e9a547d496221
BLAKE2b-256 9dc6d83b6542c172aaffef7ab6afe869db0091746bf4cd71e50de77704aa3040

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastparse-0.1.0rc29-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on natan-sysview/fast_parser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fastparse-0.1.0rc29-py3-none-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for fastparse-0.1.0rc29-py3-none-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 9027c68f2b0c981187e98aa00778628ea668c3d68e814a1fd606d64fd80179a7
MD5 d28ec4b1b9638f73c89de5728a8b91c0
BLAKE2b-256 60d1cf9bc50705452151a36ee234c267ee80a9fc0f0daced08e2f94cdebb2228

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastparse-0.1.0rc29-py3-none-macosx_10_15_x86_64.whl:

Publisher: release.yml on natan-sysview/fast_parser

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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