Releases: lsst-sqre/noteburst
0.13.0
New features
-
Notebook execution jobs can now set timeouts. In requests, set a timeout in the
timeout
request field. This can be a number of seconds, or a human-readable duration string (e.g. "1h30m"). The specified timeout is also repeated in the response body. This timeout applies to the notebook execution, not any time in the queue. -
Errors that prevented a notebook from being executed are now reported in the notebook job response body in the
error
field. The field is an object with acode
field and amessage
field. Thecode
field is a string that can be used to identify the error. Currently the codes aretimeout
,jupyter_error
, andunknown
. Note that exceptions raised in the Jupyter notebook aren't considered errors, but are instead reported in theipynb_error
field.
What's Changed
- DM-46137: Support timeouts in notebook executions by @jonathansick in #99
Full Changelog: 0.12.1...0.13.0
0.12.1
Bug fixes
- When logging into JupyterHub, a Noteburst now looks for XRSF tokens from each redirect.
Other changes
- Adopt
ruff-shared.toml
from https://github.com/lsst/templates - Adopt uv for dependency management and resolution.
- Adopt explicit ASGITransport for setting up test HTTPX client.
What's Changed
- Update change log for 0.11.0 release by @jonathansick in #87
- [neophile] Update dependencies by @neophile-square in #88
- [neophile] Update dependencies by @neophile-square in #89
- [neophile] Update dependencies by @neophile-square in #90
- [neophile] Update dependencies by @neophile-square in #91
- [neophile] Update dependencies by @neophile-square in #92
- [neophile] Update dependencies by @neophile-square in #93
- [neophile] Update dependencies by @neophile-square in #94
- [neophile] Update dependencies by @neophile-square in #95
- [neophile] Update dependencies by @neophile-square in #96
- [neophile] Update dependencies by @neophile-square in #97
- DM-45563: Get JupyterHub XSRF token from each redirect hop by @jonathansick in #98
Full Changelog: 0.12.0...0.12.1
0.12.0
New features
-
Create Gafaelfawr service tokens instead of user tokens for authenticated calls to JupyterHub and JupyterLab. Gafaelfawr is standardizing on the new service token type for all service-to-service authentication.
-
Reduced the frequency of keep-alive tasks for the Noteburst workers to once every 15 minutes, from once every 5 minutes. This is intended to clean up the logging output.
Bug fixes
- Correctly extract cookies from the middle of the redirect chain caused by initial authentication to a Nublado lab. This fixes failures seen with labs containing JupyterHub 4.1.3.
What's Changed
- [neophile] Update dependencies by @neophile-square in #81
- DM-44136: Switch to creating Gafaelfawr service tokens by @rra in #82
- [neophile] Update dependencies by @neophile-square in #85
- [neophile] Update dependencies by @neophile-square in #86
- DM-43852: Get xsrf token from each redirect by @jonathansick in #77
New Contributors
Full Changelog: 0.11.0...0.12.0
0.11.0
New features
- Add support for
gid
as well asuid
fields in the worker identity configuration. Bothuid
andgid
are now validated as integers
What's Changed
- [neophile] Update dependencies by @neophile-square in #76
- [neophile] Update dependencies by @neophile-square in #78
- [neophile] Update dependencies by @neophile-square in #79
- Add gid to worker, make uid/gid int by @athornton in #80
New Contributors
- @athornton made their first contribution in #80
Full Changelog: 0.10.0...0.11.0
0.10.0
0.10.0 (2024-03-26)
New features
-
Add a
NOTEBURST_WORKER_MAX_CONCURRENT_JOBS
environment variable configuration to limit the number of concurrent jobs a worker can run. The default is 3. Previously this was 10. This should be set to be equal or less than the number of CPUs available to the JupyterLab pod. -
The notebook execution client now waits as long as possible for the
/execution
endpoint in the JupyterLab pod to return the executed notebook. Previously the client would wait for a fixed amount of time, which could be too short for long-running notebooks. The JupyterLab server may still time-out the request, though.
Bug fixes
- Improved handling of the XSRF token when authenticated to JupyterHub and JupyterLab pods. This is required in JupyterLab 4.1.
What's Changed
- [neophile] Update dependencies by @neophile-square in #75
- DM-43460: Add a
NOTEBURST_WORKER_MAX_CONCURRENT_JOBS
config by @jonathansick in #74
Full Changelog: 0.9.1...0.10.0
0.9.1
Bug fixes
- Fix Slack error messaging in the
nbexec
worker function. - Extract and use the actual XSRF token when communicating with the Hub and Lab.
What's Changed
- [neophile] Update dependencies by @neophile-square in #72
- DM-43393: Cast job_try to str when making SlackTextField by @jonathansick in #73
Full Changelog: 0.9.0...0.9.1
0.9.0
New features
-
Add formatted errors when a job is not found for the
GET /v1/notebooks/:job_id
endpoint. -
Errors and uncaught exceptions are now sent to Slack via a Slack webhook. The webhook URL is set via the
SLACK_WEBHOOK_URL
environment variable.
Other changes
- The code base now uses Ruff for linting and formatting, replacing black, isort, and flake8. This change is part of the ongoing effort to standardize SQuaRE code bases and improve the developer experience.
What's Changed
- [neophile] Update dependencies by @neophile-square in #64
- [neophile] Update dependencies by @neophile-square in #65
- [neophile] Update dependencies by @neophile-square in #68
- DM-43173: Format codebase with ruff by @jonathansick in #69
- [neophile] Update dependencies by @neophile-square in #71
- DM-43226: Improve client usage error responses and add Slack error reporting by @jonathansick in #70
Full Changelog: 0.8.0...0.9.0
0.8.0
New features
-
The response to
GET /notebooks/:job_id
now includes anipynb_error
field that contains structured information about any exception that occurred when executing the notebook. As well, if an exception occurred, the resultant notebook is still included in the response. That is, notebook failures are no longer considered failed jobs. -
The
job_id
is now included in log messages when running thenbexec
job under arq. -
The user guide includes a new tutorial for using the Noteburst web API.
Other changes
- Update to Pydantic 2
- Adopt FastAPI's lifespan feature
- Adopt scriv for changelog management
- Update GitHub Actions workflows, including integrating Neophile for dependency updates.
- Update to Python 3.12.
What's Changed
- DM-40143: Modernization by @jonathansick in #58
- DM-40143: Update github actions to match template by @jonathansick in #59
- [neophile] Update dependencies by @neophile-square in #60
- DM-40143: Adopt new notebook execution result with error field by @jonathansick in #61
New Contributors
- @neophile-square made their first contribution in #60
Full Changelog: 0.7.1...0.8.0
0.7.1
Fixes
- Add additional logging of JupyterLab spawning failures in workers.
Other changes
- Added documentation for configuration environment variables.
- Added OpenAPI docs, rendered by Redoc, to the Sphinx documentation site.
What's Changed
- DM-38798: Debugging for USDF deployment by @jonathansick in #55
Full Changelog: 0.7.0...0.7.1
0.7.0
- The JupyterHub service's URL path prefix is now configurable with the
NOTEBURST_JUPYTERHUB_PATH_PREFIX
environment variable. The default is/nb/
, which is the existing value. - The Nublado JupyterLab Controller service's URL path prefix is configurable with the
NOTEBURST_NUBLADO_CONTROLLER_PATH_PREFIX
environment variable. The default is/nublado
, which is the existing value.
What's Changed
- DM-39336: Add configurations for the Nublado API paths by @jonathansick in #54
Full Changelog: 0.6.3...0.7.0