jupyterlab-a11y-checker


Namejupyterlab-a11y-checker JSON
Version 0.2.0 PyPI version JSON
download
home_pageNone
SummaryA JupyterLab extension that checks and suggests fixes for a11y issues.
upload_time2025-09-07 22:36:53
maintainerNone
docs_urlNone
authorChanbin Park
requires_python>=3.9
licenseBSD 3-Clause License Copyright (c) 2025, Chanbin Park All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
keywords jupyter jupyterlab jupyterlab-extension
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Jupyterlab-a11y-checker

Jupyterlab-a11y-checker is a JupyterLab extension performs accessibility checks on Jupyter Notebooks (on JupyterHub), leveraging custom detection algorithms to align with WCAG 2.0 AA guidelines. It enables authors to identify accessibility issues in their notebooks and provides actionable suggestions to fix them.

## Tool Description

### Issue Detection

While there are many possible a11y issues in Jupyter Notebooks, we prioritized the issues discussed in a well-known [study](https://arxiv.org/pdf/2308.03241). The issues the extension can detect are listed in [Issue Descriptions](./doc/rules.md).

### Fix Interfaces

We provide a user interface tailored to each issue, such as a text field for adding alt-text, a dropdown for fixing header issues, etc. The fix interfaces are listed in [Fix Interface Descriptions](./doc/fix-interfaces.md).

### AI Functionality

To simplify the remediation process, we integrate a Large Language Model (LLM) for generating recommendations. Using Ollama's mistral model, all processing is done locally on JupyterHub, ensuring user data privacy (details on this implementation will be shared in future releases).

![On JupyterLab, this extension is detecting accessibility issues. On the left panel, there is a sample Jupyter Notebook, while on the right side, this extension is displaying image and heading related issues.](doc/README_IMG.png)

## Getting Started

### Installing

You can install the extension directly via pip:

```bash
pip install jupyterlab-a11y-checker
```

Find the package on PyPI [here](https://pypi.org/project/jupyterlab-a11y-checker/).

### Contributing

We’re building this tool for the community, and we’d love your help! Whether it’s adding new accessibility checks, or refining the fix suggestions, your contributions can help this project make a broader impact.

#### Build from Scratch

```bash
# Create an environment using anaconda navigator: <env-name>

conda activate <env-name>
pip install cookie cutter
python -m pip install jupyterlab notebook --pre
mamba install -c conda-forge nodejs=18
node -v #to check version

# <pull code>
OR
cookiecutter https://github.com/jupyterlab/extension-cookiecutter-ts --checkout 4.0

jlpm
jlpm run build
jupyter labextension develop . --overwrite
python -m pip install -e .
pip list #to verify it has been installed in editable mode
jupyter labextension list #to verify it has been installed

jupyter lab --no-browser #run a jupyterlab server

#Run jlpm run build, then jupyter lab --no-browser to test your code after each change
```

#### Build from Temp Distribution

```bash
jlpm build:prod
npm pack #creates a tarball (*.tgz file) containing your project as it would be uploaded to the npm registry. This file can be shared and installed locally.
jupyter labextension install </path/to/your-package.tgz>


# ALTERNATIOVELY IF GIVEN A tar.gz file:

conda activate <env-name>
jupyter labextension install </path/to/your-package.tgz>
jupyter lab #this will open a local server of jupyterlab with all current extensions installed.
```

#### Pip Distribution

```bash
pip install twine

# create a ~/.pypirc file at root and add this to it:
[distutils]
index-servers =
	pypi

[pypi]
repository: https://upload.pypi.org/legacy/
username: __token__
password: your-api-token

#run this command and publish to pip.
twine upload your-package.whl
```

#### Development uninstall

```bash
pip uninstall jupyterlab_a11y_checker
```

#### Testing in a JupyterHub setup

- Build the Jupyter Lab extension with the latest changes

```bash
jlpm
jlpm build
jupyter lab build
```

- Package the extension as a wheel file (.whl)

```bash
python -m build
```

.whl file gets generated in the `dist/` directory

- Copy the .whl file to the server where JupyterHub is installed (or include it in a Dockerfile if using Docker)

- Install the .whl file:

```bash
pip install /path/to/your-extension.whl
```

- If the identical version of the extension is already installed then

```bash
pip uninstall extension-name
pip install /path/to/your-extension.whl
```

- Refresh the page for the changes to apply

In development mode, you will also need to remove the symlink created by `jupyter labextension develop`
command. To find its location, you can run `jupyter labextension list` to figure out where the `labextensions`
folder is located. Then you can remove the symlink named `jupyterlab-a11y-checker` within that folder.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "jupyterlab-a11y-checker",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "jupyter, jupyterlab, jupyterlab-extension",
    "author": "Chanbin Park",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/c7/38/8da992adf1da493975552d8ef33c4be55a4f7288c4104923f537061f8356/jupyterlab_a11y_checker-0.2.0.tar.gz",
    "platform": null,
    "description": "# Jupyterlab-a11y-checker\n\nJupyterlab-a11y-checker is a JupyterLab extension performs accessibility checks on Jupyter Notebooks (on JupyterHub), leveraging custom detection algorithms to align with WCAG 2.0 AA guidelines. It enables authors to identify accessibility issues in their notebooks and provides actionable suggestions to fix them.\n\n## Tool Description\n\n### Issue Detection\n\nWhile there are many possible a11y issues in Jupyter Notebooks, we prioritized the issues discussed in a well-known [study](https://arxiv.org/pdf/2308.03241). The issues the extension can detect are listed in [Issue Descriptions](./doc/rules.md).\n\n### Fix Interfaces\n\nWe provide a user interface tailored to each issue, such as a text field for adding alt-text, a dropdown for fixing header issues, etc. The fix interfaces are listed in [Fix Interface Descriptions](./doc/fix-interfaces.md).\n\n### AI Functionality\n\nTo simplify the remediation process, we integrate a Large Language Model (LLM) for generating recommendations. Using Ollama's mistral model, all processing is done locally on JupyterHub, ensuring user data privacy (details on this implementation will be shared in future releases).\n\n![On JupyterLab, this extension is detecting accessibility issues. On the left panel, there is a sample Jupyter Notebook, while on the right side, this extension is displaying image and heading related issues.](doc/README_IMG.png)\n\n## Getting Started\n\n### Installing\n\nYou can install the extension directly via pip:\n\n```bash\npip install jupyterlab-a11y-checker\n```\n\nFind the package on PyPI [here](https://pypi.org/project/jupyterlab-a11y-checker/).\n\n### Contributing\n\nWe\u2019re building this tool for the community, and we\u2019d love your help! Whether it\u2019s adding new accessibility checks, or refining the fix suggestions, your contributions can help this project make a broader impact.\n\n#### Build from Scratch\n\n```bash\n# Create an environment using anaconda navigator: <env-name>\n\nconda activate <env-name>\npip install cookie cutter\npython -m pip install jupyterlab notebook --pre\nmamba install -c conda-forge nodejs=18\nnode -v #to check version\n\n# <pull code>\nOR\ncookiecutter https://github.com/jupyterlab/extension-cookiecutter-ts --checkout 4.0\n\njlpm\njlpm run build\njupyter labextension develop . --overwrite\npython -m pip install -e .\npip list #to verify it has been installed in editable mode\njupyter labextension list #to verify it has been installed\n\njupyter lab --no-browser #run a jupyterlab server\n\n#Run jlpm run build, then jupyter lab --no-browser to test your code after each change\n```\n\n#### Build from Temp Distribution\n\n```bash\njlpm build:prod\nnpm pack #creates a tarball (*.tgz file) containing your project as it would be uploaded to the npm registry. This file can be shared and installed locally.\njupyter labextension install </path/to/your-package.tgz>\n\n\n# ALTERNATIOVELY IF GIVEN A tar.gz file:\n\nconda activate <env-name>\njupyter labextension install </path/to/your-package.tgz>\njupyter lab #this will open a local server of jupyterlab with all current extensions installed.\n```\n\n#### Pip Distribution\n\n```bash\npip install twine\n\n# create a ~/.pypirc file at root and add this to it:\n[distutils]\nindex-servers =\n\tpypi\n\n[pypi]\nrepository: https://upload.pypi.org/legacy/\nusername: __token__\npassword: your-api-token\n\n#run this command and publish to pip.\ntwine upload your-package.whl\n```\n\n#### Development uninstall\n\n```bash\npip uninstall jupyterlab_a11y_checker\n```\n\n#### Testing in a JupyterHub setup\n\n- Build the Jupyter Lab extension with the latest changes\n\n```bash\njlpm\njlpm build\njupyter lab build\n```\n\n- Package the extension as a wheel file (.whl)\n\n```bash\npython -m build\n```\n\n.whl file gets generated in the `dist/` directory\n\n- Copy the .whl file to the server where JupyterHub is installed (or include it in a Dockerfile if using Docker)\n\n- Install the .whl file:\n\n```bash\npip install /path/to/your-extension.whl\n```\n\n- If the identical version of the extension is already installed then\n\n```bash\npip uninstall extension-name\npip install /path/to/your-extension.whl\n```\n\n- Refresh the page for the changes to apply\n\nIn development mode, you will also need to remove the symlink created by `jupyter labextension develop`\ncommand. To find its location, you can run `jupyter labextension list` to figure out where the `labextensions`\nfolder is located. Then you can remove the symlink named `jupyterlab-a11y-checker` within that folder.\n",
    "bugtrack_url": null,
    "license": "BSD 3-Clause License\n        \n        Copyright (c) 2025, Chanbin Park\n        All rights reserved.\n        \n        Redistribution and use in source and binary forms, with or without\n        modification, are permitted provided that the following conditions are met:\n        \n        1. Redistributions of source code must retain the above copyright notice, this\n           list of conditions and the following disclaimer.\n        \n        2. Redistributions in binary form must reproduce the above copyright notice,\n           this list of conditions and the following disclaimer in the documentation\n           and/or other materials provided with the distribution.\n        \n        3. Neither the name of the copyright holder nor the names of its\n           contributors may be used to endorse or promote products derived from\n           this software without specific prior written permission.\n        \n        THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n        AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n        IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n        DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n        FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n        DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n        SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n        CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n        OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n        OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.",
    "summary": "A JupyterLab extension that checks and suggests fixes for a11y issues.",
    "version": "0.2.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/berkeley-dsep-infra/jupyterlab-a11y-checker/issues",
        "Homepage": "https://github.com/berkeley-dsep-infra/jupyterlab-a11y-checker",
        "Repository": "https://github.com/berkeley-dsep-infra/jupyterlab-a11y-checker.git"
    },
    "split_keywords": [
        "jupyter",
        " jupyterlab",
        " jupyterlab-extension"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ffd8a0af80cdbf3f9e8e7e4fc746d56fe30d59ea2d06410fde6ae7723e841343",
                "md5": "85de6b6fd5a668070d8b7657d5de54ff",
                "sha256": "4f01457322846b1062d3da3351e543ea415a368148f2f8ef6e46da13ae626abf"
            },
            "downloads": -1,
            "filename": "jupyterlab_a11y_checker-0.2.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "85de6b6fd5a668070d8b7657d5de54ff",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 2097356,
            "upload_time": "2025-09-07T22:36:45",
            "upload_time_iso_8601": "2025-09-07T22:36:45.285637Z",
            "url": "https://files.pythonhosted.org/packages/ff/d8/a0af80cdbf3f9e8e7e4fc746d56fe30d59ea2d06410fde6ae7723e841343/jupyterlab_a11y_checker-0.2.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c7388da992adf1da493975552d8ef33c4be55a4f7288c4104923f537061f8356",
                "md5": "6a0fa5f580d299b6303644f19e755ccc",
                "sha256": "502f32937f25bd17ab7dcabe625f42332b4706be992e1d1a9969ebae898a7075"
            },
            "downloads": -1,
            "filename": "jupyterlab_a11y_checker-0.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "6a0fa5f580d299b6303644f19e755ccc",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 3192543,
            "upload_time": "2025-09-07T22:36:53",
            "upload_time_iso_8601": "2025-09-07T22:36:53.395201Z",
            "url": "https://files.pythonhosted.org/packages/c7/38/8da992adf1da493975552d8ef33c4be55a4f7288c4104923f537061f8356/jupyterlab_a11y_checker-0.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-07 22:36:53",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "berkeley-dsep-infra",
    "github_project": "jupyterlab-a11y-checker",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "jupyterlab-a11y-checker"
}
        
Elapsed time: 2.29252s