- Add `StreamlinkCLIError` exception class
- Remove `ConsoleOutput.exit()` and remove `error` handling
from `ConsoleOutput.msg_json()`
- Handle raised `StreamlinkCLIError`s in `main()`
- Update and refactor some CLI tests
- Fix `KeyboardInterrupt`/`SystemExit` exceptions
not being propagated in nested `ExceptionGroup`s
- Fix compatibility with `exceptiongroup<=1.1.1`
by avoiding their `catch()` context manager
- Add missing test for (re-)raising different exception types
- Set min. version requirement of `trio` to `0.25`,
so we don't have to set `strict_exception_groups` to `True` on older
versions (probably not even possible via `pytest-trio`)
- Fix compatibility with `trio>=0.25`:
Since `strict_exception_groups` now defaults to `True`, trio nurseries
now always raise an `ExceptionGroup` in all cases, so update tests
and handle exception groups instead. Don't unwrap exception groups
for now, even if only a single exception is included.
Explicitly handle `KeyboardInterrupt`/`SystemExit` and re-raise
by using the `exceptiongroup.catch` utility (<py311 compat)
Add the `exceptiongroup` dependency directly to Streamlink, so we
can write `ExceptionGroup` handling code on all supported versions
of Python without having to rely on `trio`'s conditional dependency.
Add the `key` attribute to the `Map` class, so segment maps can be
encrypted independently or left as plain text, depending on the order
of the `EXT-X-MAP` and `EXT-X-KEY` tags in the playlist.
TODO:
Rewrite the `HLSSegment`, `HLSStreamWriter` and `HLSStreamWorker`
classes based on the logic of the DASH implementation, where
init segments are queued by the worker separately.
- Add `plugins_lazy` keyword to `Streamlink` session class
- Load pre-built plugins JSON data including matchers and arguments data
- Fall back to loading all built-in plugins if loading JSON data fails
- Iterate matcher/argument data of loaded and still unloaded plugins
- Load plugin modules of unloaded plugins when matching URLs are found
- Refactor `utils.modules` and add `get_finder()` function
- Change `--plugins` output from "Loaded plugins" to "Available plugins"
- Add tests
- Move matcher priority tests from `test_session` to `test_plugins`