From 7ef763d3051095d2cc3282890a8e84ba60af7b67 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Sun, 16 Feb 2025 14:27:52 -0500 Subject: [PATCH 01/11] Install uv --- .github/workflows/ci.yaml | 1 + .github/workflows/python.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b793aed8..27daa153 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -129,6 +129,7 @@ jobs: - uses: actions/setup-python@v5 with: python-version: '3.10' + - uses: astral-sh/setup-uv@v5 - run: python -m pip install --upgrade wheel poetry poethepoet - run: poetry install --no-root - run: poe lint diff --git a/.github/workflows/python.yaml b/.github/workflows/python.yaml index 5adf1dab..0c676039 100644 --- a/.github/workflows/python.yaml +++ b/.github/workflows/python.yaml @@ -92,6 +92,7 @@ jobs: if: ${{ inputs.version-is-repo-ref }} with: workspaces: sdk-python/temporalio/bridge + - uses: astral-sh/setup-uv@v5 - run: poetry install --no-root if: ${{ inputs.version-is-repo-ref }} working-directory: sdk-python From 2f436aa614eb0a761b3750c21b12f211b2e5bec0 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Mon, 17 Feb 2025 11:16:14 -0500 Subject: [PATCH 02/11] Build wheel using uv --- .github/workflows/python.yaml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/python.yaml b/.github/workflows/python.yaml index 0c676039..272334af 100644 --- a/.github/workflows/python.yaml +++ b/.github/workflows/python.yaml @@ -78,7 +78,7 @@ jobs: - uses: actions/setup-python@v5 with: python-version: '3.10' - - run: python -m pip install --upgrade wheel poetry poethepoet + - run: python -m pip install poethepoet # Build SDK ================================================== - name: Install Protoc @@ -93,13 +93,10 @@ jobs: with: workspaces: sdk-python/temporalio/bridge - uses: astral-sh/setup-uv@v5 - - run: poetry install --no-root + - run: uv sync if: ${{ inputs.version-is-repo-ref }} working-directory: sdk-python - - run: poetry build - if: ${{ inputs.version-is-repo-ref }} - working-directory: sdk-python - - run: poe fix-wheel + - run: uv build if: ${{ inputs.version-is-repo-ref }} working-directory: sdk-python # ============================================================ From 2dd76bb5bdf775ec46d64b081d1cdf03372b2f6d Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Mon, 17 Feb 2025 11:45:58 -0500 Subject: [PATCH 03/11] Use `uv tool` to install poetry and poe --- .github/workflows/python.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/python.yaml b/.github/workflows/python.yaml index 272334af..5cde4755 100644 --- a/.github/workflows/python.yaml +++ b/.github/workflows/python.yaml @@ -78,7 +78,9 @@ jobs: - uses: actions/setup-python@v5 with: python-version: '3.10' - - run: python -m pip install poethepoet + - uses: astral-sh/setup-uv@v5 + - run: uv tool install poetry + - run: uv tool install poethepoet # Build SDK ================================================== - name: Install Protoc From 956484b57cad23fe0bc718428c85e72b91d95bb3 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Mon, 17 Feb 2025 12:51:19 -0500 Subject: [PATCH 04/11] `uv tool install` not on PATH? --- .github/workflows/python.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/python.yaml b/.github/workflows/python.yaml index 5cde4755..d7fea4df 100644 --- a/.github/workflows/python.yaml +++ b/.github/workflows/python.yaml @@ -79,8 +79,7 @@ jobs: with: python-version: '3.10' - uses: astral-sh/setup-uv@v5 - - run: uv tool install poetry - - run: uv tool install poethepoet + - run: python -m pip install poetry # Build SDK ================================================== - name: Install Protoc From 8c7e1d4e0d23f85b1d92c20a9970ab1c42b1ee78 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Mon, 17 Feb 2025 13:52:26 -0500 Subject: [PATCH 05/11] Bump download-artifact version --- .github/workflows/php.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php.yaml b/.github/workflows/php.yaml index c9ef4a6e..cb246c72 100644 --- a/.github/workflows/php.yaml +++ b/.github/workflows/php.yaml @@ -38,7 +38,7 @@ jobs: - name: Download docker artifacts if: ${{ inputs.docker-image-artifact-name }} - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: ${{ inputs.docker-image-artifact-name }} path: /tmp/server-docker From b65fc74483361bb7ab54ec8f78f9dd3bcb8aaff5 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Mon, 17 Feb 2025 19:19:49 -0500 Subject: [PATCH 06/11] Refactor --- sdkbuild/python.go | 92 +++++++++++++++++++++++++--------------------- 1 file changed, 50 insertions(+), 42 deletions(-) diff --git a/sdkbuild/python.go b/sdkbuild/python.go index f91087f7..a18e6ef3 100644 --- a/sdkbuild/python.go +++ b/sdkbuild/python.go @@ -73,50 +73,11 @@ func BuildPythonProgram(ctx context.Context, options BuildPythonProgramOptions) // Use semantic version or path if it's a path versionStr := strconv.Quote(strings.TrimPrefix(options.Version, "v")) if strings.ContainsAny(options.Version, `/\`) { - // We expect a dist/ directory with a single whl file present - sdkPath, err := filepath.Abs(options.Version) + wheel, err := getWheel(ctx, options.Version) if err != nil { - return nil, fmt.Errorf("unable to make sdk path absolute: %w", err) - } - triedBuilding := false - - getWheels: - wheels, err := filepath.Glob(filepath.Join(sdkPath, "dist/*.whl")) - if err != nil { - return nil, fmt.Errorf("failed glob wheel lookup: %w", err) - } else if len(wheels) == 0 && !triedBuilding { - triedBuilding = true - // Try to build the project - cmd := exec.CommandContext(ctx, "poetry", "install", "--no-root") - cmd.Dir = sdkPath - cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr - err = cmd.Run() - if err != nil { - return nil, fmt.Errorf("problem installing deps when building sdk by path: %w", err) - } - cmd = exec.CommandContext(ctx, "poetry", "build") - cmd.Dir = sdkPath - cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr - err = cmd.Run() - if err != nil { - return nil, fmt.Errorf("problem buildling sdk by path: %w", err) - } - // This constitutes a legitimate use of goto, fight me. - goto getWheels - } else if len(wheels) != 1 { - return nil, fmt.Errorf("expected single dist wheel, found %v - consider cleaning dist dir", wheels) - } - - absWheel, err := filepath.Abs(wheels[0]) - if err != nil { - return nil, fmt.Errorf("unable to make wheel path absolute: %w", err) - } - // There's a strange bug in Poetry or somewhere deeper where, on Windows, - // the single drive letter has to be capitalized - if runtime.GOOS == "windows" && absWheel[1] == ':' { - absWheel = strings.ToUpper(absWheel[:1]) + absWheel[1:] + return nil, err } - versionStr = "{ path = " + strconv.Quote(absWheel) + " }" + versionStr = "{ path = " + strconv.Quote(wheel) + " }" } pyProjectTOML := ` [tool.poetry] @@ -154,6 +115,53 @@ build-backend = "poetry.core.masonry.api"` return &PythonProgram{dir}, nil } +func getWheel(ctx context.Context, version string) (string, error) { + // We expect a dist/ directory with a single whl file present + sdkPath, err := filepath.Abs(version) + if err != nil { + return "", fmt.Errorf("unable to make sdk path absolute: %w", err) + } + triedBuilding := false + +getWheels: + wheels, err := filepath.Glob(filepath.Join(sdkPath, "dist/*.whl")) + if err != nil { + return "", fmt.Errorf("failed glob wheel lookup: %w", err) + } else if len(wheels) == 0 && !triedBuilding { + triedBuilding = true + // Try to build the project + cmd := exec.CommandContext(ctx, "poetry", "install", "--no-root") + cmd.Dir = sdkPath + cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr + err = cmd.Run() + if err != nil { + return "", fmt.Errorf("problem installing deps when buildling sdk by path: %w", err) + } + cmd = exec.CommandContext(ctx, "poetry", "build") + cmd.Dir = sdkPath + cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr + err = cmd.Run() + if err != nil { + return "", fmt.Errorf("problem buildling sdk by path: %w", err) + } + // This constitutes a legitimate use of goto, fight me. + goto getWheels + } else if len(wheels) != 1 { + return "", fmt.Errorf("expected single dist wheel, found %v - consider cleaning dist dir", wheels) + } + + absWheel, err := filepath.Abs(wheels[0]) + if err != nil { + return "", fmt.Errorf("unable to make wheel path absolute: %w", err) + } + // There's a strange bug in Poetry or somewhere deeper where, on Windows, + // the single drive letter has to be capitalized + if runtime.GOOS == "windows" && absWheel[1] == ':' { + absWheel = strings.ToUpper(absWheel[:1]) + absWheel[1:] + } + return absWheel, nil +} + // PythonProgramFromDir recreates the Python program from a Dir() result of a // BuildPythonProgram(). Note, the base directory of dir when it was built must // also be present. From cd56a76902deb4949e9ee2f0d2f8038ac51f84fc Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Mon, 17 Feb 2025 19:38:10 -0500 Subject: [PATCH 07/11] Remove unnecessary build-system --- sdkbuild/python.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/sdkbuild/python.go b/sdkbuild/python.go index a18e6ef3..d72fb363 100644 --- a/sdkbuild/python.go +++ b/sdkbuild/python.go @@ -89,11 +89,7 @@ authors = ["Temporal Technologies Inc "] [tool.poetry.dependencies] python = "^3.9" temporalio = ` + versionStr + ` -` + options.DependencyName + ` = { path = "../" } - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api"` +` + options.DependencyName + ` = { path = "../" }` if err := os.WriteFile(filepath.Join(dir, "pyproject.toml"), []byte(pyProjectTOML), 0644); err != nil { return nil, fmt.Errorf("failed writing pyproject.toml: %w", err) } From e3af3ba610f2d723b6c3ea55ff3eaf775c44d577 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Mon, 17 Feb 2025 19:54:26 -0500 Subject: [PATCH 08/11] Migrate to uv pyproject.toml migrated via `uvx migrate-to-uv` --- .github/workflows/ci.yaml | 4 +- .github/workflows/python.yaml | 1 - README.md | 4 +- cmd/run_python.go | 7 +- dockerfiles/py.Dockerfile | 17 +- poetry.lock | 298 ---------------------------------- pyproject.toml | 40 +++-- sdkbuild/python.go | 68 ++++---- uv.lock | 220 +++++++++++++++++++++++++ 9 files changed, 288 insertions(+), 371 deletions(-) delete mode 100644 poetry.lock create mode 100644 uv.lock diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 27daa153..b88aa751 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -130,8 +130,8 @@ jobs: with: python-version: '3.10' - uses: astral-sh/setup-uv@v5 - - run: python -m pip install --upgrade wheel poetry poethepoet - - run: poetry install --no-root + - run: python -m pip install --upgrade wheel poethepoet + - run: uv sync - run: poe lint build-php: diff --git a/.github/workflows/python.yaml b/.github/workflows/python.yaml index d7fea4df..108ba7c1 100644 --- a/.github/workflows/python.yaml +++ b/.github/workflows/python.yaml @@ -79,7 +79,6 @@ jobs: with: python-version: '3.10' - uses: astral-sh/setup-uv@v5 - - run: python -m pip install poetry # Build SDK ================================================== - name: Install Protoc diff --git a/README.md b/README.md index 6db70f62..84987e41 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,7 @@ Prerequisites: - [Go](https://golang.org/) 1.17+ - [JDK](https://adoptium.net/?variant=openjdk11&jvmVariant=hotspot) 11+ - [Node](https://nodejs.org) 16+ -- [Python](https://www.python.org/) 3.10+ - - [Poetry](https://python-poetry.org/): `poetry install` - - `setuptools`: `python -m pip install -U setuptools` +- [uv](https://docs.astral.sh/uv/) - [.NET](https://dotnet.microsoft.com) 7+ - [PHP](https://www.php.net/) 8.1+ - [Composer](https://getcomposer.org/) diff --git a/cmd/run_python.go b/cmd/run_python.go index 52d840a5..0de450db 100644 --- a/cmd/run_python.go +++ b/cmd/run_python.go @@ -37,10 +37,9 @@ func (p *Preparer) BuildPythonProgram(ctx context.Context) (sdkbuild.Program, er } prog, err := sdkbuild.BuildPythonProgram(ctx, sdkbuild.BuildPythonProgramOptions{ - BaseDir: p.rootDir, - DirName: p.config.DirName, - Version: version, - DependencyName: "features", + BaseDir: p.rootDir, + DirName: p.config.DirName, + Version: version, }) if err != nil { return nil, fmt.Errorf("failed preparing: %w", err) diff --git a/dockerfiles/py.Dockerfile b/dockerfiles/py.Dockerfile index 805419d3..a3916790 100644 --- a/dockerfiles/py.Dockerfile +++ b/dockerfiles/py.Dockerfile @@ -18,8 +18,8 @@ RUN wget -q -O - https://sh.rustup.rs | sh -s -- -y ENV PATH="$PATH:/root/.cargo/bin" -# Install poetry -RUN pip install --no-cache-dir "poetry==1.2.2" +# Install uv +COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ WORKDIR /app @@ -33,8 +33,7 @@ COPY go.mod go.sum main.go ./ # Build the CLI RUN CGO_ENABLED=0 /usr/local/go/bin/go build -o temporal-features -# Copy poetry config -COPY poetry.lock pyproject.toml ./ +COPY uv.lock pyproject.toml ./ ARG SDK_VERSION ARG SDK_REPO_URL @@ -44,23 +43,19 @@ ARG SDK_REPO_REF ARG REPO_DIR_OR_PLACEHOLDER COPY ./${REPO_DIR_OR_PLACEHOLDER} ./${REPO_DIR_OR_PLACEHOLDER} -# Prepare the feature for running. We need to use in-project venv so it is copied into smaller img. -ENV POETRY_VIRTUALENVS_IN_PROJECT=true +# Prepare the feature for running. RUN CGO_ENABLED=0 ./temporal-features prepare --lang py --dir prepared --version "$SDK_VERSION" # Copy the CLI and prepared feature to a smaller container for running FROM python:3.11-slim-bullseye -# Poetry needed for running python tests -RUN pip install --no-cache-dir "poetry==1.2.2" - COPY --from=build /app/temporal-features /app/temporal-features COPY --from=build /app/features /app/features COPY --from=build /app/prepared /app/prepared COPY --from=build /app/harness/python /app/harness/python COPY --from=build /app/${REPO_DIR_OR_PLACEHOLDER} /app/${REPO_DIR_OR_PLACEHOLDER} -COPY --from=build /app/poetry.lock /app/pyproject.toml /app/ +COPY --from=build /app/uv.lock /app/pyproject.toml /app/ +COPY --from=build /bin/uv /bin/uvx /bin/ # Use entrypoint instead of command to "bake" the default command options -ENV POETRY_VIRTUALENVS_IN_PROJECT=true ENTRYPOINT ["/app/temporal-features", "run", "--lang", "py", "--prepared-dir", "prepared"] diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index e5947dec..00000000 --- a/poetry.lock +++ /dev/null @@ -1,298 +0,0 @@ -# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. - -[[package]] -name = "black" -version = "22.8.0" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.6.2" -groups = ["dev"] -files = [ - {file = "black-22.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce957f1d6b78a8a231b18e0dd2d94a33d2ba738cd88a7fe64f53f659eea49fdd"}, - {file = "black-22.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5107ea36b2b61917956d018bd25129baf9ad1125e39324a9b18248d362156a27"}, - {file = "black-22.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8166b7bfe5dcb56d325385bd1d1e0f635f24aae14b3ae437102dedc0c186747"}, - {file = "black-22.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd82842bb272297503cbec1a2600b6bfb338dae017186f8f215c8958f8acf869"}, - {file = "black-22.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d839150f61d09e7217f52917259831fe2b689f5c8e5e32611736351b89bb2a90"}, - {file = "black-22.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a05da0430bd5ced89176db098567973be52ce175a55677436a271102d7eaa3fe"}, - {file = "black-22.8.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a098a69a02596e1f2a58a2a1c8d5a05d5a74461af552b371e82f9fa4ada8342"}, - {file = "black-22.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5594efbdc35426e35a7defa1ea1a1cb97c7dbd34c0e49af7fb593a36bd45edab"}, - {file = "black-22.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a983526af1bea1e4cf6768e649990f28ee4f4137266921c2c3cee8116ae42ec3"}, - {file = "black-22.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b2c25f8dea5e8444bdc6788a2f543e1fb01494e144480bc17f806178378005e"}, - {file = "black-22.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:78dd85caaab7c3153054756b9fe8c611efa63d9e7aecfa33e533060cb14b6d16"}, - {file = "black-22.8.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cea1b2542d4e2c02c332e83150e41e3ca80dc0fb8de20df3c5e98e242156222c"}, - {file = "black-22.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b879eb439094751185d1cfdca43023bc6786bd3c60372462b6f051efa6281a5"}, - {file = "black-22.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a12e4e1353819af41df998b02c6742643cfef58282915f781d0e4dd7a200411"}, - {file = "black-22.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3a73f66b6d5ba7288cd5d6dad9b4c9b43f4e8a4b789a94bf5abfb878c663eb3"}, - {file = "black-22.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:e981e20ec152dfb3e77418fb616077937378b322d7b26aa1ff87717fb18b4875"}, - {file = "black-22.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8ce13ffed7e66dda0da3e0b2eb1bdfc83f5812f66e09aca2b0978593ed636b6c"}, - {file = "black-22.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:32a4b17f644fc288c6ee2bafdf5e3b045f4eff84693ac069d87b1a347d861497"}, - {file = "black-22.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ad827325a3a634bae88ae7747db1a395d5ee02cf05d9aa7a9bd77dfb10e940c"}, - {file = "black-22.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53198e28a1fb865e9fe97f88220da2e44df6da82b18833b588b1883b16bb5d41"}, - {file = "black-22.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:bc4d4123830a2d190e9cc42a2e43570f82ace35c3aeb26a512a2102bce5af7ec"}, - {file = "black-22.8.0-py3-none-any.whl", hash = "sha256:d2c21d439b2baf7aa80d6dd4e3659259be64c6f49dfd0f32091063db0e006db4"}, - {file = "black-22.8.0.tar.gz", hash = "sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "click" -version = "8.1.3" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.5" -description = "Cross-platform colored terminal text." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["dev"] -markers = "platform_system == \"Windows\"" -files = [ - {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, - {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, -] - -[[package]] -name = "isort" -version = "5.10.1" -description = "A Python utility / library to sort Python imports." -optional = false -python-versions = ">=3.6.1,<4.0" -groups = ["dev"] -files = [ - {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, - {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, -] - -[package.extras] -colors = ["colorama (>=0.4.3,<0.5.0)"] -pipfile-deprecated-finder = ["pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] - -[[package]] -name = "mypy" -version = "0.961" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.6" -groups = ["dev"] -files = [ - {file = "mypy-0.961-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:697540876638ce349b01b6786bc6094ccdaba88af446a9abb967293ce6eaa2b0"}, - {file = "mypy-0.961-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b117650592e1782819829605a193360a08aa99f1fc23d1d71e1a75a142dc7e15"}, - {file = "mypy-0.961-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bdd5ca340beffb8c44cb9dc26697628d1b88c6bddf5c2f6eb308c46f269bb6f3"}, - {file = "mypy-0.961-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3e09f1f983a71d0672bbc97ae33ee3709d10c779beb613febc36805a6e28bb4e"}, - {file = "mypy-0.961-cp310-cp310-win_amd64.whl", hash = "sha256:e999229b9f3198c0c880d5e269f9f8129c8862451ce53a011326cad38b9ccd24"}, - {file = "mypy-0.961-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b24be97351084b11582fef18d79004b3e4db572219deee0212078f7cf6352723"}, - {file = "mypy-0.961-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f4a21d01fc0ba4e31d82f0fff195682e29f9401a8bdb7173891070eb260aeb3b"}, - {file = "mypy-0.961-cp36-cp36m-win_amd64.whl", hash = "sha256:439c726a3b3da7ca84a0199a8ab444cd8896d95012c4a6c4a0d808e3147abf5d"}, - {file = "mypy-0.961-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a0b53747f713f490affdceef835d8f0cb7285187a6a44c33821b6d1f46ed813"}, - {file = "mypy-0.961-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e9f70df36405c25cc530a86eeda1e0867863d9471fe76d1273c783df3d35c2e"}, - {file = "mypy-0.961-cp37-cp37m-win_amd64.whl", hash = "sha256:b88f784e9e35dcaa075519096dc947a388319cb86811b6af621e3523980f1c8a"}, - {file = "mypy-0.961-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d5aaf1edaa7692490f72bdb9fbd941fbf2e201713523bdb3f4038be0af8846c6"}, - {file = "mypy-0.961-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9f5f5a74085d9a81a1f9c78081d60a0040c3efb3f28e5c9912b900adf59a16e6"}, - {file = "mypy-0.961-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f4b794db44168a4fc886e3450201365c9526a522c46ba089b55e1f11c163750d"}, - {file = "mypy-0.961-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:64759a273d590040a592e0f4186539858c948302c653c2eac840c7a3cd29e51b"}, - {file = "mypy-0.961-cp38-cp38-win_amd64.whl", hash = "sha256:63e85a03770ebf403291ec50097954cc5caf2a9205c888ce3a61bd3f82e17569"}, - {file = "mypy-0.961-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f1332964963d4832a94bebc10f13d3279be3ce8f6c64da563d6ee6e2eeda932"}, - {file = "mypy-0.961-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:006be38474216b833eca29ff6b73e143386f352e10e9c2fbe76aa8549e5554f5"}, - {file = "mypy-0.961-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9940e6916ed9371809b35b2154baf1f684acba935cd09928952310fbddaba648"}, - {file = "mypy-0.961-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5ea0875a049de1b63b972456542f04643daf320d27dc592d7c3d9cd5d9bf950"}, - {file = "mypy-0.961-cp39-cp39-win_amd64.whl", hash = "sha256:1ece702f29270ec6af25db8cf6185c04c02311c6bb21a69f423d40e527b75c56"}, - {file = "mypy-0.961-py3-none-any.whl", hash = "sha256:03c6cc893e7563e7b2949b969e63f02c000b32502a1b4d1314cabe391aa87d66"}, - {file = "mypy-0.961.tar.gz", hash = "sha256:f730d56cb924d371c26b8eaddeea3cc07d78ff51c521c6d04899ac6904b75492"}, -] - -[package.dependencies] -mypy-extensions = ">=0.4.3" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=3.10" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -python2 = ["typed-ast (>=1.4.0,<2)"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -optional = false -python-versions = "*" -groups = ["dev"] -files = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] - -[[package]] -name = "pathspec" -version = "0.10.1" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "pathspec-0.10.1-py3-none-any.whl", hash = "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93"}, - {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"}, -] - -[[package]] -name = "platformdirs" -version = "2.5.2" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, - {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, -] - -[package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] - -[[package]] -name = "protobuf" -version = "4.21.6" -description = "" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "protobuf-4.21.6-cp310-abi3-win32.whl", hash = "sha256:49f88d56a9180dbb7f6199c920f5bb5c1dd0172f672983bb281298d57c2ac8eb"}, - {file = "protobuf-4.21.6-cp310-abi3-win_amd64.whl", hash = "sha256:7a6cc8842257265bdfd6b74d088b829e44bcac3cca234c5fdd6052730017b9ea"}, - {file = "protobuf-4.21.6-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:ba596b9ffb85c909fcfe1b1a23136224ed678af3faf9912d3fa483d5f9813c4e"}, - {file = "protobuf-4.21.6-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:4143513c766db85b9d7c18dbf8339673c8a290131b2a0fe73855ab20770f72b0"}, - {file = "protobuf-4.21.6-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:b6cea204865595a92a7b240e4b65bcaaca3ad5d2ce25d9db3756eba06041138e"}, - {file = "protobuf-4.21.6-cp37-cp37m-win32.whl", hash = "sha256:9666da97129138585b26afcb63ad4887f602e169cafe754a8258541c553b8b5d"}, - {file = "protobuf-4.21.6-cp37-cp37m-win_amd64.whl", hash = "sha256:308173d3e5a3528787bb8c93abea81d5a950bdce62840d9760effc84127fb39c"}, - {file = "protobuf-4.21.6-cp38-cp38-win32.whl", hash = "sha256:aa29113ec901281f29d9d27b01193407a98aa9658b8a777b0325e6d97149f5ce"}, - {file = "protobuf-4.21.6-cp38-cp38-win_amd64.whl", hash = "sha256:8f9e60f7d44592c66e7b332b6a7b4b6e8d8b889393c79dbc3a91f815118f8eac"}, - {file = "protobuf-4.21.6-cp39-cp39-win32.whl", hash = "sha256:80e6540381080715fddac12690ee42d087d0d17395f8d0078dfd6f1181e7be4c"}, - {file = "protobuf-4.21.6-cp39-cp39-win_amd64.whl", hash = "sha256:77b355c8604fe285536155286b28b0c4cbc57cf81b08d8357bf34829ea982860"}, - {file = "protobuf-4.21.6-py2.py3-none-any.whl", hash = "sha256:07a0bb9cc6114f16a39c866dc28b6e3d96fa4ffb9cc1033057412547e6e75cb9"}, - {file = "protobuf-4.21.6-py3-none-any.whl", hash = "sha256:c7c864148a237f058c739ae7a05a2b403c0dfa4ce7d1f3e5213f352ad52d57c6"}, - {file = "protobuf-4.21.6.tar.gz", hash = "sha256:6b1040a5661cd5f6e610cbca9cfaa2a17d60e2bb545309bc1b278bb05be44bdd"}, -] - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main"] -markers = "python_version < \"3.11\"" -files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -groups = ["main"] -markers = "python_version < \"3.11\"" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "temporalio" -version = "1.9.0" -description = "Temporal.io Python SDK" -optional = false -python-versions = "<4.0,>=3.8" -groups = ["main"] -files = [ - {file = "temporalio-1.9.0-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ee941702e8925e2c018b5c2d7b296f811205043654d7f9c4564d7fa6597f1989"}, - {file = "temporalio-1.9.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:101040090238d97b61d769e009f732409894d8f26596a3827662f2dde2862097"}, - {file = "temporalio-1.9.0-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:91f49b81823f8f44819cc48da0b730175acd793dc428e451e1824b48a4e41465"}, - {file = "temporalio-1.9.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f516ae152935ec16afb65b7555486f161b427eaa4b411e945063e31da1a644eb"}, - {file = "temporalio-1.9.0-cp38-abi3-win_amd64.whl", hash = "sha256:254267109e8e5cb3fa35b4719fdde5ec114b264f3b030ab5be6a69f697acdc5e"}, - {file = "temporalio-1.9.0.tar.gz", hash = "sha256:932b56720a20401f333ffdaea157cc64d0f9d615a2fd16358bee56d9491bff77"}, -] - -[package.dependencies] -protobuf = ">=3.20" -python-dateutil = {version = ">=2.8.2,<3.0.0", markers = "python_version < \"3.11\""} -types-protobuf = ">=3.20" -typing-extensions = ">=4.2.0,<5.0.0" - -[package.extras] -grpc = ["grpcio (>=1.59.0,<2.0.0)"] -opentelemetry = ["opentelemetry-api (>=1.11.1,<2.0.0)", "opentelemetry-sdk (>=1.11.1,<2.0.0)"] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -groups = ["dev"] -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"}, -] - -[[package]] -name = "types-protobuf" -version = "3.20.4" -description = "Typing stubs for protobuf" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "types-protobuf-3.20.4.tar.gz", hash = "sha256:0dad3a5009895c985a56e2837f61902bad9594151265ac0ee907bb16d0b01eb7"}, - {file = "types_protobuf-3.20.4-py3-none-any.whl", hash = "sha256:5082437afe64ce3b31c8db109eae86e02fda11e4d5f9ac59cb8578a8a138aa70"}, -] - -[[package]] -name = "typing-extensions" -version = "4.3.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -optional = false -python-versions = ">=3.7" -groups = ["main", "dev"] -files = [ - {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, - {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, -] - -[metadata] -lock-version = "2.1" -python-versions = "^3.9" -content-hash = "9104a5302e9339feb3b736534c90acba3413be282d11fd6417d53978d0ef1d94" diff --git a/pyproject.toml b/pyproject.toml index 864bc9f8..4e8b9973 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,22 +1,34 @@ -[tool.poetry] +[project] name = "features" version = "0.1.0" description = "Temporal SDK Features" +authors = [{ name = "Temporal Technologies Inc", email = "sdk@temporal.io" }] +requires-python = "~=3.9" license = "MIT" -authors = ["Temporal Technologies Inc "] -packages = [ - { include = "features" }, - { include = "harness/python/**/*.py" }, +dependencies = ["temporalio>=1.9.0,<2"] + +[dependency-groups] +dev = [ + "mypy>=0.961,<0.962", + "black>=22.3.0,<23", + "isort>=5.10.1,<6", ] -[tool.poetry.dependencies] -python = "^3.9" -temporalio = "^1.9.0" +[tool.hatch.build.targets.sdist] +include = [ + "features", + "harness/python/**/*.py", +] -[tool.poetry.dev-dependencies] -mypy = "^0.961" -black = "^22.3.0" -isort = "^5.10.1" +[tool.hatch.build.targets.wheel] +include = [ + "features", + "harness/python/**/*.py", +] + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" [tool.poe.tasks] format = [{cmd = "black ."}, {cmd = "isort ."}] @@ -30,7 +42,3 @@ lint-types = "mypy --explicit-package-bases --namespace-packages ." [tool.isort] profile = "black" skip_gitignore = true - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" diff --git a/sdkbuild/python.go b/sdkbuild/python.go index d72fb363..04e216f5 100644 --- a/sdkbuild/python.go +++ b/sdkbuild/python.go @@ -7,7 +7,6 @@ import ( "os/exec" "path/filepath" "runtime" - "strconv" "strings" ) @@ -20,8 +19,6 @@ type BuildPythonProgramOptions struct { // a single wheel in the dist directory. Otherwise it is a specific version // (with leading "v" is trimmed if present). Version string - // Required Poetry dependency name of BaseDir. - DependencyName string // If present, this directory is expected to exist beneath base dir. Otherwise // a temporary dir is created. DirName string @@ -47,8 +44,6 @@ func BuildPythonProgram(ctx context.Context, options BuildPythonProgramOptions) return nil, fmt.Errorf("version required") } else if _, err := os.Stat(filepath.Join(options.BaseDir, "pyproject.toml")); err != nil { return nil, fmt.Errorf("failed finding pyproject.toml in base dir: %w", err) - } else if options.DependencyName == "" { - return nil, fmt.Errorf("dependency name required") } // Create temp dir if needed that we will remove if creating is unsuccessful @@ -70,40 +65,44 @@ func BuildPythonProgram(ctx context.Context, options BuildPythonProgramOptions) }() } - // Use semantic version or path if it's a path - versionStr := strconv.Quote(strings.TrimPrefix(options.Version, "v")) - if strings.ContainsAny(options.Version, `/\`) { - wheel, err := getWheel(ctx, options.Version) - if err != nil { - return nil, err + executeCommand := func(name string, args ...string) error { + cmd := exec.CommandContext(ctx, name, args...) + cmd.Dir = dir + cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr + if options.ApplyToCommand != nil { + if err := options.ApplyToCommand(ctx, cmd); err != nil { + return err + } } - versionStr = "{ path = " + strconv.Quote(wheel) + " }" + return cmd.Run() } + pyProjectTOML := ` -[tool.poetry] +[project] name = "python-program-` + filepath.Base(dir) + `" version = "0.1.0" description = "Temporal SDK Python Test" -authors = ["Temporal Technologies Inc "] - -[tool.poetry.dependencies] -python = "^3.9" -temporalio = ` + versionStr + ` -` + options.DependencyName + ` = { path = "../" }` +authors = [{ name = "Temporal Technologies Inc", email = "sdk@temporal.io" }] +requires-python = "~=3.9" +` if err := os.WriteFile(filepath.Join(dir, "pyproject.toml"), []byte(pyProjectTOML), 0644); err != nil { return nil, fmt.Errorf("failed writing pyproject.toml: %w", err) } - // Install - cmd := exec.CommandContext(ctx, "poetry", "install", "--no-root", "-v") - cmd.Dir = dir - cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr - if options.ApplyToCommand != nil { - if err := options.ApplyToCommand(ctx, cmd); err != nil { + if strings.ContainsAny(options.Version, `/\`) { + // It's a path; install from wheel + wheel, err := getWheel(ctx, options.Version) + if err != nil { return nil, err } + executeCommand("uv", "add", wheel) + } else { + executeCommand("uv", "add", fmt.Sprintf("temporalio==%s", strings.TrimPrefix(options.Version, "v"))) } - if err := cmd.Run(); err != nil { + // Add the `features` python package + executeCommand("uv", "add", "--editable", "../") + + if err := executeCommand("uv", "sync"); err != nil { return nil, fmt.Errorf("failed installing: %w", err) } @@ -126,21 +125,18 @@ getWheels: } else if len(wheels) == 0 && !triedBuilding { triedBuilding = true // Try to build the project - cmd := exec.CommandContext(ctx, "poetry", "install", "--no-root") + cmd := exec.CommandContext(ctx, "uv", "sync") cmd.Dir = sdkPath cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr - err = cmd.Run() - if err != nil { - return "", fmt.Errorf("problem installing deps when buildling sdk by path: %w", err) + if err := cmd.Run(); err != nil { + return "", fmt.Errorf("problem installing deps when building sdk by path: %w", err) } - cmd = exec.CommandContext(ctx, "poetry", "build") + cmd = exec.CommandContext(ctx, "uv", "build") cmd.Dir = sdkPath cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr - err = cmd.Run() - if err != nil { - return "", fmt.Errorf("problem buildling sdk by path: %w", err) + if err := cmd.Run(); err != nil { + return "", fmt.Errorf("problem building sdk by path: %w", err) } - // This constitutes a legitimate use of goto, fight me. goto getWheels } else if len(wheels) != 1 { return "", fmt.Errorf("expected single dist wheel, found %v - consider cleaning dist dir", wheels) @@ -178,7 +174,7 @@ func (p *PythonProgram) Dir() string { return p.dir } // name of the module. func (p *PythonProgram) NewCommand(ctx context.Context, args ...string) (*exec.Cmd, error) { args = append([]string{"run", "python", "-m"}, args...) - cmd := exec.CommandContext(ctx, "poetry", args...) + cmd := exec.CommandContext(ctx, "uv", args...) cmd.Dir = p.dir cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr return cmd, nil diff --git a/uv.lock b/uv.lock new file mode 100644 index 00000000..1da2bcb1 --- /dev/null +++ b/uv.lock @@ -0,0 +1,220 @@ +version = 1 +revision = 1 +requires-python = ">=3.9, <4" + +[[package]] +name = "black" +version = "22.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "platformdirs" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/1b/38a013f75022fae724ed766fdac5f6777544c45eecbe00a6d8fd91a2a26b/black-22.8.0.tar.gz", hash = "sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e", size = 577317 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/e9/d6e8365eae2dd2b0d9fcdff129a88ab316a545ab44445c92ae8353c7f5ef/black-22.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce957f1d6b78a8a231b18e0dd2d94a33d2ba738cd88a7fe64f53f659eea49fdd", size = 2476778 }, + { url = "https://files.pythonhosted.org/packages/b9/d2/7476c40f3ed871047e5ef4e27a6e946b3aac5357fe9a2e08548c95b79327/black-22.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5107ea36b2b61917956d018bd25129baf9ad1125e39324a9b18248d362156a27", size = 1403144 }, + { url = "https://files.pythonhosted.org/packages/0e/08/daaae4173461abc664563e651a1e3c5edc9570ca03283793a444becb9c2f/black-22.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8166b7bfe5dcb56d325385bd1d1e0f635f24aae14b3ae437102dedc0c186747", size = 1238447 }, + { url = "https://files.pythonhosted.org/packages/d5/0a/c86b68b24812deaceb48dc7e335fde0f1289e04171ef2fc5ff8eecc50102/black-22.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd82842bb272297503cbec1a2600b6bfb338dae017186f8f215c8958f8acf869", size = 1529233 }, + { url = "https://files.pythonhosted.org/packages/86/9c/25cab63ed9440df5dba7688d4b55123f4bb352dc48ddf93d2b32c882dbe1/black-22.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d839150f61d09e7217f52917259831fe2b689f5c8e5e32611736351b89bb2a90", size = 1191248 }, + { url = "https://files.pythonhosted.org/packages/4d/44/466ae995a55a5c8d5914e0f02520cb64710fbc3e2df8eddc4d2a54bf6a7e/black-22.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8ce13ffed7e66dda0da3e0b2eb1bdfc83f5812f66e09aca2b0978593ed636b6c", size = 2476218 }, + { url = "https://files.pythonhosted.org/packages/18/09/63714f5c9d4d7e04c6c04603ce7fb69bf746f69caed0a3416e41bf2db168/black-22.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:32a4b17f644fc288c6ee2bafdf5e3b045f4eff84693ac069d87b1a347d861497", size = 1402883 }, + { url = "https://files.pythonhosted.org/packages/d4/a1/dc7bc3cc5eef263625532176015d65033425af8187b732ef2495a1cfa597/black-22.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ad827325a3a634bae88ae7747db1a395d5ee02cf05d9aa7a9bd77dfb10e940c", size = 1238091 }, + { url = "https://files.pythonhosted.org/packages/71/2c/73563faaf6c8aeb31954b8e83b3284bb01ac0ec58110ed84ecec95a055f4/black-22.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53198e28a1fb865e9fe97f88220da2e44df6da82b18833b588b1883b16bb5d41", size = 1529230 }, + { url = "https://files.pythonhosted.org/packages/05/b1/9bd51244802560ea3cae386fd7c4b3dc104f3da2c71d9cebe0dd9a58cf21/black-22.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:bc4d4123830a2d190e9cc42a2e43570f82ace35c3aeb26a512a2102bce5af7ec", size = 1190507 }, + { url = "https://files.pythonhosted.org/packages/c6/63/a852b07abc942dc069b5457af40feca82667cf5ed9faec7d4688a4d9c7da/black-22.8.0-py3-none-any.whl", hash = "sha256:d2c21d439b2baf7aa80d6dd4e3659259be64c6f49dfd0f32091063db0e006db4", size = 159824 }, +] + +[[package]] +name = "click" +version = "8.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/59/87/84326af34517fca8c58418d148f2403df25303e02736832403587318e9e8/click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", size = 331147 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/f1/df59e28c642d583f7dacffb1e0965d0e00b218e0186d7858ac5233dce840/click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48", size = 96588 }, +] + +[[package]] +name = "colorama" +version = "0.4.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/65/24d033a9325ce42ccbfa3ca2d0866c7e89cc68e5b9d92ecaba9feef631df/colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4", size = 27469 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/8b/7550e87b2d308a1b711725dfaddc19c695f8c5fa413c640b2be01662f4e6/colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da", size = 16204 }, +] + +[[package]] +name = "features" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "temporalio" }, +] + +[package.dev-dependencies] +dev = [ + { name = "black" }, + { name = "isort" }, + { name = "mypy" }, +] + +[package.metadata] +requires-dist = [{ name = "temporalio", specifier = ">=1.9.0,<2" }] + +[package.metadata.requires-dev] +dev = [ + { name = "black", specifier = ">=22.3.0,<23" }, + { name = "isort", specifier = ">=5.10.1,<6" }, + { name = "mypy", specifier = ">=0.961,<0.962" }, +] + +[[package]] +name = "isort" +version = "5.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/e9/964cb0b2eedd80c92f5172f1f8ae0443781a9d461c1372a3ce5762489593/isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951", size = 174062 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/5b/f18e227df38b94b4ee30d2502fd531bebac23946a2497e5595067a561274/isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7", size = 103430 }, +] + +[[package]] +name = "mypy" +version = "0.961" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/67/48/e73045183ce9824d98365f18255a79d0b01638f40a0a68f898dc8f3cebcc/mypy-0.961.tar.gz", hash = "sha256:f730d56cb924d371c26b8eaddeea3cc07d78ff51c521c6d04899ac6904b75492", size = 2715861 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/df/16748348d0119a6f2528f370e20f644a15ffb8a335a79e91023babc34d0b/mypy-0.961-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:697540876638ce349b01b6786bc6094ccdaba88af446a9abb967293ce6eaa2b0", size = 18984257 }, + { url = "https://files.pythonhosted.org/packages/46/d7/3cf7605655f78daded7a23e66f632b50a3b3a8b4262739782f558f8949cf/mypy-0.961-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b117650592e1782819829605a193360a08aa99f1fc23d1d71e1a75a142dc7e15", size = 11318176 }, + { url = "https://files.pythonhosted.org/packages/ba/85/d59bd3b0c84a59d862d2494a3461710ad4a2a1616312414ecc95b2393310/mypy-0.961-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bdd5ca340beffb8c44cb9dc26697628d1b88c6bddf5c2f6eb308c46f269bb6f3", size = 10211786 }, + { url = "https://files.pythonhosted.org/packages/9c/4b/37c32ab752c1a16cd528bfa239553207108ae33c7b617f9cfea3bb6e2f00/mypy-0.961-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3e09f1f983a71d0672bbc97ae33ee3709d10c779beb613febc36805a6e28bb4e", size = 18141102 }, + { url = "https://files.pythonhosted.org/packages/02/e0/6c11b3a6828d1bf8edd066d87588f9461bce3154e4dcc542729bbe6cdc3e/mypy-0.961-cp310-cp310-win_amd64.whl", hash = "sha256:e999229b9f3198c0c880d5e269f9f8129c8862451ce53a011326cad38b9ccd24", size = 8830705 }, + { url = "https://files.pythonhosted.org/packages/31/73/71ae84ece879f7c6fd5fbbe7c750c4663dcbd53fa5c7fa7023be59af27f5/mypy-0.961-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f1332964963d4832a94bebc10f13d3279be3ce8f6c64da563d6ee6e2eeda932", size = 18977368 }, + { url = "https://files.pythonhosted.org/packages/5e/5a/1b46c161aacdff572632695a483e64ea908089b5c1b6bb92c7e59685c889/mypy-0.961-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:006be38474216b833eca29ff6b73e143386f352e10e9c2fbe76aa8549e5554f5", size = 11315926 }, + { url = "https://files.pythonhosted.org/packages/e3/66/9942860fc360e529dbd695b1da3dd80336095d0d3c956e416eb656fba7dd/mypy-0.961-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9940e6916ed9371809b35b2154baf1f684acba935cd09928952310fbddaba648", size = 10208580 }, + { url = "https://files.pythonhosted.org/packages/b4/5f/6f116003e4ddb472912c13f999127d658e56a210177e23c9d6b1538a5184/mypy-0.961-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5ea0875a049de1b63b972456542f04643daf320d27dc592d7c3d9cd5d9bf950", size = 18103988 }, + { url = "https://files.pythonhosted.org/packages/17/63/6a173d3b80eb6b48e22fb81f2935047657089b7509d70602c6e7dcee3cfe/mypy-0.961-cp39-cp39-win_amd64.whl", hash = "sha256:1ece702f29270ec6af25db8cf6185c04c02311c6bb21a69f423d40e527b75c56", size = 8830398 }, + { url = "https://files.pythonhosted.org/packages/cb/30/03a46a37902348b309aa5fe8a92636b9417fdcea77e20dfc1455581a0ae7/mypy-0.961-py3-none-any.whl", hash = "sha256:03c6cc893e7563e7b2949b969e63f02c000b32502a1b4d1314cabe391aa87d66", size = 2514271 }, +] + +[[package]] +name = "mypy-extensions" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/63/60/0582ce2eaced55f65a4406fc97beba256de4b7a95a0034c6576458c6519f/mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8", size = 4252 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/eb/975c7c080f3223a5cdaff09612f3a5221e4ba534f7039db34c35d95fa6a5/mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", size = 4470 }, +] + +[[package]] +name = "pathspec" +version = "0.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/9f/a9ae1e6efa11992dba2c4727d94602bd2f6ee5f0dedc29ee2d5d572c20f7/pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d", size = 43155 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/82/2179fdc39bc1bb43296f638ae1dfe2581ec2617b4e87c28b0d23d44b997f/pathspec-0.10.1-py3-none-any.whl", hash = "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93", size = 27871 }, +] + +[[package]] +name = "platformdirs" +version = "2.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/7b/3613df51e6afbf2306fc2465671c03390229b55e3ef3ab9dd3f846a53be6/platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19", size = 22529 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/22/967181c94c3a4063fe64e15331b4cb366bdd7dfbf46fcb8ad89650026fec/platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788", size = 14416 }, +] + +[[package]] +name = "protobuf" +version = "4.21.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0e/25/693cd589793e7ae429ef76ab08f74b7866d342fd079cc4c723141a9660d3/protobuf-4.21.6.tar.gz", hash = "sha256:6b1040a5661cd5f6e610cbca9cfaa2a17d60e2bb545309bc1b278bb05be44bdd", size = 220327 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/7a/c1e9be1870890dff897a29531ca80634cf3cfef0c3ca282d975e5460dd2e/protobuf-4.21.6-cp310-abi3-win32.whl", hash = "sha256:49f88d56a9180dbb7f6199c920f5bb5c1dd0172f672983bb281298d57c2ac8eb", size = 508575 }, + { url = "https://files.pythonhosted.org/packages/f2/96/ef9fa1a6e672a7f476c4c8a93025466e587ce87623b4696b6cf5a734c60b/protobuf-4.21.6-cp310-abi3-win_amd64.whl", hash = "sha256:7a6cc8842257265bdfd6b74d088b829e44bcac3cca234c5fdd6052730017b9ea", size = 525456 }, + { url = "https://files.pythonhosted.org/packages/82/82/c9ddd52f7fae517092c284fa192f914a8fa3b45aaf435fc1ddf6bb2c831c/protobuf-4.21.6-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:ba596b9ffb85c909fcfe1b1a23136224ed678af3faf9912d3fa483d5f9813c4e", size = 484046 }, + { url = "https://files.pythonhosted.org/packages/be/24/4d042f59b63d8d79c6c11fbf5f7cea4855d16c02cde0ad94020bc15dca73/protobuf-4.21.6-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:4143513c766db85b9d7c18dbf8339673c8a290131b2a0fe73855ab20770f72b0", size = 403654 }, + { url = "https://files.pythonhosted.org/packages/0f/3b/523691c80572934090a76c19b92fddbaf2a3c3947ae0fee75bc8a78ed8df/protobuf-4.21.6-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:b6cea204865595a92a7b240e4b65bcaaca3ad5d2ce25d9db3756eba06041138e", size = 408365 }, + { url = "https://files.pythonhosted.org/packages/b9/db/c30688067db6ce663d05cee2c947ea0c7de6d5fab2825cd4becda2395e56/protobuf-4.21.6-cp39-cp39-win32.whl", hash = "sha256:80e6540381080715fddac12690ee42d087d0d17395f8d0078dfd6f1181e7be4c", size = 508587 }, + { url = "https://files.pythonhosted.org/packages/d2/de/c35305886e12d81a6317546f5584a3a4e599e16d5c9a26227595d15c4c27/protobuf-4.21.6-cp39-cp39-win_amd64.whl", hash = "sha256:77b355c8604fe285536155286b28b0c4cbc57cf81b08d8357bf34829ea982860", size = 525426 }, + { url = "https://files.pythonhosted.org/packages/ad/87/b811820454bc74c065c136e78559426fddbacd7b75ea7d179f25b75ad825/protobuf-4.21.6-py2.py3-none-any.whl", hash = "sha256:07a0bb9cc6114f16a39c866dc28b6e3d96fa4ffb9cc1033057412547e6e75cb9", size = 164995 }, + { url = "https://files.pythonhosted.org/packages/d9/c2/ddee769393393e2a15b902a73b884c90eb8d6094e7b005511b1eb84882e0/protobuf-4.21.6-py3-none-any.whl", hash = "sha256:c7c864148a237f058c739ae7a05a2b403c0dfa4ce7d1f3e5213f352ad52d57c6", size = 291643 }, +] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4c/c4/13b4776ea2d76c115c1d1b84579f3764ee6d57204f6be27119f13a61d0a9/python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", size = 357324 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9", size = 247702 }, +] + +[[package]] +name = "six" +version = "1.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", size = 34041 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053 }, +] + +[[package]] +name = "temporalio" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, + { name = "python-dateutil", marker = "python_full_version < '3.11'" }, + { name = "types-protobuf" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/93/f4f2bd35aef32bc1b37672e7480270e466bc8e5a0dfdbef159bbb21d0c5e/temporalio-1.9.0.tar.gz", hash = "sha256:932b56720a20401f333ffdaea157cc64d0f9d615a2fd16358bee56d9491bff77", size = 1392558 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/13/47edab6503b9bd7bc4976e6e5ab358b30c3c7f8b16e1381c8e2bad644153/temporalio-1.9.0-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ee941702e8925e2c018b5c2d7b296f811205043654d7f9c4564d7fa6597f1989", size = 10603944 }, + { url = "https://files.pythonhosted.org/packages/b7/c7/e5aa41ad3ef102d40774b825a8bc83993640fa32800036f8de403ae98ff7/temporalio-1.9.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:101040090238d97b61d769e009f732409894d8f26596a3827662f2dde2862097", size = 10344131 }, + { url = "https://files.pythonhosted.org/packages/20/fe/dad35e43291a6f3fd4a954b1a6ef7e07380390e5eeeff851b638a98eb07b/temporalio-1.9.0-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:91f49b81823f8f44819cc48da0b730175acd793dc428e451e1824b48a4e41465", size = 10922503 }, + { url = "https://files.pythonhosted.org/packages/3f/77/ca59423802df8fe8601c2752dd8d7543fe9789036620b4ec6ce8b363c184/temporalio-1.9.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f516ae152935ec16afb65b7555486f161b427eaa4b411e945063e31da1a644eb", size = 11036038 }, + { url = "https://files.pythonhosted.org/packages/b2/dd/5918b13f1a76874481755673152a783186819364a6a8577c1c2c12f72deb/temporalio-1.9.0-cp38-abi3-win_amd64.whl", hash = "sha256:254267109e8e5cb3fa35b4719fdde5ec114b264f3b030ab5be6a69f697acdc5e", size = 11246714 }, +] + +[[package]] +name = "tomli" +version = "2.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c0/3f/d7af728f075fb08564c5949a9c95e44352e23dee646869fa104a3b2060a3/tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f", size = 15164 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", size = 12757 }, +] + +[[package]] +name = "types-protobuf" +version = "3.20.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/a4/cb85f4a765adc11716a286dbfe0fc24c6986a6cd5afb03c677839559e1f8/types-protobuf-3.20.4.tar.gz", hash = "sha256:0dad3a5009895c985a56e2837f61902bad9594151265ac0ee907bb16d0b01eb7", size = 45451 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/1b/d4c8a5152ed14828f8d1f2f26cd9d78b8ab975ad55205ba922c0b802665c/types_protobuf-3.20.4-py3-none-any.whl", hash = "sha256:5082437afe64ce3b31c8db109eae86e02fda11e4d5f9ac59cb8578a8a138aa70", size = 60674 }, +] + +[[package]] +name = "typing-extensions" +version = "4.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9e/1d/d128169ff58c501059330f1ad96ed62b79114a2eb30b8238af63a2e27f70/typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6", size = 47430 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/d6/2afc375a8d55b8be879d6b4986d4f69f01115e795e36827fd3a40166028b/typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02", size = 25596 }, +] From 18f0e9cd19952a64fa6ac8059ebb9c9228104804 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Mon, 17 Feb 2025 21:40:03 -0500 Subject: [PATCH 09/11] Use ruff instead of black and isort --- .../feature.py | 6 +- .../data_converter/binary_protobuf/feature.py | 1 + features/data_converter/codec/feature.py | 1 + features/data_converter/json/feature.py | 1 + .../data_converter/json_protobuf/feature.py | 1 + harness/python/util.py | 6 +- pyproject.toml | 13 +-- uv.lock | 106 +++++------------- 8 files changed, 41 insertions(+), 94 deletions(-) diff --git a/features/continue_as_new/updates_do_not_block_continue_as_new/feature.py b/features/continue_as_new/updates_do_not_block_continue_as_new/feature.py index cd607086..ac48af9f 100644 --- a/features/continue_as_new/updates_do_not_block_continue_as_new/feature.py +++ b/features/continue_as_new/updates_do_not_block_continue_as_new/feature.py @@ -110,9 +110,9 @@ async def get_event_types(run_id: str) -> set[EventType.ValueType]: update_event_types & await get_event_types(handle.first_execution_run_id) ), "Update should not appear in pre-CAN history" - assert update_event_types <= await get_event_types( - update_run_id - ), "Update events should appear in post-CAN history" + assert update_event_types <= await get_event_types(update_run_id), ( + "Update events should appear in post-CAN history" + ) register_feature( diff --git a/features/data_converter/binary_protobuf/feature.py b/features/data_converter/binary_protobuf/feature.py index c6397b77..25d73685 100644 --- a/features/data_converter/binary_protobuf/feature.py +++ b/features/data_converter/binary_protobuf/feature.py @@ -19,6 +19,7 @@ EXPECTED_RESULT = DataBlob(data=bytes.fromhex("deadbeef")) + # An echo workflow @workflow.defn class Workflow: diff --git a/features/data_converter/codec/feature.py b/features/data_converter/codec/feature.py index 0e8d4678..c17c86c6 100644 --- a/features/data_converter/codec/feature.py +++ b/features/data_converter/codec/feature.py @@ -21,6 +21,7 @@ CODEC_ENCODING = "my_encoding" + # An echo workflow @workflow.defn class Workflow: diff --git a/features/data_converter/json/feature.py b/features/data_converter/json/feature.py index 002cbd33..6b734e2e 100644 --- a/features/data_converter/json/feature.py +++ b/features/data_converter/json/feature.py @@ -15,6 +15,7 @@ EXPECTED_RESULT: Result = {"spec": True} + # An echo workflow @workflow.defn class Workflow: diff --git a/features/data_converter/json_protobuf/feature.py b/features/data_converter/json_protobuf/feature.py index cbfb060a..d2d28e85 100644 --- a/features/data_converter/json_protobuf/feature.py +++ b/features/data_converter/json_protobuf/feature.py @@ -13,6 +13,7 @@ EXPECTED_RESULT = DataBlob(data=bytes.fromhex("deadbeef")) JSONP_decoder = JSONProtoPayloadConverter() + # An echo workflow @workflow.defn class Workflow: diff --git a/harness/python/util.py b/harness/python/util.py index 2118e679..51dad340 100644 --- a/harness/python/util.py +++ b/harness/python/util.py @@ -71,6 +71,6 @@ async def assert_eq_eventually( if expected == last_value: return await asyncio.sleep(interval.total_seconds()) - assert ( - expected == last_value - ), f"timed out waiting for equal, asserted against last value of {last_value}" + assert expected == last_value, ( + f"timed out waiting for equal, asserted against last value of {last_value}" + ) diff --git a/pyproject.toml b/pyproject.toml index 4e8b9973..aef040fa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,8 +10,7 @@ dependencies = ["temporalio>=1.9.0,<2"] [dependency-groups] dev = [ "mypy>=0.961,<0.962", - "black>=22.3.0,<23", - "isort>=5.10.1,<6", + "ruff>=0.9.6", ] [tool.hatch.build.targets.sdist] @@ -31,14 +30,10 @@ requires = ["hatchling"] build-backend = "hatchling.build" [tool.poe.tasks] -format = [{cmd = "black ."}, {cmd = "isort ."}] +format = [{cmd = "uv run ruff check --select I --fix"}, {cmd = "uv run ruff format"}, ] lint = [ - {cmd = "black --check ."}, - {cmd = "isort --check-only ."}, + {cmd = "uv run ruff check --select I"}, + {cmd = "uv run ruff format --check"}, {ref = "lint-types"}, ] lint-types = "mypy --explicit-package-bases --namespace-packages ." - -[tool.isort] -profile = "black" -skip_gitignore = true diff --git a/uv.lock b/uv.lock index 1da2bcb1..fae37d23 100644 --- a/uv.lock +++ b/uv.lock @@ -2,54 +2,6 @@ version = 1 revision = 1 requires-python = ">=3.9, <4" -[[package]] -name = "black" -version = "22.8.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "mypy-extensions" }, - { name = "pathspec" }, - { name = "platformdirs" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3a/1b/38a013f75022fae724ed766fdac5f6777544c45eecbe00a6d8fd91a2a26b/black-22.8.0.tar.gz", hash = "sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e", size = 577317 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/67/e9/d6e8365eae2dd2b0d9fcdff129a88ab316a545ab44445c92ae8353c7f5ef/black-22.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce957f1d6b78a8a231b18e0dd2d94a33d2ba738cd88a7fe64f53f659eea49fdd", size = 2476778 }, - { url = "https://files.pythonhosted.org/packages/b9/d2/7476c40f3ed871047e5ef4e27a6e946b3aac5357fe9a2e08548c95b79327/black-22.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5107ea36b2b61917956d018bd25129baf9ad1125e39324a9b18248d362156a27", size = 1403144 }, - { url = "https://files.pythonhosted.org/packages/0e/08/daaae4173461abc664563e651a1e3c5edc9570ca03283793a444becb9c2f/black-22.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8166b7bfe5dcb56d325385bd1d1e0f635f24aae14b3ae437102dedc0c186747", size = 1238447 }, - { url = "https://files.pythonhosted.org/packages/d5/0a/c86b68b24812deaceb48dc7e335fde0f1289e04171ef2fc5ff8eecc50102/black-22.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd82842bb272297503cbec1a2600b6bfb338dae017186f8f215c8958f8acf869", size = 1529233 }, - { url = "https://files.pythonhosted.org/packages/86/9c/25cab63ed9440df5dba7688d4b55123f4bb352dc48ddf93d2b32c882dbe1/black-22.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d839150f61d09e7217f52917259831fe2b689f5c8e5e32611736351b89bb2a90", size = 1191248 }, - { url = "https://files.pythonhosted.org/packages/4d/44/466ae995a55a5c8d5914e0f02520cb64710fbc3e2df8eddc4d2a54bf6a7e/black-22.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8ce13ffed7e66dda0da3e0b2eb1bdfc83f5812f66e09aca2b0978593ed636b6c", size = 2476218 }, - { url = "https://files.pythonhosted.org/packages/18/09/63714f5c9d4d7e04c6c04603ce7fb69bf746f69caed0a3416e41bf2db168/black-22.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:32a4b17f644fc288c6ee2bafdf5e3b045f4eff84693ac069d87b1a347d861497", size = 1402883 }, - { url = "https://files.pythonhosted.org/packages/d4/a1/dc7bc3cc5eef263625532176015d65033425af8187b732ef2495a1cfa597/black-22.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ad827325a3a634bae88ae7747db1a395d5ee02cf05d9aa7a9bd77dfb10e940c", size = 1238091 }, - { url = "https://files.pythonhosted.org/packages/71/2c/73563faaf6c8aeb31954b8e83b3284bb01ac0ec58110ed84ecec95a055f4/black-22.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53198e28a1fb865e9fe97f88220da2e44df6da82b18833b588b1883b16bb5d41", size = 1529230 }, - { url = "https://files.pythonhosted.org/packages/05/b1/9bd51244802560ea3cae386fd7c4b3dc104f3da2c71d9cebe0dd9a58cf21/black-22.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:bc4d4123830a2d190e9cc42a2e43570f82ace35c3aeb26a512a2102bce5af7ec", size = 1190507 }, - { url = "https://files.pythonhosted.org/packages/c6/63/a852b07abc942dc069b5457af40feca82667cf5ed9faec7d4688a4d9c7da/black-22.8.0-py3-none-any.whl", hash = "sha256:d2c21d439b2baf7aa80d6dd4e3659259be64c6f49dfd0f32091063db0e006db4", size = 159824 }, -] - -[[package]] -name = "click" -version = "8.1.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/59/87/84326af34517fca8c58418d148f2403df25303e02736832403587318e9e8/click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", size = 331147 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/f1/df59e28c642d583f7dacffb1e0965d0e00b218e0186d7858ac5233dce840/click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48", size = 96588 }, -] - -[[package]] -name = "colorama" -version = "0.4.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2b/65/24d033a9325ce42ccbfa3ca2d0866c7e89cc68e5b9d92ecaba9feef631df/colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4", size = 27469 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/8b/7550e87b2d308a1b711725dfaddc19c695f8c5fa413c640b2be01662f4e6/colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da", size = 16204 }, -] - [[package]] name = "features" version = "0.1.0" @@ -60,9 +12,8 @@ dependencies = [ [package.dev-dependencies] dev = [ - { name = "black" }, - { name = "isort" }, { name = "mypy" }, + { name = "ruff" }, ] [package.metadata] @@ -70,18 +21,8 @@ requires-dist = [{ name = "temporalio", specifier = ">=1.9.0,<2" }] [package.metadata.requires-dev] dev = [ - { name = "black", specifier = ">=22.3.0,<23" }, - { name = "isort", specifier = ">=5.10.1,<6" }, { name = "mypy", specifier = ">=0.961,<0.962" }, -] - -[[package]] -name = "isort" -version = "5.10.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ab/e9/964cb0b2eedd80c92f5172f1f8ae0443781a9d461c1372a3ce5762489593/isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951", size = 174062 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/5b/f18e227df38b94b4ee30d2502fd531bebac23946a2497e5595067a561274/isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7", size = 103430 }, + { name = "ruff", specifier = ">=0.9.6" }, ] [[package]] @@ -117,24 +58,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5c/eb/975c7c080f3223a5cdaff09612f3a5221e4ba534f7039db34c35d95fa6a5/mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", size = 4470 }, ] -[[package]] -name = "pathspec" -version = "0.10.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/24/9f/a9ae1e6efa11992dba2c4727d94602bd2f6ee5f0dedc29ee2d5d572c20f7/pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d", size = 43155 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/63/82/2179fdc39bc1bb43296f638ae1dfe2581ec2617b4e87c28b0d23d44b997f/pathspec-0.10.1-py3-none-any.whl", hash = "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93", size = 27871 }, -] - -[[package]] -name = "platformdirs" -version = "2.5.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ff/7b/3613df51e6afbf2306fc2465671c03390229b55e3ef3ab9dd3f846a53be6/platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19", size = 22529 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/22/967181c94c3a4063fe64e15331b4cb366bdd7dfbf46fcb8ad89650026fec/platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788", size = 14416 }, -] - [[package]] name = "protobuf" version = "4.21.6" @@ -164,6 +87,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9", size = 247702 }, ] +[[package]] +name = "ruff" +version = "0.9.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/e1/e265aba384343dd8ddd3083f5e33536cd17e1566c41453a5517b5dd443be/ruff-0.9.6.tar.gz", hash = "sha256:81761592f72b620ec8fa1068a6fd00e98a5ebee342a3642efd84454f3031dca9", size = 3639454 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/e3/3d2c022e687e18cf5d93d6bfa2722d46afc64eaa438c7fbbdd603b3597be/ruff-0.9.6-py3-none-linux_armv6l.whl", hash = "sha256:2f218f356dd2d995839f1941322ff021c72a492c470f0b26a34f844c29cdf5ba", size = 11714128 }, + { url = "https://files.pythonhosted.org/packages/e1/22/aff073b70f95c052e5c58153cba735748c9e70107a77d03420d7850710a0/ruff-0.9.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b908ff4df65dad7b251c9968a2e4560836d8f5487c2f0cc238321ed951ea0504", size = 11682539 }, + { url = "https://files.pythonhosted.org/packages/75/a7/f5b7390afd98a7918582a3d256cd3e78ba0a26165a467c1820084587cbf9/ruff-0.9.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b109c0ad2ececf42e75fa99dc4043ff72a357436bb171900714a9ea581ddef83", size = 11132512 }, + { url = "https://files.pythonhosted.org/packages/a6/e3/45de13ef65047fea2e33f7e573d848206e15c715e5cd56095589a7733d04/ruff-0.9.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1de4367cca3dac99bcbd15c161404e849bb0bfd543664db39232648dc00112dc", size = 11929275 }, + { url = "https://files.pythonhosted.org/packages/7d/f2/23d04cd6c43b2e641ab961ade8d0b5edb212ecebd112506188c91f2a6e6c/ruff-0.9.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac3ee4d7c2c92ddfdaedf0bf31b2b176fa7aa8950efc454628d477394d35638b", size = 11466502 }, + { url = "https://files.pythonhosted.org/packages/b5/6f/3a8cf166f2d7f1627dd2201e6cbc4cb81f8b7d58099348f0c1ff7b733792/ruff-0.9.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dc1edd1775270e6aa2386119aea692039781429f0be1e0949ea5884e011aa8e", size = 12676364 }, + { url = "https://files.pythonhosted.org/packages/f5/c4/db52e2189983c70114ff2b7e3997e48c8318af44fe83e1ce9517570a50c6/ruff-0.9.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:4a091729086dffa4bd070aa5dab7e39cc6b9d62eb2bef8f3d91172d30d599666", size = 13335518 }, + { url = "https://files.pythonhosted.org/packages/66/44/545f8a4d136830f08f4d24324e7db957c5374bf3a3f7a6c0bc7be4623a37/ruff-0.9.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1bbc6808bf7b15796cef0815e1dfb796fbd383e7dbd4334709642649625e7c5", size = 12823287 }, + { url = "https://files.pythonhosted.org/packages/c5/26/8208ef9ee7431032c143649a9967c3ae1aae4257d95e6f8519f07309aa66/ruff-0.9.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:589d1d9f25b5754ff230dce914a174a7c951a85a4e9270613a2b74231fdac2f5", size = 14592374 }, + { url = "https://files.pythonhosted.org/packages/31/70/e917781e55ff39c5b5208bda384fd397ffd76605e68544d71a7e40944945/ruff-0.9.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc61dd5131742e21103fbbdcad683a8813be0e3c204472d520d9a5021ca8b217", size = 12500173 }, + { url = "https://files.pythonhosted.org/packages/84/f5/e4ddee07660f5a9622a9c2b639afd8f3104988dc4f6ba0b73ffacffa9a8c/ruff-0.9.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5e2d9126161d0357e5c8f30b0bd6168d2c3872372f14481136d13de9937f79b6", size = 11906555 }, + { url = "https://files.pythonhosted.org/packages/f1/2b/6ff2fe383667075eef8656b9892e73dd9b119b5e3add51298628b87f6429/ruff-0.9.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:68660eab1a8e65babb5229a1f97b46e3120923757a68b5413d8561f8a85d4897", size = 11538958 }, + { url = "https://files.pythonhosted.org/packages/3c/db/98e59e90de45d1eb46649151c10a062d5707b5b7f76f64eb1e29edf6ebb1/ruff-0.9.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c4cae6c4cc7b9b4017c71114115db0445b00a16de3bcde0946273e8392856f08", size = 12117247 }, + { url = "https://files.pythonhosted.org/packages/ec/bc/54e38f6d219013a9204a5a2015c09e7a8c36cedcd50a4b01ac69a550b9d9/ruff-0.9.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:19f505b643228b417c1111a2a536424ddde0db4ef9023b9e04a46ed8a1cb4656", size = 12554647 }, + { url = "https://files.pythonhosted.org/packages/a5/7d/7b461ab0e2404293c0627125bb70ac642c2e8d55bf590f6fce85f508f1b2/ruff-0.9.6-py3-none-win32.whl", hash = "sha256:194d8402bceef1b31164909540a597e0d913c0e4952015a5b40e28c146121b5d", size = 9949214 }, + { url = "https://files.pythonhosted.org/packages/ee/30/c3cee10f915ed75a5c29c1e57311282d1a15855551a64795c1b2bbe5cf37/ruff-0.9.6-py3-none-win_amd64.whl", hash = "sha256:03482d5c09d90d4ee3f40d97578423698ad895c87314c4de39ed2af945633caa", size = 10999914 }, + { url = "https://files.pythonhosted.org/packages/e8/a8/d71f44b93e3aa86ae232af1f2126ca7b95c0f515ec135462b3e1f351441c/ruff-0.9.6-py3-none-win_arm64.whl", hash = "sha256:0e2bb706a2be7ddfea4a4af918562fdc1bcb16df255e5fa595bbd800ce322a5a", size = 10177499 }, +] + [[package]] name = "six" version = "1.16.0" From d184c3ce52e366572871a2886ec90366ad87ceab Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Mon, 17 Feb 2025 22:18:34 -0500 Subject: [PATCH 10/11] wheel package not needed --- .github/workflows/ci.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b88aa751..dcb17e21 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -130,7 +130,8 @@ jobs: with: python-version: '3.10' - uses: astral-sh/setup-uv@v5 - - run: python -m pip install --upgrade wheel poethepoet + # TODO: `uv tool install poethepoet` preferable but didn't seem to be installing into PATH + - run: python -m pip install poethepoet - run: uv sync - run: poe lint From fa70ddb817455a72088b4a0ffd8b29a15d08a0f0 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Mon, 17 Feb 2025 22:19:10 -0500 Subject: [PATCH 11/11] install poe with uv tool --- .github/workflows/ci.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index dcb17e21..fc9f8f53 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -130,8 +130,7 @@ jobs: with: python-version: '3.10' - uses: astral-sh/setup-uv@v5 - # TODO: `uv tool install poethepoet` preferable but didn't seem to be installing into PATH - - run: python -m pip install poethepoet + - run: uv tool install poethepoet - run: uv sync - run: poe lint