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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3

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

Uploaded Python 3macOS 11.0+ ARM64

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

Uploaded Python 3macOS 10.15+ x86-64

File details

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

File metadata

  • Download URL: fastparse-0.1.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 144.0 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.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 9252470f1b3034767a3b552a0ac36da6a04ad41459ec821d955b5f84dd8fb693
MD5 6084ea4caae48d69c115ab30c3952efb
BLAKE2b-256 f0c820040733a96bad57f304bcddda2555ccaec69a548d1c8b1ca4a7f4b288a8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for fastparse-0.1.0-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0e21622c43c5087abf0e856b360ea23ea6a2693b9d36ff757033590815ad9b2e
MD5 9bff46134b68e9043d0f2dc573f9ca39
BLAKE2b-256 9c8b3fa87960a34c13eaf256dce1c23da6a18b45e93ad3f7f880ef518de47506

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for fastparse-0.1.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7c5778d2e0c12a2cde1b15c53b3c79ebc7fe24c74c9d7a221c066e71069ff8f6
MD5 917c9ba1edf93980ae46211fc6f81f9a
BLAKE2b-256 1d122f4285e0e519b1c0d1306b327252d4a2ff4c01269d9631e296cbf4112735

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for fastparse-0.1.0-py3-none-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 803604a1dfc331c659e7061f8d3c6a1d08c37bd010887a22aca82aecca228844
MD5 a5629d6f5c144a083807077e233d46df
BLAKE2b-256 5dd6aa47b1902420a28192d99aced0389731ec03c5831bdd42b6007985844f45

See more details on using hashes here.

Provenance

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