diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index dc6ee54c..1afa5eff 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -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 diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index 62d5746e..2afa7b73 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -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 diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index 410edafc..1f55f4e6 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -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: |- diff --git a/.github/workflows/test-sqlite-support.yml b/.github/workflows/test-sqlite-support.yml index 83a8fd39..aa2ab9bd 100644 --- a/.github/workflows/test-sqlite-support.yml +++ b/.github/workflows/test-sqlite-support.yml @@ -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: | diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 24123f86..763c6ad9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -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 diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index fe8ba1e6..00000000 --- a/.gitpod.yml +++ /dev/null @@ -1,2 +0,0 @@ -tasks: -- init: pip install '.[test]' \ No newline at end of file diff --git a/.readthedocs.yaml b/.readthedocs.yaml index e2b32ede..08c2f81a 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -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 diff --git a/Justfile b/Justfile index 1d3f6c97..f4f0e7f2 100644 --- a/Justfile +++ b/Justfile @@ -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 . diff --git a/docs/contributing.rst b/docs/contributing.rst index 297341fe..f10b02a9 100644 --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -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:: - - pip install -e '.[test]' +Use ``uv run`` to run the tests:: -To run the tests:: - - pytest + uv run pytest .. _contributing_docs: Building the documentation ========================== -To build the documentation, first install the documentation dependencies:: - - pip install -e '.[docs]' +To build the documentation run this command:: -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:: + uv run make livehtml --directory docs - 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 `__ 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 `__ for code formatting, and `flake8 `__ and `mypy `__ for linting and type checking. +``sqlite-utils`` uses `Black `__ for code formatting, and `flake8 `__ and `mypy `__ 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 `__ and `uv `__ you can use them to manage your local development environment. +If you install `Just `__ you can use it to manage your local development environment. To run all of the tests and linters:: diff --git a/pyproject.toml b/pyproject.toml index cceb315b..30ceeb0e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,43 +31,41 @@ 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", -] -docs = [ - "beanbag-docutils>=2.0", - "codespell", - "furo", - "pygments-csv-lexer", - "sphinx-autobuild", - "sphinx-copybutton", -] -mypy = [ + # mypy "data-science-types", "mypy", "types-click", "types-pluggy", "types-python-dateutil", "types-tabulate", -] -flake8 = [ + # flake8 "flake8", "flake8-pyproject", ] +docs = [ + "beanbag-docutils>=2.0", + "codespell", + "furo", + "pygments-csv-lexer", + "sphinx-autobuild", + "sphinx-copybutton", +] + +[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"]