Skip to content

0.2.0

Choose a tag to compare

@jqnatividad jqnatividad released this 09 Oct 17:25

Added

  • Windows support. qsv is started suspended and placed in its own Job Object before it runs,
    so a timeout, cancellation or Ctrl-C stops qsv and everything it started:
    CTRL_BREAK_EVENT first, then TerminateJobObject after kill_grace. Previously only
    qsv.exe itself was killed. With inherit_env=False, SYSTEMROOT is still passed on
    Windows, since many programs fail to start without it. CI runs the full test suite on
    Windows. (#4,
    #5)

Changed

  • The sdist now contains only the package, tests, README, CHANGELOG and LICENSE. 0.1.0's also
    included repository tooling files (CLAUDE.md, .serena/, uv.lock, .github/). The wheel
    is unchanged. (#2)
  • Tested on Python 3.14 as well as 3.10–3.13. (#3)

Fixed

  • A timeout now raises within a few kill_grace periods even when a process qsv started has
    left the process group and still holds its output pipes, including when qsv ignores SIGTERM.
    Previously the run waited for that process to exit. Output it still holds is dropped, and
    AsyncQsv closes its pipe file descriptors instead of keeping them open until it exits.
    (#3)
  • Cancelling an AsyncQsv run now always kills qsv and everything it started, even when the
    cancellation arrives during timeout cleanup or comes from asyncio.run() shutting down. A
    cancelled run finishes its teardown before the cancellation propagates.
    (#3)
  • A second Ctrl-C while a sync run is waiting out kill_grace no longer skips the forced kill,
    which left a qsv that ignores the polite stop running. A Ctrl-C right after qsv starts is
    handled the same way. (#5)
  • On Windows with Python 3.10–3.12, a run whose child stops reading a large stdin= payload
    no longer hangs past its timeout. (#5)
  • A failed run whose stdout is not valid UTF-8 raises the typed QsvError instead of
    UnicodeDecodeError. (#3)
  • count() and headers() work with stdout_path= and text=False instead of raising
    IndexError. (#3)
  • A relative binary path now works together with cwd=. find_qsv returns absolute paths.
    (#3)

Full Changelog: 0.1.0...0.2.0