Contributing¶
We are glad you are here! Contributions to this package are always welcome. Read on to learn more about the contribution process and package design.
ipyniivue uses the recommended hatchling build-system, which is convenient to use via the hatch CLI. We recommend installing hatch globally (e.g., via pipx) and running the various commands defined within pyproject.toml. hatch will take care of creating and synchronizing a virtual environment with all dependencies defined in pyproject.toml.
Install Pre-Commit hooks¶
We use pre-commit to run code checks and clear notebook outputs before committing changes. To install the pre-commit hooks, run the following command:
$ pre-commit install
As a result, the hooks will automatically check and fix some issues before pushing with git. If changes are made after committing with git, you will need to commit again afterwards. Alternatively, you can just run the following command beforehand:
$ nb-clean clean --remove-empty-cells
Command Cheatsheet¶
All commands are run from the root of the project, from a terminal:
Command |
Action |
---|---|
$ hatch run format |
Format project with ruff format . and apply linting with ruff –fix |
$ hatch run lint |
Lint project with ruff check . |
$ hatch run test |
Run unit tests with pytest |
$ hatch run docs |
Build docs with Sphinx |
Alternatively, you can develop ipyniivue by manually creating a virtual environment and managing installation and dependencies with pip.
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
Making Changes to the JavaScript Code¶
This is an anywidget project, which means the code base is hybrid Python and JavaScript. The JavaScript part is developed under js/ and uses esbuild to bundle the code. Any time you make changes to the JavaScript code, you need to rebuild the files under src/ipyniivue/static. This can be done in two ways:
$ npm run build
which will build the JavaScript code once, or you can start a development server:
$ npm run dev
which will start a development server that will automatically rebuild the code as you make changes. We recommend the latter approach, as it is more convenient.
Once you have the development server running, you can start the JupyterLab or VS Code to develop the widget. When finished, you can stop the development server with Ctrl+C.
NOTE: In order to have anywidget automatically apply changes as you work, make sure to export ANYWIDGET_HMR=1 environment variable. This can be set directly in a notebook with %env ANYWIDGET_HMR=1 in a cell.