Repository navigation
Conversation
- Add python/tests: runs every snippet end to end as a subprocess against
its own temporary SQLite repository, requiring a clean exit and stderr
- Add python-{linux,darwin,windows}-snippets workflows
- Snippets exit 1 and report to stderr when a Senzing error stops them
- add_queue.py uses a producer thread instead of separate processes; it
previously loaded nothing under spawn/forkserver yet exited 0
- signal_handler.py no longer uses signal.pause(), unavailable on Windows
- Fix TypeError in redo_with_info_continuous.py error handling
- Track resources/output/ so with-info snippets work on a fresh clone
- Update CHANGELOG for 0.0.11
🤖 Claude Code ReviewCode ReviewCode Quality
Testing
Documentation
Security
SummaryThe main item to fix is the potential hang in
|
Super-linter summary
All files and directories linted successfully For more information, see the GitHub Actions workflow run Powered by Super-linter |
- Remove the darwin and windows snippet workflows and their harness code: the Python SDK isn't shipped for macOS or Windows - Replace the private executor._max_workers with an explicit MAX_WORKERS (8, matching Java) in the futures and queue snippets - Bandit CI now uses pyproject.toml, so B101 is skipped as configured - Close the SQLite connection explicitly in tests/build_repo.py - Keep CHANGELOG entries under Unreleased; set pyproject version to 0.0.10 - Document pytest and correct flake8/bandit commands in .claude/CLAUDE.md
🤖 Claude Code ReviewPR Review: Python snippet tests, CI and exit codesCode Quality
Testing
Documentation
Security
SummaryThe PR is solid overall. Fix the
|
v1 (= v1.0.0) installs bandit without the toml extra on Python 3.8, so '-c pyproject.toml' failed and produced no SARIF to upload.
…l error The main thread closes the input file when the consumer raises, which could interrupt the producer mid-read. Ignore that ValueError only when the file has been closed, so decode errors are still raised.
🤖 Claude Code ReviewPR ReviewCode Quality
Testing
Documentation
Security
SummaryThe PR is solid overall. One item should be fixed before merge: the
|
An error reading the input (for example a UnicodeDecodeError) was only printed by the thread machinery, and the snippet exited 0 after a partial load. The producer now hands the error to the main thread, which raises it.
… records wait Refilling the pool looped on get_redo_record() until MAX_WORKERS records were available. Stop at the first empty fetch, and pause if nothing was fetched so wait() isn't called on an empty set.
🤖 Claude Code ReviewPR Code ReviewOverall this is a good PR. It adds an end-to-end test harness for the Python snippets, fixes real exit-code and error-handling bugs, and replaces the private Code Quality
Testing
Documentation
Security
SummaryThe only blocking item is the unexplained
Automated code review analyzing defects and coding standards |
🤖 Claude Code ReviewReviewCode Quality
Testing
Documentation
Security
SummaryI found no blocking defects. The one item to resolve before merging is the unexplained
|
🤖 Claude Code ReviewReview summaryI found no blocking defects. Code review was by reading only: I did not run the test suite, linters or CI. A few non-blocking items are below. Code Quality
Testing
Documentation
Security
Automated code review analyzing defects and coding standards |
Part of #11 (testing and workflows; no Makefile yet).
What
python/tests: pytest runs every Python snippet end to end as a subprocess, each against its own copy of a temporary SQLite repository. Snippets are discovered automatically; theSNIPPETStable intest_snippets.pycovers the ones needing data loaded, data sources registered, console input or a ctrl-c (the Python equivalent of the Java runner's.propertiesfiles). A test passes on a clean exit and empty stderr, because per-record errors are logged to stderr without changing the exit code.python-linux-snippets.yaml, modelled on the Java Linux snippet workflow: Python 3.10–3.14 × the SDK-versions matrix. Linux only, because the Python SDK isn't shipped for macOS or Windows.MAX_WORKERS = 8constant (matching Java'sTHREAD_COUNT) instead of reading the executor's private_max_workers. Behaviour change: the default wasmin(32, cpu_count + 4).Fixes found along the way
add_queue.pyloaded 0 records but exited 0 when the multiprocessing start method isn't fork (the Linux default from Python 3.14 is forkserver). It now uses a producer thread like the Java and C#LoadViaQueue, which also fixes a racyqueue.empty()stop condition. Errors in the producer thread (for example a decode error) are handed to the main thread, so the snippet exits 1 instead of reporting a partial load as success.redo_with_info_continuous.pyraised aTypeErrorinstead of exiting on a Senzing error.resources/output/wasn't in the repo, so the with-info snippets failed withFileNotFoundErroron a fresh clone. It's now tracked via.gitkeep, with its contents still ignored.redo_continuous_futures.pyspun callingget_redo_record()when fewer redo records than workers were waiting (existing bug, flagged in review).pyproject.toml, so it flaggedassertin the tests despite the configured B101 skip. It now passesconfigfileand pinsbandit-action@v1.0.1, becausev1(v1.0.0) installs bandit without TOML support.Housekeeping
[0.0.11] - 2026-10-09, andpyproject.tomlversion0.0.11. The version was previously1.2.8, which was unrelated to the0.0.xrelease tags..claude/CLAUDE.mddocuments running the tests, and the flake8/bandit commands now match the repo config.Testing
abstract_factory_parameters.pyhardcodes its own settings).add_queue.pyexits 1 (no hang) on a fatal error with a full queue, and exits 1 on a missing input file or invalid UTF-8 input;redo_continuous_futures.py's refill loop was checked with a fake engine (old code spins, new code pauses).--stricton the tests), bandit and cspell are clean; super-linter v8.7.0 was run locally with the same config aslint-workflowsand passes.Resolves #11