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.0rc27-py3-none-win_amd64.whl (144.1 kB view details)

Uploaded Python 3Windows x86-64

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

Uploaded Python 3

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

Uploaded Python 3macOS 11.0+ ARM64

fastparse-0.1.0rc27-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.0rc27-py3-none-win_amd64.whl.

File metadata

  • Download URL: fastparse-0.1.0rc27-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.0rc27-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 a0fb5780bf600c33e498376abce181bd19b5c35fa490a3a8819323591d4dfd3a
MD5 a0dfa50bd1b672545d490481ffc61607
BLAKE2b-256 9d8191065812e823cda8b07bf7ca4ba7bfdecab97cb04f21e03ae075f7de9d9c

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastparse-0.1.0rc27-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.0rc27-py3-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastparse-0.1.0rc27-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c05a283788ee9fb461173e76b211d930cf12826cecb344dd9e89e33030209e3b
MD5 d2e014ab20158feeaae03df1cac33e66
BLAKE2b-256 e2809d0976a8de876e2c9683555c0e762c42fdaa85e89dc9c31287d41b5accd4

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastparse-0.1.0rc27-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.0rc27-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fastparse-0.1.0rc27-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ef10c7f04bd4ad4406c20f51b97d2b91222f7a075eb1eb305f3d33e0f90fd224
MD5 970af2eb0b38c8b3d75b64b89803e004
BLAKE2b-256 a9dc8139f46da59564276625cbff0b68a7b59579eb0aa0a77b640ebfa5f9c341

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastparse-0.1.0rc27-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.0rc27-py3-none-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for fastparse-0.1.0rc27-py3-none-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 9f63d9e08852899d2df187355550be667abfab0d77011ed2626517c96d88be6f
MD5 6d895ffc128a31a1b6df2a5b212ea7d6
BLAKE2b-256 db70d38b18e384a3ea6aa6a2c5216226b013149132e5798009e051c159164010

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastparse-0.1.0rc27-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