From 0f6b8dee678f0011bb35d65862a315520b381160 Mon Sep 17 00:00:00 2001 From: Laurens Valk Date: Thu, 28 May 2026 10:19:43 +0200 Subject: [PATCH 1/5] npm: Simplify release pipeline. Releasing API updates is quite a long and error prone process, so the point that it was limiting our ability to push frequent updates in practice. There were 5 tag, commit, wait, and proceed steps and you'd have to start over or force push if a mistake was made. This keeps all the npm packages as they were, but versions everything from a single source of truth, which is this project's main version. Everything builds on a tag on the main repo, much like we did for a regular IDE docs RTD release. It also skips the PyPI for jedi as an intermediate step, which isn't really needed and required us to have this strict order of publication steps. --- .github/workflows/build.yml | 2 +- .github/workflows/jedi.yml | 17 +--- .github/workflows/publish-ide-docs.yml | 26 ++++-- .github/workflows/publish-images.yml | 6 +- .github/workflows/publish-jedi.yml | 34 +++++--- .github/workflows/release.yml | 6 +- CHANGELOG.md | 7 ++ CONTRIBUTING.md | 5 ++ build-all.sh | 47 ++++++++++ jedi/pyproject.toml | 3 +- npm/ide-docs/.yarnrc | 2 - npm/ide-docs/CHANGELOG.md | 114 ------------------------- npm/ide-docs/package.json | 2 +- npm/jedi/.yarnrc | 2 - npm/jedi/CHANGELOG.md | 99 --------------------- npm/jedi/build.py | 35 +++++--- pyproject.toml | 2 +- 17 files changed, 134 insertions(+), 275 deletions(-) create mode 100755 build-all.sh delete mode 100644 npm/ide-docs/.yarnrc delete mode 100644 npm/ide-docs/CHANGELOG.md delete mode 100644 npm/jedi/.yarnrc delete mode 100644 npm/jedi/CHANGELOG.md diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4a5bb8d9..9f9ce703 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 with: submodules: recursive - name: Install dependencies diff --git a/.github/workflows/jedi.yml b/.github/workflows/jedi.yml index 95bef3cf..cf6aa459 100644 --- a/.github/workflows/jedi.yml +++ b/.github/workflows/jedi.yml @@ -7,24 +7,9 @@ jobs: if: github.ref_type != 'tag' runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 - run: pipx install poetry - run: poetry install working-directory: ./jedi - run: poetry run pytest -vv working-directory: ./jedi - - publish: - if: github.ref_type == 'tag' && startsWith(github.ref_name, 'pybricks_jedi/') - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v3 - - run: pipx install poetry - - run: poetry install - working-directory: ./jedi - - run: poetry build - working-directory: ./jedi - - run: poetry publish - working-directory: ./jedi - env: - POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_PYBRICKS_JEDI_TOKEN }} diff --git a/.github/workflows/publish-ide-docs.yml b/.github/workflows/publish-ide-docs.yml index 15a4db00..1e17d372 100644 --- a/.github/workflows/publish-ide-docs.yml +++ b/.github/workflows/publish-ide-docs.yml @@ -2,22 +2,30 @@ name: Release @pybricks/ide-docs on: push: - tags: - - '@pybricks/ide-docs/**' + tags: + - 'v4.*' jobs: publish_ide_docs: runs-on: ubuntu-22.04 + permissions: + id-token: write steps: + - name: Get version from tag + run: | + VERSION="${GITHUB_REF_NAME#v}" + NPM_VERSION=$(echo "$VERSION" | sed 's/\([0-9]\)a\([0-9]\)/\1-alpha.\2/;s/\([0-9]\)b\([0-9]\)/\1-beta.\2/;s/\([0-9]\)rc\([0-9]\)/\1-rc.\2/') + echo "VERSION=$VERSION" >> $GITHUB_ENV + echo "NPM_VERSION=$NPM_VERSION" >> $GITHUB_ENV - name: Ubuntu packages run: | sudo apt-get update sudo apt-get install -y dvisvgm preview-latex-style texlive texlive-fonts-extra texlive-latex-extra - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 with: submodules: recursive - name: Set up Python 3.8 - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.8 - name: Install dependencies @@ -26,13 +34,13 @@ jobs: poetry run python -m pip install --upgrade pip poetry run python -m pip install --upgrade setuptools poetry install --only=doc - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v6 with: - node-version: '14.x' + node-version: '22.x' registry-url: 'https://registry.npmjs.org' + - run: npm version --no-git-tag-version "$NPM_VERSION" + working-directory: npm/ide-docs - run: yarn build working-directory: npm/ide-docs - - run: yarn publish + - run: npm publish working-directory: npm/ide-docs - env: - NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} diff --git a/.github/workflows/publish-images.yml b/.github/workflows/publish-images.yml index 28396e2a..0f152659 100644 --- a/.github/workflows/publish-images.yml +++ b/.github/workflows/publish-images.yml @@ -9,11 +9,11 @@ jobs: publish_ide_docs: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 # Setup .npmrc file to publish to npm - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: - node-version: '16.x' + node-version: '22.x' registry-url: 'https://registry.npmjs.org' - run: ./build.py working-directory: npm/images diff --git a/.github/workflows/publish-jedi.yml b/.github/workflows/publish-jedi.yml index 94bb518e..6d911b4a 100644 --- a/.github/workflows/publish-jedi.yml +++ b/.github/workflows/publish-jedi.yml @@ -2,22 +2,36 @@ name: Release @pybricks/jedi on: push: - tags: - - '@pybricks/jedi/**' + tags: + - 'v4.*' jobs: publish_jedi: runs-on: ubuntu-22.04 + permissions: + id-token: write steps: - - uses: actions/checkout@v3 - # Setup .npmrc file to publish to npm - - uses: actions/setup-node@v3 + - uses: actions/checkout@v6 + - name: Get version from tag + run: | + VERSION="${GITHUB_REF_NAME#v}" + NPM_VERSION=$(echo "$VERSION" | sed 's/\([0-9]\)a\([0-9]\)/\1-alpha.\2/;s/\([0-9]\)b\([0-9]\)/\1-beta.\2/;s/\([0-9]\)rc\([0-9]\)/\1-rc.\2/') + echo "VERSION=$VERSION" >> $GITHUB_ENV + echo "NPM_VERSION=$NPM_VERSION" >> $GITHUB_ENV + - name: Set up Python + uses: actions/setup-python@v5 with: - node-version: '16.x' + python-version: '3.11' + - name: Install poetry + run: pipx install poetry + - name: Set pybricks-jedi version + run: poetry version "$VERSION" + working-directory: jedi + - uses: actions/setup-node@v6 + with: + node-version: '22.x' registry-url: 'https://registry.npmjs.org' - - run: ./build.py + - run: ./build.py "$NPM_VERSION" working-directory: npm/jedi - - run: yarn publish + - run: npm publish working-directory: npm/jedi/build - env: - NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d5d3a2f2..47f48561 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,7 +1,7 @@ on: push: tags: - - 'v3.*' + - 'v4.*' name: Create release on GitHub and PyPI @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v6 with: submodules: true fetch-depth: 0 @@ -38,7 +38,7 @@ jobs: build_and_publish: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 - run: pipx run poetry build - run: pipx run poetry publish env: diff --git a/CHANGELOG.md b/CHANGELOG.md index c0781417..72972bb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ ## Unreleased +## 4.0.0b1 - 2026-05-29 + +### Changed + +- Updated API for firmware 4.0.0bx. See upstream changelog for details. +- Updated release pipeline to publish rtd, npm/docs and npm/jedi on tag. + ### Fixed - Fixed `DriveBase.angle` reporting an incorrect return type. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0510fc30..9f725a81 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -163,6 +163,11 @@ Linting: poetry run flake8 # check Python poetry run doc8 # check Restructured Text +Building all release artifacts (docs, jedi, npm packages): + + # Linux/macOS only + ./build-all.sh + [vscode]: https://code.visualstudio.com/ [git]: https://git-scm.com/ [python]: https://www.python.org/ diff --git a/build-all.sh b/build-all.sh new file mode 100755 index 00000000..d4ec940c --- /dev/null +++ b/build-all.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +# Build all release artifacts locally (equivalent to CI workflows, minus publish). +set -euo pipefail + +REPO_ROOT="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" + +# Activate the project venv so python/make/etc. all use it without poetry run +source "$REPO_ROOT/.venv/bin/activate" + +# Read version from pyproject.toml +VERSION=$(grep '^version = ' "$REPO_ROOT/pyproject.toml" | head -1 | sed 's/version = "\(.*\)"/\1/') +# Convert Python pre-release format (e.g. 4.0.0a1, 4.0.0b1, 4.0.0rc1) to npm semver (e.g. 4.0.0-alpha.1, 4.0.0-beta.1, 4.0.0-rc.1) +NPM_VERSION=$(echo "$VERSION" | sed 's/\([0-9]\)a\([0-9]\)/\1-alpha.\2/;s/\([0-9]\)b\([0-9]\)/\1-beta.\2/;s/\([0-9]\)rc\([0-9]\)/\1-rc.\2/') +echo "==> Building version $VERSION (npm: $NPM_VERSION)" + +# lint +echo "==> Linting" +cd "$REPO_ROOT" +flake8 +doc8 + +# pybricks-jedi wheel (from local source) +echo "==> Testing pybricks-jedi" +cd "$REPO_ROOT/jedi" +poetry run pytest -vv + +echo "==> Building pybricks-jedi wheel" +cd "$REPO_ROOT/jedi" +rm -rf dist/ +poetry build --format=wheel + +# @pybricks/jedi npm package +echo "==> Building @pybricks/jedi" +cd "$REPO_ROOT" +python3 npm/jedi/build.py "$NPM_VERSION" + +# @pybricks/ide-docs npm package +echo "==> Building @pybricks/ide-docs" +cd "$REPO_ROOT" +make -C doc clean +cd "$REPO_ROOT/npm/ide-docs" +yarn build + +echo "" +echo "Build complete." +echo " jedi npm package : npm/jedi/build/" +echo " ide-docs : npm/ide-docs/html/" diff --git a/jedi/pyproject.toml b/jedi/pyproject.toml index 6e2996ae..840a9f10 100644 --- a/jedi/pyproject.toml +++ b/jedi/pyproject.toml @@ -1,6 +1,7 @@ [tool.poetry] name = "pybricks_jedi" -version = "1.17.0" +# Version is set automatically at build time from the root pyproject.toml. Do not edit. +version = "0.0.0" description = "Code completion for Pybricks." authors = ["The Pybricks Authors "] license = "MIT" diff --git a/npm/ide-docs/.yarnrc b/npm/ide-docs/.yarnrc deleted file mode 100644 index 56a249f4..00000000 --- a/npm/ide-docs/.yarnrc +++ /dev/null @@ -1,2 +0,0 @@ -version-tag-prefix "@pybricks/ide-docs/v" -version-git-message "@pybricks/ide-docs v%s" diff --git a/npm/ide-docs/CHANGELOG.md b/npm/ide-docs/CHANGELOG.md deleted file mode 100644 index 35f4f112..00000000 --- a/npm/ide-docs/CHANGELOG.md +++ /dev/null @@ -1,114 +0,0 @@ -# Changelog - - - -## 2.20.0 - 2024-02-26 - -### Changed -- Updated docs to v3.6.0b5. - -## 2.19.0 - 2024-04-11 - -### Changed -- Updated docs to v3.5.0. - -## 2.18.0 - 2024-04-05 - -### Changed -- Updated docs to v3.5.0b2. - -## 2.17.0 - 2024-03-21 - -### Changed -- Updated docs to v3.5.0b1. - -## 2.16.0 - 2024-03-11 - -### Changed -- Updated docs to v3.4.0. - -## 2.15.0 - 2024-03-05 - -### Changed -- Updated docs to v3.4.0b5. - -## 2.14.0 - 2024-01-30 - -### Changed -- Updated docs to v3.4.0b3. - -## 2.13.0 - 2023-11-24 - -### Changed -- Updated docs to v3.4.0b1. - -## 2.12.0 - 2023-11-24 - -### Changed -- Updated docs to v3.3.0. - -## 2.11.0 - 2023-11-20 - -### Changed -- Updated docs to v3.3.0c1. - -## 2.10.0 - 2023-10-26 - -### Changed -- Updated docs to v3.3.0b9. - -## 2.9.0 - 2023-05-16 - -### Changed -- Updated docs to v3.3.0b5. - -## 2.8.0 - 2023-04-21 - -### Changed -- Updated docs to v3.3.0b4. - -## 2.7.0 - 2022-12-20 - -### Changed -- Updated docs to v3.2.0c2. - -## 2.6.0 - 2022-12-09 - -### Changed -- Updated docs to v3.2.0c1. - -## 2.5.0 - 2022-12-02 - -### Changed -- Updated docs to v3.2.0b6. - -## 2.4.0 - 2022-11-11 - -### Changed -- Updated docs to v3.2.0b5. - -## 2.3.0 - 2022-10-21 - -### Changed -- Updated docs to v3.2.0b4. - -## 2.2.0 - 2022-06-02 - -### Changed -- Updated docs to v3.2.0b1. - -## 2.1.0 - 2021-12-16 - -### Changed -- Updated docs to v3.1.0. - -## 2.0.1 - 2021-11-19 - -### Fixed -- Fixed link to Color Light Matrix page. - -## 2.0.0 - 2021-11-19 - -### Changed -- Changed package directory structure. -- Updated docs to v3.1.0rc1. diff --git a/npm/ide-docs/package.json b/npm/ide-docs/package.json index 63f4d06b..846d0f3b 100644 --- a/npm/ide-docs/package.json +++ b/npm/ide-docs/package.json @@ -1,6 +1,6 @@ { "name": "@pybricks/ide-docs", - "version": "2.20.0", + "version": "0.0.0", "description": "Special build of Pybricks API docs for embedding in an IDE.", "repository": { "type": "git", diff --git a/npm/jedi/.yarnrc b/npm/jedi/.yarnrc deleted file mode 100644 index 4b6d0e16..00000000 --- a/npm/jedi/.yarnrc +++ /dev/null @@ -1,2 +0,0 @@ -version-tag-prefix "@pybricks/jedi/v" -version-git-message "@pybricks/jedi v%s" diff --git a/npm/jedi/CHANGELOG.md b/npm/jedi/CHANGELOG.md deleted file mode 100644 index 555c4032..00000000 --- a/npm/jedi/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ -# Changelog - - - -## Unreleased - -## 1.17.0 - 2025-02-26 - -### Changed -- Updated `pybricks_jedi` Python package to v1.17.0. - -## 1.16.0 - 2024-04-05 - -### Changed -- Updated `pybricks_jedi` Python package to v1.16.0. - -## 1.15.0 - 2024-03-21 - -### Changed -- Updated `pybricks_jedi` Python package to v1.15.0. - -## 1.14.0 - 2024-03-05 - -### Changed -- Updated `pybricks_jedi` Python package to v1.14.0. - -## 1.13.0 - 2024-01-30 - -### Changed -- Updated `pybricks_jedi` Python package to v1.13.0. - -### Changed -- Updated `pybricks_jedi` Python package to v1.12.0. - -## 1.12.0 - 2023-11-24 - -### Changed -- Updated `pybricks_jedi` Python package to v1.12.0. - -## 1.11.0 - 2023-11-20 - -### Changed -- Updated `pybricks_jedi` Python package to v1.11.0. - -## 1.10.0 - 2023-10-26 - -### Changed -- Updated `pybricks_jedi` Python package to v1.10.0. - -## 1.9.0 - 2023-05-16 - -### Changed -- Updated `pybricks_jedi` Python package to v1.9.0. - -## 1.8.0 - 2023-04-21 - -### Changed -- Updated `pybricks_jedi` Python package to v1.8.0. - -## 1.7.0 - 2022-12-28 - -### Changed -- Updated `pybricks_jedi` Python package to v1.7.0. - -## 1.6.0 - 2022-12-09 - -### Changed -- Updated `pybricks_jedi` Python package to v1.6.0. - -## 1.5.0 - 2022-12-02 - -### Changed -- Updated `pybricks_jedi` Python package to v1.5.0. - -## 1.4.0 - 2022-12-02 - -### Changed -- Updated `pybricks_jedi` Python package to v1.4.0. - -## 1.3.0 - 2022-11-11 - -### Changed -- Updated `pybricks_jedi` Python package to v1.3.0. - -## 1.2.0 - 2022-10-21 - -### Changed -- Updated `pybricks_jedi` Python package to v1.2.0. - -## 1.0.1 - 2022-09-07 - -### Fixed -- Fixed exports. -- Fixed missing README and CHANGELOG. - -## 1.0.0 - 2022-09-07 - -### Added -- Added new @pybricks/jedi package. diff --git a/npm/jedi/build.py b/npm/jedi/build.py index df416544..4390c1d4 100755 --- a/npm/jedi/build.py +++ b/npm/jedi/build.py @@ -8,11 +8,19 @@ import sys import zipfile -BUILD_DIR = (pathlib.Path(__file__).parent / "build").resolve() +if len(sys.argv) != 2: + print(f"Usage: {sys.argv[0]} ", file=sys.stderr) + sys.exit(1) + +VERSION = sys.argv[1] + +ROOT_DIR = pathlib.Path(__file__).parent.resolve() +JEDI_SRC_DIR = (ROOT_DIR / ".." / ".." / "jedi").resolve() +BUILD_DIR = (ROOT_DIR / "build").resolve() package_json = { "name": "@pybricks/jedi", - "version": "1.17.0", + "version": VERSION, "description": "Binary distribution of pybricks-jedi Python package and dependencies for use with Pyodide.", "repository": { "type": "git", @@ -30,7 +38,14 @@ shutil.rmtree(BUILD_DIR, True) BUILD_DIR.mkdir() -# download package and dependencies (*.whl files) +# build pybricks-jedi wheel from local source +subprocess.check_call(["poetry", "build", "--format=wheel"], cwd=JEDI_SRC_DIR) + +# copy locally built wheel to build dir +for whl in (JEDI_SRC_DIR / "dist").glob("pybricks_jedi-*.whl"): + shutil.copy(whl, BUILD_DIR) + +# download transitive dependencies from PyPI, using the local wheel to satisfy pybricks-jedi itself subprocess.check_call( [ sys.executable, @@ -38,7 +53,8 @@ "pip", "download", "--only-binary=any", - "pybricks-jedi==1.17.0", + f"--find-links={BUILD_DIR}", + "pybricks-jedi", ], cwd=BUILD_DIR, ) @@ -79,13 +95,8 @@ def is_dist_info_license(info: zipfile.ZipInfo): license_identifiers.add(license) - # TODO: The LICENSE workaround for the pybricks-jedi package can be - # dropped after the next release of that package if whl.name.startswith("pybricks_jedi-"): - LICENSE = ( - pathlib.Path(__file__).parent.parent.parent / "jedi" / "LICENSE" - ).resolve() - with open(LICENSE) as lf: + with open(JEDI_SRC_DIR / "LICENSE") as lf: license_text[whl.name] = lf.read() else: try: @@ -126,7 +137,5 @@ def is_dist_info_license(info: zipfile.ZipInfo): # copy additional files -ROOT_DIR = (pathlib.Path(__file__).parent).resolve() - -for file in "README.md", "CHANGELOG.md": +for file in ("README.md",): shutil.copy(ROOT_DIR / file, BUILD_DIR / file) diff --git a/pyproject.toml b/pyproject.toml index 43feffe9..9572f904 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pybricks" -version = "3.6.1" +version = "4.0.0b1" description = "Documentation and user-API stubs for Pybricks MicroPython" authors = ["The Pybricks Authors "] maintainers = ["Laurens Valk ", "David Lechner " ] From 614453aa32faf704b8ac93a0b3597ff86a0ac9ca Mon Sep 17 00:00:00 2001 From: Laurens Valk Date: Fri, 29 May 2026 21:35:04 +0200 Subject: [PATCH 2/5] .github/workflows: Fix permissions and npm version tags. --- .github/workflows/publish-ide-docs.yml | 13 ++++++++----- .github/workflows/publish-jedi.yml | 13 ++++++++----- CHANGELOG.md | 25 +++++++++++++++++++++++++ npm/ide-docs/package.json | 2 +- npm/images/build.py | 2 +- npm/jedi/build.py | 2 +- pyproject.toml | 2 +- 7 files changed, 45 insertions(+), 14 deletions(-) diff --git a/.github/workflows/publish-ide-docs.yml b/.github/workflows/publish-ide-docs.yml index 1e17d372..038642cf 100644 --- a/.github/workflows/publish-ide-docs.yml +++ b/.github/workflows/publish-ide-docs.yml @@ -5,11 +5,13 @@ on: tags: - 'v4.*' +permissions: + id-token: write + contents: read + jobs: publish_ide_docs: runs-on: ubuntu-22.04 - permissions: - id-token: write steps: - name: Get version from tag run: | @@ -17,6 +19,7 @@ jobs: NPM_VERSION=$(echo "$VERSION" | sed 's/\([0-9]\)a\([0-9]\)/\1-alpha.\2/;s/\([0-9]\)b\([0-9]\)/\1-beta.\2/;s/\([0-9]\)rc\([0-9]\)/\1-rc.\2/') echo "VERSION=$VERSION" >> $GITHUB_ENV echo "NPM_VERSION=$NPM_VERSION" >> $GITHUB_ENV + echo "NPM_TAG=$(echo "$NPM_VERSION" | grep -q '-' && echo 'next' || echo 'latest')" >> $GITHUB_ENV - name: Ubuntu packages run: | sudo apt-get update @@ -34,13 +37,13 @@ jobs: poetry run python -m pip install --upgrade pip poetry run python -m pip install --upgrade setuptools poetry install --only=doc - - uses: actions/setup-node@v6 + - uses: actions/setup-node@v4 with: - node-version: '22.x' + node-version: '24' registry-url: 'https://registry.npmjs.org' - run: npm version --no-git-tag-version "$NPM_VERSION" working-directory: npm/ide-docs - run: yarn build working-directory: npm/ide-docs - - run: npm publish + - run: npm publish --tag "$NPM_TAG" working-directory: npm/ide-docs diff --git a/.github/workflows/publish-jedi.yml b/.github/workflows/publish-jedi.yml index 6d911b4a..a293fb9a 100644 --- a/.github/workflows/publish-jedi.yml +++ b/.github/workflows/publish-jedi.yml @@ -5,11 +5,13 @@ on: tags: - 'v4.*' +permissions: + id-token: write + contents: read + jobs: publish_jedi: runs-on: ubuntu-22.04 - permissions: - id-token: write steps: - uses: actions/checkout@v6 - name: Get version from tag @@ -18,6 +20,7 @@ jobs: NPM_VERSION=$(echo "$VERSION" | sed 's/\([0-9]\)a\([0-9]\)/\1-alpha.\2/;s/\([0-9]\)b\([0-9]\)/\1-beta.\2/;s/\([0-9]\)rc\([0-9]\)/\1-rc.\2/') echo "VERSION=$VERSION" >> $GITHUB_ENV echo "NPM_VERSION=$NPM_VERSION" >> $GITHUB_ENV + echo "NPM_TAG=$(echo "$NPM_VERSION" | grep -q '-' && echo 'next' || echo 'latest')" >> $GITHUB_ENV - name: Set up Python uses: actions/setup-python@v5 with: @@ -27,11 +30,11 @@ jobs: - name: Set pybricks-jedi version run: poetry version "$VERSION" working-directory: jedi - - uses: actions/setup-node@v6 + - uses: actions/setup-node@v4 with: - node-version: '22.x' + node-version: '24' registry-url: 'https://registry.npmjs.org' - run: ./build.py "$NPM_VERSION" working-directory: npm/jedi - - run: npm publish + - run: npm publish --tag "$NPM_TAG" working-directory: npm/jedi/build diff --git a/CHANGELOG.md b/CHANGELOG.md index 72972bb3..c1814a60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,31 @@ ## Unreleased +## 4.0.0b4 - 2026-05-29 + +### Changed + +- Tag npm prereleases. + +## 4.0.0b4 - 2026-05-29 + +### Changed + +- Bump node version. + +## 4.0.0b3 - 2026-05-29 + +### Changed + +- Fixed NPM publishing permissions. + +## 4.0.0b2 - 2026-05-29 + +### Changed + +- Change NPM publishing to trusted publishers. + + ## 4.0.0b1 - 2026-05-29 ### Changed diff --git a/npm/ide-docs/package.json b/npm/ide-docs/package.json index 846d0f3b..f5881a4d 100644 --- a/npm/ide-docs/package.json +++ b/npm/ide-docs/package.json @@ -4,7 +4,7 @@ "description": "Special build of Pybricks API docs for embedding in an IDE.", "repository": { "type": "git", - "url": "https://github.com/pybricks/pybricks-api", + "url": "git+https://github.com/pybricks/pybricks-api.git", "directory": "npm/ide-docs" }, "publishConfig": { diff --git a/npm/images/build.py b/npm/images/build.py index ea6d9f4e..838ffaf1 100755 --- a/npm/images/build.py +++ b/npm/images/build.py @@ -18,7 +18,7 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/pybricks/pybricks-api", + "url": "git+https://github.com/pybricks/pybricks-api.git", "directory": "npm/images", }, "publishConfig": {"registry": "https://registry.npmjs.org", "access": "public"}, diff --git a/npm/jedi/build.py b/npm/jedi/build.py index 4390c1d4..99f32743 100755 --- a/npm/jedi/build.py +++ b/npm/jedi/build.py @@ -24,7 +24,7 @@ "description": "Binary distribution of pybricks-jedi Python package and dependencies for use with Pyodide.", "repository": { "type": "git", - "url": "https://github.com/pybricks/pybricks-api", + "url": "git+https://github.com/pybricks/pybricks-api.git", "directory": "npm/jedi", }, "publishConfig": {"registry": "https://registry.npmjs.org", "access": "public"}, diff --git a/pyproject.toml b/pyproject.toml index 9572f904..7419a279 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pybricks" -version = "4.0.0b1" +version = "4.0.0b5" description = "Documentation and user-API stubs for Pybricks MicroPython" authors = ["The Pybricks Authors "] maintainers = ["Laurens Valk ", "David Lechner " ] From 2926b4af7121c28898c076ee569fc38373d1404f Mon Sep 17 00:00:00 2001 From: Laurens Valk Date: Sat, 30 May 2026 09:40:09 +0200 Subject: [PATCH 3/5] npm/jedi: Build pybricks-api from source. Now that we use a single release pipeline, the API itself might not yet be on PyPI by the time we build jedi, so we build it locally. We'll still keep the API docs on PyPI so users can have local autocomplete, but that path is no longer a dependency for building jedi. Also explain CHANGELOG synchronization with firmware repo. --- .github/workflows/publish-jedi.yml | 9 +- .gitignore | 1 + CHANGELOG.md | 340 +---------------------------- build-all.sh | 13 +- {npm/jedi => jedi}/README.md | 0 {npm/jedi => jedi}/build.py | 41 ++-- jedi/pyproject.toml | 3 +- pyproject.toml | 2 +- 8 files changed, 44 insertions(+), 365 deletions(-) rename {npm/jedi => jedi}/README.md (100%) rename {npm/jedi => jedi}/build.py (75%) mode change 100755 => 100644 diff --git a/.github/workflows/publish-jedi.yml b/.github/workflows/publish-jedi.yml index a293fb9a..b0604d9f 100644 --- a/.github/workflows/publish-jedi.yml +++ b/.github/workflows/publish-jedi.yml @@ -30,11 +30,14 @@ jobs: - name: Set pybricks-jedi version run: poetry version "$VERSION" working-directory: jedi + - name: Set pybricks version and update jedi dependency pin + run: | + poetry version "$VERSION" + sed -i "s/^pybricks = \".*\"/pybricks = \"$VERSION\"/" jedi/pyproject.toml - uses: actions/setup-node@v4 with: node-version: '24' registry-url: 'https://registry.npmjs.org' - - run: ./build.py "$NPM_VERSION" - working-directory: npm/jedi + - run: python jedi/build.py "$NPM_VERSION" - run: npm publish --tag "$NPM_TAG" - working-directory: npm/jedi/build + working-directory: jedi/npm-build diff --git a/.gitignore b/.gitignore index 93232f33..a0999f2b 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ build/ build-*/ _build/ +npm-build/ # Tests ###################### diff --git a/CHANGELOG.md b/CHANGELOG.md index c1814a60..b2a30a8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,339 +1,13 @@ # Changelog - +See [pybricks-micropython/CHANGELOG.md][changelog] for the changes in each release. -## Unreleased +This repository is frequently updated to stay in sync with the implementation. -## 4.0.0b4 - 2026-05-29 +Major and minor versions are synchronized with `pybricks-micropython`, which +leads. Patch versions and prerelease version numbers may differ, as they may +be bumped for every small change or typo in the docs. -### Changed +The version for this repository is also used for the `@pybricks/jedi` and `@pybricks/ide-docs` npm packages. -- Tag npm prereleases. - -## 4.0.0b4 - 2026-05-29 - -### Changed - -- Bump node version. - -## 4.0.0b3 - 2026-05-29 - -### Changed - -- Fixed NPM publishing permissions. - -## 4.0.0b2 - 2026-05-29 - -### Changed - -- Change NPM publishing to trusted publishers. - - -## 4.0.0b1 - 2026-05-29 - -### Changed - -- Updated API for firmware 4.0.0bx. See upstream changelog for details. -- Updated release pipeline to publish rtd, npm/docs and npm/jedi on tag. - -### Fixed - -- Fixed `DriveBase.angle` reporting an incorrect return type. - -## 3.6.1 - 2025-05-01 - -### Fixed - -- Fixed missing `hub.system.info` method on some hubs. - -## 3.6.0 - 2025-03-11 - -### Changed - -- Update API for firmware 3.6.0. See upstream changelog for details. - -## 3.6.0b5 - 2025-02-26 - -### Changed - -- Update API for firmware 3.6.0b5. See upstream changelog for details. - -## 3.5.0 - 2024-04-11 - -### Changed -- Bump version to 3.5.0 without additional changes. - -## 3.5.0b2 - 2024-04-05 - -### Added - -- Added `pybricks.pupdevices.Remote.disconnect` method. -- Added blocks for `up`, `ready` and `stationary` for IMUs. -- Added `last` and `chr` parameters to `read_input_byte` and add blocks. -- Added block for the `in` operation. -- Add double ternary block. - -## 3.5.0b1 - 2024-03-11 - -### Added - -- Added `XboxController.rumble` method. -- Added block icons for `hub.system.set_stop_button` and `hub.system.shutdown`. -- Added program stop block (`raise SystemExit`). - -## 3.4.1 - 2024-03-11 - -### Fixed - -- Fixed Read The Docs virtual environment workflow. - -## 3.4.0 - 2024-03-11 - -### Changed - -- Update list block screenshots to match implementation. - -## 3.4.0b5 - 2024-03-05 - -### Changed - -- Updates for v3.4.0b3 firmware (out of sync with docs). -- Changed `hub.button` to `hub.buttons` on single button hubs. Access via - `hub.button` will keep working in the firmware for backwards compatibility. - -## 3.4.0b4 - 2024-02-14 - -### Added - -- Added `pybricks.iodevices.XboxController` class. - -### Changed - -- Changed `buttons.pressed` return type to set. - -## 3.4.0b3 - 2024-01-30 - -### Added - -- Added `pybricks.robotics.Car` class. - -### Changed - -- Changed `pybricks.robotics.DriveBase` icon to two wheels instead of steering - wheel, which will be used for the new car class. - -## 3.4.0b2 - 2023-11-28 - -### Changed -- Include first batch of block coding images. - -## 3.3.0 - 2023-11-24 - -### Changed -- Bump beta version to release version with no further changes. - -## 3.3.0c1 - 2023-11-20 - -### Added -- Enabled tilt and orientation config for `MoveHub()`. -- Documented `Motor.close()` - -## Fixed -- Fixed missing awaitable for `Remote.light` and LWP3 writes. - -## 3.3.0b9 - 2023-10-26 - -### Changed -- Changed the beta feature for using the hub's gyro. Gyro control can now be - toggled using `use_gyro` instead of using a separate `GyroDriveBase` class. -- Documentation updates to match firmware 3.3.0b5--3.3.0b9 updates. - -### Added -- Added `set` to `ubuiltins` module. -- Basic multitasking docs. -- Awaitable keyword for awaitable methods and functions. - -## 3.3.0b5 - 2023-05-16 - -### Added -- Documented new `hub.ble` methods. - -## 3.3.0b4 - 2023-04-21 - -### Added -- Documented `integral_deadzone` in `Control.pid()`. -- Documented `Motor.model`. This can be used to view the estimated motor - state and change its settings. -- Added `rotation`, `orientation`, `ready`, `stationary` and `settings` methods - to `IMU` class. -- Added `GyroDriveBase` class to `pybricks.robotics`. - -### Changed -- Change implementation status of `IMU.heading` and `IMU.reset_heading`. They - are now implemented, with some limitations as noted in a note box. -- Moved `Matrix` and `vector` from `pybricks.geometry` to `pybricks.tools`. -- Moved `Axis` from `pybricks.geometry` to `pybricks.parameters`. - -### Removed -- Removed `pybricks.geometry` module. - -## 3.2.0 - 2022-12-20 - -### Changed -- Changed module TOC headings to make it easier to find things. - -## 3.2.0c1 - 2022-12-09 - -### Changed -- Updated "front" side of the Technic Hub to be consistent with - the Prime Hub. - -## 3.2.0b6 - 2022-12-02 - -### Added -- Documented ``Stop.NONE`` and ``Stop.COAST_SMART``. -- Documented ``ujson`` module. -- Added `done` and `stalled` methods for `DriveBase`. - -### Changed -- Changed `PrimeHub.display.image()` to `PrimeHub.display.icon()` and renamed - its kwarg from `image` to `icon`. -- Improved presentation and docstrings of the ``ubuiltins`` and other - MicroPython modules -- Moved the random numbers example for Move Hub to the Move Hub page. -- Moved `done()`, `stalled()`, `load()` from `Control` to `Motor` object. - -## 3.2.0b5 - 2022-11-11 - -### Fixed -- Fixed Jedi code completion for `Color` and `Icon` classes in `pybricks.parameters`. - -## 3.2.0b4 - 2022-10-21 - -### Added -- Code auto-completion for `EssentialHub`. -- Added `System.storage` method. - -### Fixed -- Fixed some type hints in `parameters` submodule. - -## 3.2.0b1-r3 - 2022-06-26 - -### Fixed -- Fixed more type hints and improved compatibility with jedi. - -## 3.2.0b1-r2 - 2022-06-24 - -### Changed -- Moved remaining type hints from `.pyi` files to the python stub modules, and - fixed numerous errors in the type hints throughout. - -## 3.2.0b1-r1 - 2022-06-09 - -### Added -- Added `__init__.py` to `pybricks` package. - -## 3.2.0b1 - 2022-06-02 - -### Added -- Code auto-completion for `hub.charger`, `hub.imu` and `hub.system`. -- Moved typing from several `.pyi` files to the actual python modules. - -### Fixed -- Fixed code completion for `DCMotor` and `Motor` classes in MS Python VS Code extension. -- Fixed missing `DCMotor` type in `ev3devices`. -- Fixed type hint for `Motor.reset_angle()` in `pupdevices`. - -### Changed -- Setter for acceleration can now also be used to set acceleration and - deceleration to different values, using a two-valued tuple. - -## 3.1.0 - 2021-12-16 - -### Added -- Added maximum voltage setter for `DCMotor` and `Motor`. -- Documented `DriveBase.curve()` method. - -### Changed -- Removed `duty` setting from `Control.limits` method. -- Removed `integral_range` setting from `Control.pid` method. - -### Fixed -- Fixed link to Color Light Matrix page. -- Fixed link to Inventor Hub page. - -## 3.1.0rc1 - 2021-11-19 - -### Added -- Added `ColorLightMatrix` class. -- Added `LWP3Device` class. - -**NOTE: version number after this point were from JavaScript package and do -not correspond to Pybricks firmware version numbers.** - -## 1.6.0 - 2021-08-30 - -### Added -- MicroPython module documentation. -- Examples for hub system functions including stop button and shutdown. - -### Changed -- Build IDE docs as main docs with minor changes, instead of a completely - separate build. -- Moved motor control documentation to the motor page. - -## 1.5.0 - 2021-07-01 - -### Added -- Documentation for Powered Up Remote Control. - -## 1.4.0 - 2021-06-23 - -### Added -- Enabled beta content that was hidden for the 3.0 release. -- Added notice about using the latest beta version. - -## 1.3.3 - 2021-05-21 - -### Changed -- Match example snippet styling to IDE. -- Add more examples. - -## 1.3.2 - 2021-04-26 - -### Changed -- Theme style fixes. -- Example code fixes -- Match doc version to firmware version. - -## 1.3.1 - 2021-04-12 - -### Changed -- Upgrade sphinx and rtd-theme to fix style issues. - -## 1.3.0 - 2021-04-12 - -### Removed -- Removed features which not be in the official 3.0 release. These features - are still in beta. They'll come back in future releases once tested. - -## 1.2.0 - 2021-04-09 - -### Changed -- Moved installation guide to external site. - -## 1.1.1 - 2021-02-14 - -### Added -- Added installation guide. -- Various documentation fixes. - -## 1.1.0 - 2021-01-28 - -### Added -- Scrollbar styling. - -## 1.0.0 - 2021-01-25 - -### Added -- Sphinx build output. +[changelog]: https://github.com/pybricks/pybricks-micropython/blob/master/CHANGELOG.md diff --git a/build-all.sh b/build-all.sh index d4ec940c..97d99777 100755 --- a/build-all.sh +++ b/build-all.sh @@ -19,20 +19,15 @@ cd "$REPO_ROOT" flake8 doc8 -# pybricks-jedi wheel (from local source) +# pybricks-jedi tests echo "==> Testing pybricks-jedi" cd "$REPO_ROOT/jedi" poetry run pytest -vv -echo "==> Building pybricks-jedi wheel" -cd "$REPO_ROOT/jedi" -rm -rf dist/ -poetry build --format=wheel - # @pybricks/jedi npm package echo "==> Building @pybricks/jedi" -cd "$REPO_ROOT" -python3 npm/jedi/build.py "$NPM_VERSION" +cd "$REPO_ROOT/jedi" +python3 build.py "$NPM_VERSION" # @pybricks/ide-docs npm package echo "==> Building @pybricks/ide-docs" @@ -43,5 +38,5 @@ yarn build echo "" echo "Build complete." -echo " jedi npm package : npm/jedi/build/" +echo " jedi npm package : jedi/npm-build/" echo " ide-docs : npm/ide-docs/html/" diff --git a/npm/jedi/README.md b/jedi/README.md similarity index 100% rename from npm/jedi/README.md rename to jedi/README.md diff --git a/npm/jedi/build.py b/jedi/build.py old mode 100755 new mode 100644 similarity index 75% rename from npm/jedi/build.py rename to jedi/build.py index 99f32743..d0285a13 --- a/npm/jedi/build.py +++ b/jedi/build.py @@ -1,4 +1,5 @@ #!/usr/bin/env python3 +# Builds the @pybricks/jedi npm package into npm-build/. import email.parser import json @@ -6,6 +7,7 @@ import shutil import subprocess import sys +import tomllib import zipfile if len(sys.argv) != 2: @@ -15,8 +17,8 @@ VERSION = sys.argv[1] ROOT_DIR = pathlib.Path(__file__).parent.resolve() -JEDI_SRC_DIR = (ROOT_DIR / ".." / ".." / "jedi").resolve() -BUILD_DIR = (ROOT_DIR / "build").resolve() +REPO_ROOT_DIR = (ROOT_DIR / "..").resolve() +BUILD_DIR = ROOT_DIR / "npm-build" package_json = { "name": "@pybricks/jedi", @@ -25,7 +27,7 @@ "repository": { "type": "git", "url": "git+https://github.com/pybricks/pybricks-api.git", - "directory": "npm/jedi", + "directory": "jedi", }, "publishConfig": {"registry": "https://registry.npmjs.org", "access": "public"}, } @@ -38,24 +40,28 @@ shutil.rmtree(BUILD_DIR, True) BUILD_DIR.mkdir() +# build pybricks api wheel from local source so pip uses it instead of fetching from PyPI +subprocess.check_call(["poetry", "build", "--format=wheel"], cwd=REPO_ROOT_DIR) + +# copy locally built pybricks wheel to build dir +for whl in (REPO_ROOT_DIR / "dist").glob("pybricks-*.whl"): + shutil.copy(whl, BUILD_DIR) + # build pybricks-jedi wheel from local source -subprocess.check_call(["poetry", "build", "--format=wheel"], cwd=JEDI_SRC_DIR) +subprocess.check_call(["poetry", "build", "--format=wheel"], cwd=ROOT_DIR) # copy locally built wheel to build dir -for whl in (JEDI_SRC_DIR / "dist").glob("pybricks_jedi-*.whl"): +for whl in (ROOT_DIR / "dist").glob("pybricks_jedi-*.whl"): shutil.copy(whl, BUILD_DIR) -# download transitive dependencies from PyPI, using the local wheel to satisfy pybricks-jedi itself +# download transitive dependencies using versions pinned in poetry.lock +transitive_packages = ["jedi", "parso", "docstring-parser", "typing-extensions"] +with open(ROOT_DIR / "poetry.lock", "rb") as f: + lock = tomllib.load(f) +lock_versions = {pkg["name"]: pkg["version"] for pkg in lock["package"]} +transitive = [f"{pkg}=={lock_versions[pkg]}" for pkg in transitive_packages] subprocess.check_call( - [ - sys.executable, - "-m", - "pip", - "download", - "--only-binary=any", - f"--find-links={BUILD_DIR}", - "pybricks-jedi", - ], + [sys.executable, "-m", "pip", "download", "--only-binary=any"] + transitive, cwd=BUILD_DIR, ) @@ -96,7 +102,7 @@ def is_dist_info_license(info: zipfile.ZipInfo): license_identifiers.add(license) if whl.name.startswith("pybricks_jedi-"): - with open(JEDI_SRC_DIR / "LICENSE") as lf: + with open(ROOT_DIR / "LICENSE") as lf: license_text[whl.name] = lf.read() else: try: @@ -137,5 +143,4 @@ def is_dist_info_license(info: zipfile.ZipInfo): # copy additional files -for file in ("README.md",): - shutil.copy(ROOT_DIR / file, BUILD_DIR / file) +shutil.copy(ROOT_DIR / "README.md", BUILD_DIR / "README.md") diff --git a/jedi/pyproject.toml b/jedi/pyproject.toml index 840a9f10..8635aff7 100644 --- a/jedi/pyproject.toml +++ b/jedi/pyproject.toml @@ -8,7 +8,8 @@ license = "MIT" [tool.poetry.dependencies] python = ">= 3.10, < 3.12" -pybricks = "3.6.0b5" +# Version is set automatically at build time from the root pyproject.toml. Do not edit. +pybricks = "0.0.0" jedi = "0.18.1" typing-extensions = "4.2.0" docstring-parser = "0.14.1" diff --git a/pyproject.toml b/pyproject.toml index 7419a279..fdc703d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pybricks" -version = "4.0.0b5" +version = "4.0.0b9" description = "Documentation and user-API stubs for Pybricks MicroPython" authors = ["The Pybricks Authors "] maintainers = ["Laurens Valk ", "David Lechner " ] From cd58dde7736835b46ecc527ef310e72f7b937081 Mon Sep 17 00:00:00 2001 From: Laurens Valk Date: Sat, 30 May 2026 11:40:00 +0200 Subject: [PATCH 4/5] v4.0.0b10 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fdc703d4..052c56ad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pybricks" -version = "4.0.0b9" +version = "4.0.0b10" description = "Documentation and user-API stubs for Pybricks MicroPython" authors = ["The Pybricks Authors "] maintainers = ["Laurens Valk ", "David Lechner " ] From a402ae02e90f87d1825ad302f8a95f38ab473ef8 Mon Sep 17 00:00:00 2001 From: Laurens Valk Date: Sat, 30 May 2026 11:44:55 +0200 Subject: [PATCH 5/5] poetry: Update locks. 0.0.0 can't be pinned. --- jedi/poetry.lock | 32 ++++++++++-- jedi/pyproject.toml | 4 +- poetry.lock | 118 +++++++++++++++++++++++++------------------- 3 files changed, 97 insertions(+), 57 deletions(-) diff --git a/jedi/poetry.lock b/jedi/poetry.lock index 1359fc49..71af212d 100644 --- a/jedi/poetry.lock +++ b/jedi/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. [[package]] name = "black" @@ -6,6 +6,7 @@ version = "22.12.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, @@ -40,6 +41,7 @@ version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -54,6 +56,8 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +markers = "sys_platform == \"win32\" or platform_system == \"Windows\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -65,6 +69,7 @@ version = "0.14.1" description = "Parse Python docstrings in reST, Google and Numpydoc format" optional = false python-versions = ">=3.6,<4.0" +groups = ["main"] files = [ {file = "docstring_parser-0.14.1-py3-none-any.whl", hash = "sha256:14ac6ec1f1ba6905c4d8cb90fd0bc55394f5678183752c90e44812bf28d7a515"}, {file = "docstring_parser-0.14.1.tar.gz", hash = "sha256:2c77522e31b7c88b1ab457a1f3c9ae38947ad719732260ba77ee8a3deb58622a"}, @@ -76,6 +81,8 @@ version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["dev"] +markers = "python_version == \"3.10\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -90,6 +97,7 @@ version = "4.0.1" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"}, {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"}, @@ -106,6 +114,7 @@ version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -117,6 +126,7 @@ version = "0.18.1" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, @@ -135,6 +145,7 @@ version = "0.6.1" description = "McCabe checker, plugin for flake8" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, @@ -146,6 +157,7 @@ version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, @@ -157,6 +169,7 @@ version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, @@ -168,6 +181,7 @@ version = "0.8.4" description = "A Python Parser" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, @@ -183,6 +197,7 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -194,6 +209,7 @@ version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -210,6 +226,7 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -221,10 +238,11 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pybricks" -version = "3.6.0b5" +version = "4.0.0b10" description = "Documentation and user-API stubs for Pybricks MicroPython" optional = false python-versions = "^3.8" +groups = ["main", "dev"] files = [] develop = true @@ -238,6 +256,7 @@ version = "2.8.0" description = "Python style guide checker" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["dev"] files = [ {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"}, {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"}, @@ -249,6 +268,7 @@ version = "2.4.0" description = "passive checker of Python programs" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["dev"] files = [ {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"}, {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, @@ -260,6 +280,7 @@ version = "7.4.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, @@ -282,6 +303,8 @@ version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_full_version < \"3.11.0a7\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, @@ -323,12 +346,13 @@ version = "4.2.0" description = "Backported and Experimental Type Hints for Python 3.7+" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, ] [metadata] -lock-version = "2.0" +lock-version = "2.1" python-versions = ">= 3.10, < 3.12" -content-hash = "0a796ac6867c41e8cf0ce289beca1cebb4066b622c2c538c11589413dcb579af" +content-hash = "6efcdeb3ce02cdd64b69d4d58466e0c7241681aa7f71432bf1a1d53764f305c0" diff --git a/jedi/pyproject.toml b/jedi/pyproject.toml index 8635aff7..6a82502d 100644 --- a/jedi/pyproject.toml +++ b/jedi/pyproject.toml @@ -9,12 +9,12 @@ license = "MIT" [tool.poetry.dependencies] python = ">= 3.10, < 3.12" # Version is set automatically at build time from the root pyproject.toml. Do not edit. -pybricks = "0.0.0" +pybricks = "*" jedi = "0.18.1" typing-extensions = "4.2.0" docstring-parser = "0.14.1" -[tool.poetry.dev-dependencies] +[tool.poetry.group.dev.dependencies] pytest = "^7.1.2" black = "^22.3.0" flake8 = "^4.0.1" diff --git a/poetry.lock b/poetry.lock index ba59682c..cc1be335 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,12 +1,12 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. [[package]] name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" -category = "dev" optional = false python-versions = ">=3.6" +groups = ["doc"] files = [ {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, @@ -16,9 +16,9 @@ files = [ name = "babel" version = "2.13.0" description = "Internationalization utilities" -category = "dev" optional = false python-versions = ">=3.7" +groups = ["doc"] files = [ {file = "Babel-2.13.0-py3-none-any.whl", hash = "sha256:fbfcae1575ff78e26c7449136f1abbefc3c13ce542eeb13d43d50d8b047216ec"}, {file = "Babel-2.13.0.tar.gz", hash = "sha256:04c3e2d28d2b7681644508f836be388ae49e0cfe91465095340395b60d00f210"}, @@ -34,9 +34,9 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] name = "black" version = "22.12.0" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.7" +groups = ["lint"] files = [ {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, @@ -70,9 +70,9 @@ uvloop = ["uvloop (>=0.15.2)"] name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "dev" optional = false python-versions = ">=3.6" +groups = ["doc"] files = [ {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, @@ -82,9 +82,9 @@ files = [ name = "chardet" version = "5.2.0" description = "Universal encoding detector for Python 3" -category = "dev" optional = false python-versions = ">=3.7" +groups = ["lint"] files = [ {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, @@ -94,9 +94,9 @@ files = [ name = "charset-normalizer" version = "3.3.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "dev" optional = false python-versions = ">=3.7.0" +groups = ["doc"] files = [ {file = "charset-normalizer-3.3.1.tar.gz", hash = "sha256:d9137a876020661972ca6eec0766d81aef8a5627df628b664b234b73396e727e"}, {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8aee051c89e13565c6bd366813c386939f8e928af93c29fda4af86d25b73d8f8"}, @@ -194,9 +194,9 @@ files = [ name = "click" version = "8.1.7" description = "Composable command line interface toolkit" -category = "dev" optional = false python-versions = ">=3.7" +groups = ["lint"] files = [ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, @@ -209,21 +209,22 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["doc", "lint"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +markers = {doc = "sys_platform == \"win32\"", lint = "platform_system == \"Windows\""} [[package]] name = "doc8" version = "0.8.1" description = "Style checker for Sphinx (or other) RST documentation" -category = "dev" optional = false python-versions = "*" +groups = ["lint"] files = [ {file = "doc8-0.8.1-py2.py3-none-any.whl", hash = "sha256:4d58a5c8c56cedd2b2c9d6e3153be5d956cf72f6051128f0f2255c66227df721"}, {file = "doc8-0.8.1.tar.gz", hash = "sha256:4d1df12598807cf08ffa9a1d5ef42d229ee0de42519da01b768ff27211082c12"}, @@ -241,9 +242,9 @@ stevedore = "*" name = "docutils" version = "0.18.1" description = "Docutils -- Python Documentation Utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["doc", "lint"] files = [ {file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"}, {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"}, @@ -253,9 +254,9 @@ files = [ name = "flake8" version = "4.0.1" description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" optional = false python-versions = ">=3.6" +groups = ["lint"] files = [ {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"}, {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"}, @@ -270,9 +271,9 @@ pyflakes = ">=2.4.0,<2.5.0" name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "dev" optional = false python-versions = ">=3.5" +groups = ["doc"] files = [ {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, @@ -282,9 +283,9 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["doc"] files = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, @@ -294,9 +295,10 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" -category = "dev" optional = false python-versions = ">=3.8" +groups = ["doc"] +markers = "python_version < \"3.10\"" files = [ {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, @@ -308,15 +310,15 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +testing = ["flufl.flake8", "importlib-resources (>=1.3) ; python_version < \"3.9\"", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7) ; platform_python_implementation != \"PyPy\"", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1) ; platform_python_implementation != \"PyPy\"", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "dev" optional = false python-versions = ">=3.7" +groups = ["doc"] files = [ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, @@ -332,9 +334,9 @@ i18n = ["Babel (>=2.7)"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" optional = false python-versions = ">=3.7" +groups = ["doc"] files = [ {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, @@ -356,6 +358,16 @@ files = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -392,9 +404,9 @@ files = [ name = "mccabe" version = "0.6.1" description = "McCabe checker, plugin for flake8" -category = "dev" optional = false python-versions = "*" +groups = ["lint"] files = [ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, @@ -404,9 +416,9 @@ files = [ name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" +groups = ["lint"] files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, @@ -416,9 +428,9 @@ files = [ name = "packaging" version = "23.2" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.7" +groups = ["doc"] files = [ {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, @@ -428,9 +440,9 @@ files = [ name = "pathspec" version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" +groups = ["lint"] files = [ {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, @@ -440,9 +452,9 @@ files = [ name = "pbr" version = "5.11.1" description = "Python Build Reasonableness" -category = "dev" optional = false python-versions = ">=2.6" +groups = ["lint"] files = [ {file = "pbr-5.11.1-py2.py3-none-any.whl", hash = "sha256:567f09558bae2b3ab53cb3c1e2e33e726ff3338e7bae3db5dc954b3a44eef12b"}, {file = "pbr-5.11.1.tar.gz", hash = "sha256:aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"}, @@ -452,9 +464,9 @@ files = [ name = "platformdirs" version = "3.11.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.7" +groups = ["lint"] files = [ {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, @@ -468,9 +480,9 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co name = "pycodestyle" version = "2.8.0" description = "Python style guide checker" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["lint"] files = [ {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"}, {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"}, @@ -480,9 +492,9 @@ files = [ name = "pyflakes" version = "2.4.0" description = "passive checker of Python programs" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["lint"] files = [ {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"}, {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, @@ -492,24 +504,25 @@ files = [ name = "pygments" version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." -category = "dev" optional = false python-versions = ">=3.7" +groups = ["doc", "lint"] files = [ {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] -plugins = ["importlib-metadata"] +plugins = ["importlib-metadata ; python_version < \"3.8\""] [[package]] name = "pytz" version = "2023.3.post1" description = "World timezone definitions, modern and historical" -category = "dev" optional = false python-versions = "*" +groups = ["doc"] +markers = "python_version == \"3.8\"" files = [ {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, @@ -519,9 +532,9 @@ files = [ name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "dev" optional = false python-versions = ">=3.7" +groups = ["doc"] files = [ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, @@ -541,9 +554,9 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "restructuredtext-lint" version = "1.4.0" description = "reStructuredText linter" -category = "dev" optional = false python-versions = "*" +groups = ["lint"] files = [ {file = "restructuredtext_lint-1.4.0.tar.gz", hash = "sha256:1b235c0c922341ab6c530390892eb9e92f90b9b75046063e047cacfb0f050c45"}, ] @@ -555,9 +568,9 @@ docutils = ">=0.11,<1.0" name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["lint"] files = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -567,9 +580,9 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "dev" optional = false python-versions = "*" +groups = ["doc"] files = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, @@ -579,9 +592,9 @@ files = [ name = "Sphinx" version = "5.1.0.dev20231023" description = "Python documentation generator" -category = "dev" optional = false python-versions = ">=3.6" +groups = ["doc"] files = [] develop = false @@ -619,9 +632,9 @@ resolved_reference = "cd277d098ea2df9c79f0a4cbce28a426ec4120bc" name = "sphinx-rtd-theme" version = "1.3.0" description = "Read the Docs theme for Sphinx" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["doc"] files = [ {file = "sphinx_rtd_theme-1.3.0-py2.py3-none-any.whl", hash = "sha256:46ddef89cc2416a81ecfbeaceab1881948c014b1b6e4450b815311a89fb977b0"}, {file = "sphinx_rtd_theme-1.3.0.tar.gz", hash = "sha256:590b030c7abb9cf038ec053b95e5380b5c70d61591eb0b552063fbe7c41f0931"}, @@ -639,9 +652,9 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] name = "sphinxcontrib-applehelp" version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "dev" optional = false python-versions = ">=3.8" +groups = ["doc"] files = [ {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, @@ -655,9 +668,9 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "dev" optional = false python-versions = ">=3.5" +groups = ["doc"] files = [ {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, @@ -671,9 +684,9 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" optional = false python-versions = ">=3.8" +groups = ["doc"] files = [ {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, @@ -687,9 +700,9 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jquery" version = "4.1" description = "Extension to include jQuery on newer Sphinx releases" -category = "dev" optional = false python-versions = ">=2.7" +groups = ["doc"] files = [ {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, @@ -702,9 +715,9 @@ Sphinx = ">=1.8" name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "dev" optional = false python-versions = ">=3.5" +groups = ["doc"] files = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, @@ -717,9 +730,9 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "dev" optional = false python-versions = ">=3.5" +groups = ["doc"] files = [ {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, @@ -733,9 +746,9 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "dev" optional = false python-versions = ">=3.5" +groups = ["doc"] files = [ {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, @@ -749,9 +762,9 @@ test = ["pytest"] name = "stevedore" version = "5.1.0" description = "Manage dynamic plugins for Python applications" -category = "dev" optional = false python-versions = ">=3.8" +groups = ["lint"] files = [ {file = "stevedore-5.1.0-py3-none-any.whl", hash = "sha256:8cc040628f3cea5d7128f2e76cf486b2251a4e543c7b938f58d9a377f6694a2d"}, {file = "stevedore-5.1.0.tar.gz", hash = "sha256:a54534acf9b89bc7ed264807013b505bf07f74dbe4bcfa37d32bd063870b087c"}, @@ -764,9 +777,9 @@ pbr = ">=2.0.0,<2.1.0 || >2.1.0" name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["doc"] files = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, @@ -776,9 +789,10 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" +groups = ["lint"] +markers = "python_full_version < \"3.11.0a7\"" files = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, @@ -788,9 +802,10 @@ files = [ name = "typing-extensions" version = "4.8.0" description = "Backported and Experimental Type Hints for Python 3.8+" -category = "dev" optional = false python-versions = ">=3.8" +groups = ["lint"] +markers = "python_version < \"3.10\"" files = [ {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, @@ -800,16 +815,16 @@ files = [ name = "urllib3" version = "2.0.7" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "dev" optional = false python-versions = ">=3.7" +groups = ["doc"] files = [ {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -818,9 +833,10 @@ zstd = ["zstandard (>=0.18.0)"] name = "zipp" version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" optional = false python-versions = ">=3.8" +groups = ["doc"] +markers = "python_version < \"3.10\"" files = [ {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, @@ -828,9 +844,9 @@ files = [ [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7) ; platform_python_implementation != \"PyPy\"", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1) ; platform_python_implementation != \"PyPy\"", "pytest-ruff"] [metadata] -lock-version = "2.0" +lock-version = "2.1" python-versions = "^3.8" content-hash = "c3ac22f3861c372d4572b51aa6263a693a8c42a7fa77ff5e735fea3be0e3f15b"