dependency-groups.dev and uv in docs (#691)

* dependency-groups.dev and switch to uv in docs
* Separate dependency group for docs
This commit is contained in:
Simon Willison 2025-12-11 15:32:00 -08:00 committed by GitHub
commit 29d84bc95d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 59 additions and 85 deletions

View file

@ -21,7 +21,7 @@ jobs:
cache-dependency-path: pyproject.toml
- name: Install dependencies
run: |
pip install -e '.[test]'
pip install --group dev
- name: Run tests
run: |
pytest

View file

@ -15,7 +15,7 @@ jobs:
cache-dependency-path: pyproject.toml
- name: Install dependencies
run: |
pip install -e '.[docs]'
pip install . --group docs
- name: Check spelling
run: |
codespell docs/*.rst --ignore-words docs/codespell-ignore-words.txt

View file

@ -24,7 +24,7 @@ jobs:
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -e .[test]
python -m pip install . --group dev
python -m pip install pytest-cov
- name: Run tests
run: |-

View file

@ -34,7 +34,7 @@ jobs:
- run: python3 -c "import sqlite3; print(sqlite3.sqlite_version)"
- name: Install dependencies
run: |
pip install -e '.[test]'
pip install . --group dev
pip freeze
- name: Run tests
run: |

View file

@ -24,9 +24,7 @@ jobs:
cache-dependency-path: pyproject.toml
- name: Install dependencies
run: |
pip install -e '.[test,mypy,flake8]'
- name: Optionally install tui dependencies
run: pip install -e '.[tui]'
pip install . --group dev
- name: Optionally install numpy
if: matrix.numpy == 1
run: pip install numpy

View file

@ -1,2 +0,0 @@
tasks:
- init: pip install '.[test]'

View file

@ -4,16 +4,13 @@ sphinx:
configuration: docs/conf.py
build:
os: ubuntu-22.04
os: ubuntu-24.04
tools:
python: "3.11"
python:
install:
- method: pip
path: .
extra_requirements:
- docs
python: "3.13"
jobs:
install:
- pip install --upgrade pip
- pip install . --group docs
formats:
- pdf

View file

@ -3,30 +3,30 @@
# Run pytest with supplied options
@test *options:
just run pytest {{options}}
uv run pytest {{options}}
@run *options:
uv run --isolated --with-editable '.[test,mypy,flake8,docs]' -- {{options}}
uv run -- {{options}}
# Run linters: black, flake8, mypy, cog
@lint:
just run black . --check
just run flake8
just run mypy sqlite_utils tests
just run cog --check README.md docs/*.rst
just run codespell docs/*.rst --ignore-words docs/codespell-ignore-words.txt
uv run flake8
uv run mypy sqlite_utils tests
uv run cog --check README.md docs/*.rst
uv run --group docs codespell docs/*.rst --ignore-words docs/codespell-ignore-words.txt
# Rebuild docs with cog
@cog:
just run cog -r README.md docs/*.rst
uv run --group docs cog -r README.md docs/*.rst
# Serve live docs on localhost:8000
@docs: cog
#!/usr/bin/env bash
cd docs
uv run --isolated --with-editable '../.[test,docs]' make livehtml
uv run --group docs make livehtml
# Apply Black
@black:
just run black .
uv run black .

View file

@ -13,78 +13,61 @@ All improvements to the software should start with an issue. Read `How I build a
Obtaining the code
==================
To work on this library locally, first checkout the code. Then create a new virtual environment::
To work on this library locally, first checkout the code::
git clone git@github.com:simonw/sqlite-utils
cd sqlite-utils
python3 -mvenv venv
source venv/bin/activate
Or if you are using ``pipenv``::
Use ``uv run`` to run the development version of the tool::
pipenv shell
Within the virtual environment running ``sqlite-utils`` should run your locally editable version of the tool. You can use ``which sqlite-utils`` to confirm that you are running the version that lives in your virtual environment.
uv run sqlite-utils --help
.. _contributing_tests:
Running the tests
=================
To install the dependencies and test dependencies::
Use ``uv run`` to run the tests::
pip install -e '.[test]'
To run the tests::
pytest
uv run pytest
.. _contributing_docs:
Building the documentation
==========================
To build the documentation, first install the documentation dependencies::
To build the documentation run this command::
pip install -e '.[docs]'
uv run make livehtml --directory docs
Then run ``make livehtml`` from the ``docs/`` directory to start a server on port 8000 that will serve the documentation and live-reload any time you make an edit to a ``.rst`` file::
cd docs
make livehtml
This will start a server on port 8000 that will serve the documentation and live-reload any time you make an edit to a ``.rst`` file.
The `cog <https://github.com/nedbat/cog>`__ tool is used to maintain portions of the documentation. You can run it like so::
cog -r docs/*.rst
uv run cog -r docs/*.rst
.. _contributing_linting:
Linting and formatting
======================
``sqlite-utils`` uses `Black <https://black.readthedocs.io/>`__ for code formatting, and `flake8 <https://flake8.pycqa.org/>`__ and `mypy <https://mypy.readthedocs.io/>`__ for linting and type checking.
``sqlite-utils`` uses `Black <https://black.readthedocs.io/>`__ for code formatting, and `flake8 <https://flake8.pycqa.org/>`__ and `mypy <https://mypy.readthedocs.io/>`__ for linting and type checking::
Black is installed as part of ``pip install -e '.[test]'`` - you can then format your code by running it in the root of the project::
uv run black .
black .
Linting tools can be run like this::
To install ``mypy`` and ``flake8`` run the following::
pip install -e '.[flake8,mypy]'
Both commands can then be run in the root of the project like this::
flake8
mypy sqlite_utils
uv run flake8
uv run mypy sqlite_utils
All three of these tools are run by our CI mechanism against every commit and pull request.
.. _contributing_just:
Using Just and uv
=================
Using Just
==========
If you install `Just <https://github.com/casey/just>`__ and `uv <https://github.com/astral-sh/uv>`__ you can use them to manage your local development environment.
If you install `Just <https://github.com/casey/just>`__ you can use it to manage your local development environment.
To run all of the tests and linters::

View file

@ -31,22 +31,22 @@ dependencies = [
"pip",
]
[project.urls]
Homepage = "https://github.com/simonw/sqlite-utils"
Documentation = "https://sqlite-utils.datasette.io/en/stable/"
Changelog = "https://sqlite-utils.datasette.io/en/stable/changelog.html"
Issues = "https://github.com/simonw/sqlite-utils/issues"
CI = "https://github.com/simonw/sqlite-utils/actions"
[project.scripts]
sqlite-utils = "sqlite_utils.cli:cli"
[project.optional-dependencies]
test = [
[dependency-groups]
dev = [
"black>=24.1.1",
"cogapp",
"hypothesis",
"pytest",
# mypy
"data-science-types",
"mypy",
"types-click",
"types-pluggy",
"types-python-dateutil",
"types-tabulate",
# flake8
"flake8",
"flake8-pyproject",
]
docs = [
"beanbag-docutils>=2.0",
@ -56,18 +56,16 @@ docs = [
"sphinx-autobuild",
"sphinx-copybutton",
]
mypy = [
"data-science-types",
"mypy",
"types-click",
"types-pluggy",
"types-python-dateutil",
"types-tabulate",
]
flake8 = [
"flake8",
"flake8-pyproject",
]
[project.urls]
Homepage = "https://github.com/simonw/sqlite-utils"
Documentation = "https://sqlite-utils.datasette.io/en/stable/"
Changelog = "https://sqlite-utils.datasette.io/en/stable/changelog.html"
Issues = "https://github.com/simonw/sqlite-utils/issues"
CI = "https://github.com/simonw/sqlite-utils/actions"
[project.scripts]
sqlite-utils = "sqlite_utils.cli:cli"
[build-system]
requires = ["setuptools"]