Conversation
The downloaded bytes were wrapped in a list before being handed to loads(), which only accepts str, list[str], or bytes. Pass the response body through directly. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Rewrite the README around usage instead of build notes, add examples/quickstart.ipynb with a `make notebook` target, and pass --no-cache in test-pytest so uv doesn't reuse a stale wheel. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🤖 Claude-generated PR description
Phases 0 and 1 of
plans/python/05-roadmap.md(ticketstodos/python/01–11). Each ticket is one commit, in dependency order.Phase 0 — stop the bleeding
abi3-py311(89fa6af). Fixes the segfault on CPython 3.14:Filing(path)killed the interpreter with pyo3 0.22, and because the wheel is abi3 it installed on 3.14 without complaint.extension-moduledropped (maturin ≥ 1.9.4 sets it), socargo test -p libfec_parserlinks again.requires-python = ">=3.11", dead[project.scripts]removed.2935fed):foo.bar() -> 42scaffold, the phantom rootpyproject.toml/uv.lock,crates/fec-py/uv.lock.d15e139):MIT OR Apache-2.0for the whole repo;LICENSE-MIT/LICENSE-APACHEat the root, symlinked into the two pyproject crates so PEP 639license-filespicks them up (verified inside the wheel'sMETADATA).2a30b91): five small real filings committed undercrates/fec-py/tests/fixtures/(271 KB total,.gitignorenegation for that dir), oneconftest.py,slow/networkmarkers off by default,from_httptests mocked instead oftry/except: pass. Suite goes from 66 passed in 2m37s (parsing a gitignored 91 MB file ~25×; 62 skips on any other machine) to 89 passed / 1 skipped in 0.1 s on a fresh clone.c67be63):test-python.ymlbuilds a release wheel, installs it, runs pytest and aFiling()smoke test on ubuntu/macos/windows × {3.11, 3.14}. Actions SHA-pinned,maturin@1.15.0pinned. Guards against uv resolving3.14to the free-threaded build (where the wheel installs but can't import).Phase 1 — layout, packaging, first wheels
_nativemodule (72512eb):python/libfec_parser/{__init__,parser,fecfile}.pyoverlibfec_parser._native; declarative#[pymodule] mod _native { … };Filing.__module__ == "libfec_parser.parser"; no moresys.modulespatching. pyo3 0.29 registers nested modules as attributes, not importable submodules, so the shims bind by attribute.21f949a):dynamic = ["version"]fromCargo.toml, set to the workspace's0.0.32;libfec_parser.__version__; full[project]metadata,[project.urls],[dependency-groups] dev, committeduv.lock.cef073d):make develop(maturin develop --uv, ~1.4 s incremental) /test/build/stubs/notebook; no hardcoded wheel filenames;demo*.pydeleted (the notebook is the demo).9bb348c):parser.pyi,fecfile.pyi,py.typed;mypy.stubtest+mypy --check-untyped-defs testsclean, run in CI against the installed wheel. Note:Filing()/from_file()don't acceptos.PathLiketoday — the stubs saystr; Phase 2 fixes the input path.735d88b):examples/quickstart.ipynbreads the committed fixture (download only as a fallback); executed on one CI job;make notebook-checkre-records outputs locally.21a4c58):build-python-bindings.ymlbuilds manylinux_2_17 x86_64/aarch64 (native arm runner,maturin-actioncontainer — fixes themanylinux_2_34mistake the CLI wheel makes), macOS x86_64/arm64, Windows x64, plus an sdist; each job installs its own wheel and constructs aFilingbefore uploading.publish-python-bindings.ymlattaches them to the GitHub Release withgh release upload(cargo-dist doesn't attach custom-job artifacts itself). Registered indist-workspace.tomlwith agithub-custom-job-permissionsoverride forcontents: write;release.ymlregenerated withdist generate(not hand-edited). Artifact prefixwheels_libfec_parser-*deliberately doesn't matchpublish-pypi.yml'swheels_libfec-*glob — nothing fromcrates/fec-pygoes to PyPI (decision D1). README gets an alpha banner, release-URL install instructions (3.11+,uv-first), and a known-issues list for the three deferred parser bugs.What this PR can't prove locally
test-python.yml(6 jobs) — this PR is the first run.release.ymlonly runs custom build jobs on a PR whenpr-run-mode = "upload"(default is plan-only), so the six wheel artifacts will first appear either on the next tag or after temporarily setting that. Riskiest bits: the Windows smoke step (.venv-smoke+ glob under git-bash) and thegh release uploadpermissions on the publish job — a 403 there means the permissions override didn't take.SystemErrornow, not a segfault). Not in scope (decision D8).Verified locally
Release wheel
libfec_parser-0.0.32-cp311-abi3-macosx_11_0_arm64.whl; 89 passed / 1 skipped on CPython 3.11.11 and 3.14.3;python -m mypy.stubtest libfec_parserandmypy testsclean;dist generate --checkpasses;cargo clippy -p fec-cliand-p libfec_parserclean;cargo test -p libfec_parserlinks.🤖 Generated with Claude Code