Skip to main content

ezjww

ezjww is a JWW parser and DXF conversion library. The core parser/writer is implemented in Rust and exposed to Python with PyO3.

Current Features

  • Validate and parse .jww files.
  • Read document/header data from Python.
  • Convert parsed JWW entities to DXF intermediate entities.
  • Write ASCII DXF files.
  • Emit DXF handles, BLOCK_RECORD table, and OBJECTS section for better CAD compatibility.

Installation

Install the package from PyPI:

pip install ezjww

If you want to use the optional plotting feature, install the package with the plot extra:

pip install "ezjww[plot]"

Install the package from source:

git clone https://github.com/neka-nat/ezjww.git
cd ezjww
uv sync

Python API

from ezjww import (
    audit,
    bbox,
    is_jww_file,
    readfile,
    plot_jww,
    read_document,
    read_dxf_document,
    report,
    stats,
    to_dxf_string,
    write_dxf,
)

ok = is_jww_file("sample.jww")
doc = read_document("sample.jww")
dxf_doc = read_dxf_document("sample.jww")
dxf_text = to_dxf_string("sample.jww")
write_dxf("sample.jww", "sample.dxf")
plot_jww("sample.jww", save_path="sample.png")

drawing = readfile("sample.jww")
msp = drawing.modelspace()
lines = msp.query("LINE", layer="#lv4")
mix = msp.query('LINE POINT[layer=="#lv4", color==5]')  # ezdxf-like selector
extents = drawing.bbox(explode_inserts=True)
raw_dxf = drawing.to_dxf_string()
dist = drawing.stats()
health = drawing.audit()  # or: audit("sample.jww")
full = report("sample.jww", explode_inserts=True)

# expand INSERT references (nested block aware)
flat = drawing.to_dxf(explode_inserts=True, max_block_nesting=32)
flat_count = len(flat["entities"])
# max_block_nesting must be >= 1

CLI

The package installs the ezjww command.

# show summary
ezjww info jww_samples/Test1.jww

# run health checks
ezjww audit jww_samples/Test1.jww --json

# calculate drawing extents
ezjww bbox jww_samples/Test1.jww --json --explode-inserts

# show entity distribution
ezjww stats jww_samples/Test1.jww --json

# show combined audit+bbox+stats
ezjww report jww_samples/Test1.jww --json --explode-inserts

# convert one file
ezjww to-dxf jww_samples/Test1.jww -o /tmp/Test1.dxf

# convert one file + JSON report
ezjww to-dxf jww_samples/Test1.jww -o /tmp/Test1.dxf --report json

# convert one file with INSERT expansion
ezjww to-dxf jww_samples/Test1.jww -o /tmp/Test1.dxf --explode-inserts

# convert directory (recursive)
ezjww to-dxf-dir jww_samples -o /tmp/dxf_out -r

# render with matplotlib
ezjww plot jww_samples/Test1.jww -o /tmp/Test1.png --explode-inserts

Development

cargo fmt --all
cargo test
maturin develop

Download files

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

Source Distribution

ezjww-0.2.6.tar.gz (528.4 kB view details)

Uploaded Source

Built Distributions

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

ezjww-0.2.6-cp39-abi3-win_amd64.whl (356.2 kB view details)

Uploaded CPython 3.9+Windows x86-64

ezjww-0.2.6-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (453.8 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

ezjww-0.2.6-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (815.9 kB view details)

Uploaded CPython 3.9+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file ezjww-0.2.6.tar.gz.

File metadata

  • Download URL: ezjww-0.2.6.tar.gz
  • Upload date:
  • Size: 528.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for ezjww-0.2.6.tar.gz
Algorithm Hash digest
SHA256 f862649e2918e95acdf4c40fd5e3c7dab78463703d16132c73024cc687cab497
MD5 1cd3cf04b1b026561e7a8549838b93c3
BLAKE2b-256 0885dfe662254c2b7ec8939789de47085b95d8f248215d81a67e18c826f39bdd

See more details on using hashes here.

File details

Details for the file ezjww-0.2.6-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: ezjww-0.2.6-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 356.2 kB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for ezjww-0.2.6-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 1bb58ea932a35a509082c45786d18eb61335a274d010ee3f045201b1b0f2cd79
MD5 5db70866fa010f9c28ae9ff2d5a46c83
BLAKE2b-256 cab671ca9936d63c4b8f0eefc3bc70c8bfaa555263ba15df17a675d726946935

See more details on using hashes here.

File details

Details for the file ezjww-0.2.6-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ezjww-0.2.6-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7c7ce618c7644cf9babccca14472cc2d6962b66e496a1a384062a41ae455610d
MD5 79459b9d04821c4b85ff9c4aaa06e4d5
BLAKE2b-256 c5d4709fbf6c7ab6fda32adbe03aabefb790ddb50516291d1d89c564a90e0df9

See more details on using hashes here.

File details

Details for the file ezjww-0.2.6-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for ezjww-0.2.6-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 60edcb7d1039b44c24f4f1d2d68805e01db2fba5ee2ce119cafd535a59acff15
MD5 6a2de277c402121ad4fa89bba316d054
BLAKE2b-256 e70825e1e45f216da9c889caa6d64ac3271526823c5a2d3b85d61931c6041036

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.13

4 files

0.2.12

4 files

0.2.11

4 files

0.2.10

4 files

0.2.9

4 files

0.2.8

4 files

0.2.7

4 files

This release

0.2.6 This release

4 files

0.2.5

4 files

0.2.4

4 files

0.2.3

4 files

0.2.2

4 files

0.2.1

4 files

0.2.0

4 files

0.1.0

4 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page