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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3

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

Uploaded Python 3macOS 11.0+ ARM64

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

File metadata

  • Download URL: fastparse-0.1.0rc32-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.0rc32-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 31b691952611771a0179810a3837b29d7fd6dba2e77cd805784a92f3d0bcf37d
MD5 60586e4b04ee00e6902368ad5f9d66c4
BLAKE2b-256 4ace0fb14684a566bff70a4b66a57e357efca6c656801a9aa1ea9bfad8803565

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for fastparse-0.1.0rc32-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8d3b20f641a8c1986b314379668b9800808c36d83bed8db482f58911a4b07ae9
MD5 789d6492cc235b96ed8d44ce0b1cbecc
BLAKE2b-256 00c5468ffc1244df2ffc30cd175d7fc097dec5db279ffb4b86f9519957ca3aee

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for fastparse-0.1.0rc32-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b8411a930e8bae5d8389f791cf2c253ec8adfac90560bed623a4e19780fceefc
MD5 48d4bf5bf1b37b4a256ea7094653a6bd
BLAKE2b-256 52deae30ab5a2fd33d76c1103ba53b8b555be4ec6d0fbcdee63c0db25b2f1f67

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for fastparse-0.1.0rc32-py3-none-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 6fcb98a7295889970444ef957b9d6078b639ee107f7f03723e06c8499ad23531
MD5 63da68fae313d0a1b6fa258f57316e5b
BLAKE2b-256 a152e54852125f41741e486af74c365c746baa8c2ab092a0689ce59c60fe4b4d

See more details on using hashes here.

Provenance

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