• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

openvax / topiary / 34869603181-1
92%
master: 92%

Build:
Build:
LAST BUILD BRANCH: fix-declared-deps-and-dead-surface
DEFAULT BRANCH: master
Ran 14 Sep 2026 05:00PM UTC
Jobs 1
Files 43
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

14 Sep 2026 04:35PM UTC coverage: 92.154% (+0.02%) from 92.138%
34869603181-1

Pull #311

github

iskandr
Narrow to PredictorSetupError; bare RuntimeError masked real bugs

A second review of this branch caught it contradicting its own
principle: it argued a narrow type is how you avoid hiding bugs, then
caught bare RuntimeError across the whole predict call graph.

NotImplementedError and RecursionError both subclass RuntimeError.
Reproduced: patching predict_epitopes_from_args to raise a bare
NotImplementedError printed the usage block, then "topiary: error: "
with nothing after it, exit 2, no traceback. An abstract method left
unimplemented reported as a clean user error, with an empty message,
because str(NotImplementedError()) is "". Dependencies' internal
invariant failures - varcode's lazy SpliceOutcomeSet, mhctools TULIP's
row-count check - would have been treated the same way.

mhcflurry_composite_version now raises PredictorSetupError, a
RuntimeError subclass, exported, for the four conditions where the
predictor is reachable but unusable and the fix is the caller's
(mhcflurry absent, no __version__, unreadable release, no active
release). The CLI catches that type instead of RuntimeError. Same shape
as CachedPredictorCoverageError for KeyError, which is what this branch
should have done the first time.

The handler also falls back to type(e).__name__ when str(e) is empty,
so no caught exception can render as a bare "topiary: error: ". The
changelog claim that str(e) "is correct for every type the handler
catches" was false for argument-less exceptions and is corrected.

Test fixes from the same review:

- CachedPredictorCoverageError.__str__ had no direct test. The existing
  KeyError tests match substrings of str(excinfo.value), which pass
  whether or not the message is quoted, so the only test that would
  have caught its removal was the fixture-dependent CLI one. A direct
  test now covers the single-arg and multi-arg forms; confirmed failing
  with __str__ removed.
- The setup-failure test hard-coded a copy of the message and raised it
  f... (continued)
Pull Request #311: Give CachedPredictorCoverageError a __str__; catch RuntimeError in the CLI

11 of 13 new or added lines in 3 files covered. (84.62%)

7129 of 7736 relevant lines covered (92.15%)

0.92 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
91.03
0.09% topiary/cached.py
Jobs
ID Job ID Ran Files Coverage
1 34869603181-1.1 14 Sep 2026 05:00PM UTC 43
92.15
GitHub Action Run
Source Files on build 34869603181-1
  • Tree
  • List 43
  • Changed 4
  • Source Changed 3
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #34869603...
  • Pull Request #311
  • PR Base - master (#34803732...)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc