diff --git a/.dagger/modules/e2e/main.dang b/.dagger/modules/e2e/main.dang index 9a80a6a..e7dbec5 100644 --- a/.dagger/modules/e2e/main.dang +++ b/.dagger/modules/e2e/main.dang @@ -940,8 +940,8 @@ type E2e { let ws = withScope(scope, tomlGenerateModulePath, "toml-generate-app") let pyprojectPath = tomlGenerateModulePath + "/pyproject.toml" let pyproject = ws.file("/" + pyprojectPath).contents - let onFloor = pyproject.replace("requires-python = \">=3.14\"", "requires-python = \">=3.12\"") - let belowFloor = pyproject.replace("requires-python = \">=3.14\"", "requires-python = \">=3.11\"") + let onFloor = pyproject.replace("requires-python = \">=3.14\"", "requires-python = \">=3.11\"") + let belowFloor = pyproject.replace("requires-python = \">=3.14\"", "requires-python = \">=3.10\"") assert(belowFloor != pyproject, "the fixture asks for no Python to lower") let floor = pythonSdk.mod(ws.withNewFile("/" + pyprojectPath, onFloor), path: tomlGenerateModulePath).generate @@ -951,8 +951,8 @@ type E2e { err: Error => err.message } assertContainsAll(older, [ - "the module at " + tomlGenerateModulePath + ": this Python SDK needs Python 3.12 or later", - "requires-python = \">=3.11\" asks for Python 3.11. Ask for Python 3.12 or later", + "the module at " + tomlGenerateModulePath + ": this Python SDK needs Python 3.11 or later", + "requires-python = \">=3.10\" asks for Python 3.10. Ask for Python 3.11 or later", "pin the last release of this SDK that runs on it: dagger module install github.com/dagger/python-sdk@v1.2.0", "then run dagger generate again", ]) @@ -961,24 +961,24 @@ type E2e { let onOwnImage = pythonSdk.mod(ws.withNewFile("/" + pyprojectPath, ownImage), path: tomlGenerateModulePath).generate assertAdded(onOwnImage, tomlGenerateModulePath + "/" + sdkMemberFile) - let pinned = ws.withNewFile("/" + tomlGenerateModulePath + "/.python-version", "3.11\n") + let pinned = ws.withNewFile("/" + tomlGenerateModulePath + "/.python-version", "3.10\n") let pinRefused = pythonSdk.mod(pinned, path: tomlGenerateModulePath).generated.cwd rescue { err: Error => err.message } - assertContains(pinRefused, "this Python SDK needs Python 3.12 or later, and .python-version pins Python 3.11. Set it to Python 3.12 or later", "a module pinned to Python 3.11 was generated") + assertContains(pinRefused, "this Python SDK needs Python 3.11 or later, and .python-version pins Python 3.10. Set it to Python 3.11 or later", "a module pinned to Python 3.10 was generated") let initScope = outputRoot + "/python-floor-init" - let initRefused = pythonSdk(template: "empty", pythonVersion: "3.11") + let initRefused = pythonSdk(template: "empty", pythonVersion: "3.10") .generateScope(scope.withNewDirectory("/" + initScope, directory).withWorkdir(initScope), isModule: true, name: "python-floor-init", clients: []) .cwd rescue { err: Error => err.message } - assertContains(initRefused, "asks for Python 3.11", "a new module asking for Python 3.11 was initialized") + assertContains(initRefused, "asks for Python 3.10", "a new module asking for Python 3.10 was initialized") - let setRefused = pythonSdk.mod(ws, path: tomlGenerateModulePath).config.set(pythonVersion: "3.11").after.file(pyprojectPath).contents rescue { + let setRefused = pythonSdk.mod(ws, path: tomlGenerateModulePath).config.set(pythonVersion: "3.10").after.file(pyprojectPath).contents rescue { err: Error => err.message } - assertContains(setRefused, "asks for Python 3.11", "config set wrote Python 3.11") + assertContains(setRefused, "asks for Python 3.10", "config set wrote Python 3.10") null } @@ -1462,8 +1462,8 @@ type E2e { assert(release.trimSpace != "", "the generated module did not run") let floorPath = ".dagger/modules/sdk-floor" - let onFloor = cli(initialized, ["module", "init", "python", "--auto-apply", "--name", "sdk-floor", "--path", floorPath, "--python-version", "3.12"]) - .withExec(["grep", "-q", ">=3.12", floorPath + "/pyproject.toml"]) + let onFloor = cli(initialized, ["module", "init", "python", "--auto-apply", "--name", "sdk-floor", "--path", floorPath, "--python-version", "3.11"]) + .withExec(["grep", "-q", ">=3.11", floorPath + "/pyproject.toml"]) let floorRelease = cli(onFloor, ["-m", floorPath, "call", "container", "file", "--path", "/etc/alpine-release", "contents"]) .stdout assert(floorRelease.trimSpace != "", "the default template did not run on the Python floor") @@ -1543,18 +1543,32 @@ type E2e { } assertContains(direct, want, "a module generated directly with targetVersion " + setting + " was not refused the same way: " + direct) } - [target, target.trimPrefix("v"), target + "+0123abcd", "", floor].each { setting => + [target, target.trimPrefix("v"), target + "+0123abcd", "", floor, floor.trimPrefix("v"), floor + "+0123abcd"].each { setting => assert(pythonSdk.targetRefusal("module \"m\"", setting) == "", "the targeted release was refused as \"" + setting + "\": " + pythonSdk.targetRefusal("module \"m\"", setting)) } + + # The target is a v1.0.0 prerelease below beta.100. Identifiers compare as + # numbers, so beta.100 is later than it and beta.9 is below the floor, + # where text order would say the opposite. + let later = [target + ".1", target.split("-")[0] ?? "", "v1.0.0-beta.100", "1.0.0-beta.100", "v1.0.0-beta.100+0123abcd"] + later.each { setting => + let said = pythonSdk.targetRefusal("module \"m\"", setting) + assertContains(said, "pins targetVersion " + pythonSdk.targetVersionOf(setting) + ", which is later than " + target, "targetVersion " + setting + " was not refused as later than the targeted release: " + said) + } + ["v1.0.0-beta.9", "1.0.0-beta.9"].each { setting => + let said = pythonSdk.targetRefusal("module \"m\"", setting) + assertContains(said, "pins targetVersion v1.0.0-beta.9, which is below " + floor, "targetVersion " + setting + " was not refused as below the floor: " + said) + } null } """ `dagger module init python --target-version` records the targeted release - in the module's scope settings, and the module runs. A module pinned to the - floor stays pinned when `dagger generate` or `dagger call python-sdk mod - generate` generates it again, also when the pin is recorded in a config - below the workspace root under a key that climbs out of it with `..`. + in the module's scope settings, and the module runs; a release later than + the targeted one is refused. A module pinned to the floor stays pinned + when `dagger generate` or `dagger call python-sdk mod generate` generates + it again, also when the pin is recorded in a config below the workspace + root under a key that climbs out of it with `..`. """ pub targetVersionCliCheck(ws: Workspace!): Void @check { let path = ".dagger/modules/target-cli" @@ -1567,6 +1581,12 @@ type E2e { let ran = cli(initialized, ["-m", path, "call", "container", "file", "--path", "/etc/alpine-release", "contents"]).stdout assert(ran.trimSpace != "", "the module did not run") + let later = target + ".1" + let refused = playground(ws) + .withExec(["dagger", "module", "init", "python", "--auto-apply", "--name", "target-cli-later", "--path", ".dagger/modules/target-cli-later", "--target-version", later], experimentalPrivilegedNesting: true, expect: ReturnType.FAILURE) + .stderr + assertContains(refused, "module \"target-cli-later\" pins targetVersion " + later + ", which is later than " + target, "dagger module init accepted a targetVersion later than the targeted release: " + refused) + let pinnedPath = ".dagger/modules/target-cli-pinned" let pinned = cli(playground(ws), ["module", "init", "python", "--auto-apply", "--name", "target-cli-pinned", "--path", pinnedPath, "--target-version", "v" + floorVersion]) let pinnedRan = cli(pinned, ["-m", pinnedPath, "call", "container", "file", "--path", "/etc/alpine-release", "contents"]).stdout diff --git a/.dagger/modules/engine-e2e/dagger-module.toml b/.dagger/modules/engine-e2e/dagger-module.toml index 11ecf32..bb0341f 100644 --- a/.dagger/modules/engine-e2e/dagger-module.toml +++ b/.dagger/modules/engine-e2e/dagger-module.toml @@ -14,4 +14,4 @@ engineVersion = "v1.0.0-0" [[dependencies]] name = "target-engine-dev" - source = "github.com/dagger/dagger/.dagger/modules/engine-dev@f0a3d728cf7012e0954f772b5dc5c8471648afaa" + source = "github.com/dagger/dagger/.dagger/modules/engine-dev@b32e84b60b99b68e836408d4318f0818982ea86d" diff --git a/.dagger/modules/engine-e2e/main.dang b/.dagger/modules/engine-e2e/main.dang index 808721e..16ec8f5 100644 --- a/.dagger/modules/engine-e2e/main.dang +++ b/.dagger/modules/engine-e2e/main.dang @@ -17,12 +17,12 @@ type EngineE2e { let belowFloorCommit: String! = "0da36c8da9cb6a682c7d27eca9bd2c125de5ed09" """ - Commit of v1.0.0-beta.23, the release this SDK targets. Move it, and + Commit of v1.0.0-beta.24, the release this SDK targets. Move it, and targetRelease, with engineTarget in python-sdk.dang. """ - let targetCommit: String! = "f0a3d728cf7012e0954f772b5dc5c8471648afaa" + let targetCommit: String! = "b32e84b60b99b68e836408d4318f0818982ea86d" - let targetRelease: String! = "v1.0.0-beta.23" + let targetRelease: String! = "v1.0.0-beta.24" let assert(condition: Boolean!, message: String!): Void { if (condition == false) { diff --git a/AGENTS.md b/AGENTS.md index 77dffca..8f2a271 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -38,7 +38,7 @@ dagger check --engine=image://registry.dagger.io/engine:v1.0.0-beta.18 \ ``` Two `engine-e2e` checks run the target checks on the engine of the release this -SDK targets, v1.0.0-beta.23, built from its commit. Only that release serves a +SDK targets, v1.0.0-beta.24, built from its commit. Only that release serves a module or a session the view of the release it announces, so the floor cannot prove it. `floor-coverage-check` does not count these checks: diff --git a/README.md b/README.md index 02772fd..2acb153 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ # python-sdk +> [!NOTE] +> +> By default, this version of `dagger.io/sdk/python` targets Dagger engine +> `v1.0.0-beta.24`. See +> [The engine release a module targets](#the-engine-release-a-module-targets). + A Dagger module for managing Dagger modules that use the Python SDK. SDK-specific module authoring (scaffolding new modules, language build config, @@ -99,7 +105,7 @@ resolves to the runtime built into the engine (`dagger/dagger`'s ## The engine release a module targets -Each release of this SDK targets one engine release, `v1.0.0-beta.23` today. +Each release of this SDK targets one engine release, `v1.0.0-beta.24` today. That release, or the one the setting below pins, is what the SDK generates for and announces: @@ -340,7 +346,7 @@ are persisted on the scope: ```sh dagger module init python --name my-module --template empty dagger module init python --name my-module --legacy-runtime -dagger module init python --name my-module --target-version v1.0.0-beta.23 +dagger module init python --name my-module --target-version v1.0.0-beta.24 dagger module init python --name my-module \ --python-version 3.13 \ --use-uv=false \ diff --git a/dagger.lock b/dagger.lock index b4d9c37..f836a88 100644 --- a/dagger.lock +++ b/dagger.lock @@ -16,11 +16,12 @@ ["","oci-sha",["docker.io/library/busybox:1.38.0"],"sha256:fd7dc98638c8e305f4dc34e979f1c0fdfdcaeb0fbf8fcff77ae834b6da3d7e6e"] ["","oci-sha",["docker.io/library/golang:1.25-alpine"],"sha256:1ae0735f00daffa3aaf1363a5184c0d2dc55c78e3db4ec70241cdac97bf84b59"] ["","oci-sha",["docker.io/library/golang:1.26-alpine"],"sha256:ce864e7223ac17b1775e6fd0b4c0db580c2eb50e7953a427916379e4b92a1628"] +["","oci-sha",["docker.io/library/golang:1.27-alpine"],"sha256:d200d2dd76b03a99b52651fd1325aff7dcd35422c35c01bac56571b0507f3deb"] ["","oci-sha",["docker.io/tonistiigi/xx:1.2.1"],"sha256:8879a398dedf0aadaacfbd332b29ff2f84bc39ae6d4e9c0a1109db27ac5ba012"] -["","oci-sha",["ghcr.io/astral-sh/uv:python3.12-alpine"],"sha256:a57a1dd942a83dc96d338f7479be4b4cbca018c476eae7e6f3f1d3603e90aaf8"] +["","oci-sha",["ghcr.io/astral-sh/uv:python3.11-alpine"],"sha256:50c205a1d4c3625cec60ee88750e2cd33937699d69a63b3b024f98a18a310190"] ["","oci-sha",["ghcr.io/astral-sh/uv:python3.14-alpine"],"sha256:513b826406ed7efc2604acdf4935266e020283ce17e2ea96509cd4f1a68b9f1a"] ["","oci-sha",["ghcr.io/astral-sh/uv:python3.15-alpine"],"sha256:53c26a742bed4fa993487ff88da17b232c74869b5aabeebfdef786602547dba6"] ["","oci-sha",["registry.dagger.io/engine:v1.0.0-beta.18"],"sha256:bdba5a56b1286e38244ad060c21fb4a5db6d30abc0077d79677f7450c737ae48"] -["","oci-sha",["registry.dagger.io/engine:v1.0.0-beta.23"],"sha256:a5a79c5b3775519be4be61da6507709699c9b31ae7620be0e43d76e5c557871f"] +["","oci-sha",["registry.dagger.io/engine:v1.0.0-beta.24"],"sha256:3ad2b0b80942bb5044e57c1765710a5fab0b913557b6ab7d7f4e81700ac4da35"] ["","vanity-url",["https://dagger.io/linux/alpine"],"https://github.com/dagger/alpine"] ["","vanity-url",["https://dagger.io/sdk/helpers"],"https://github.com/dagger/sdk-helpers"] diff --git a/helpers/pyproject/python.go b/helpers/pyproject/python.go index bf66e49..926174f 100644 --- a/helpers/pyproject/python.go +++ b/helpers/pyproject/python.go @@ -13,7 +13,7 @@ import ( // pythonFloor is the oldest Python the SDK runs on. A test holds it to the // requires-python of sdk/pyproject.toml. -const pythonFloor = "3.12" +const pythonFloor = "3.11" // lastReleaseBelowPythonFloor is the last release of this SDK, whose floor // was lastReleasePythonFloor. A refusal offers it only to a Python that diff --git a/helpers/pyproject/python_test.go b/helpers/pyproject/python_test.go index d23481b..81f6e42 100644 --- a/helpers/pyproject/python_test.go +++ b/helpers/pyproject/python_test.go @@ -23,16 +23,17 @@ func TestPythonFloorIsTheSDKs(t *testing.T) { func TestBelowPythonFloor(t *testing.T) { for v, want := range map[string]bool{ - "3.11": true, - "3.11.9": true, + "3.10": true, + "3.10.9": true, "2.7": true, "2": true, - "3.12.0rc1": true, - "3.12rc1": true, - "3.12.dev0": true, + "3.11.0rc1": true, + "3.11rc1": true, + "3.11.dev0": true, + "3.11": false, + "3.11.0": false, + "3.11.1rc1": false, "3.12": false, - "3.12.0": false, - "3.12.1rc1": false, "3.13.0b2": false, "3": false, "4": false, @@ -64,19 +65,19 @@ func TestPythonRefusal(t *testing.T) { files map[string]string want string }{ - "floor": {map[string]string{"pyproject.toml": project(">=3.12")}, ""}, + "floor": {map[string]string{"pyproject.toml": project(">=3.11")}, ""}, "newer": {map[string]string{"pyproject.toml": project(">=3.14")}, ""}, - "older floor": {map[string]string{"pyproject.toml": project(">=3.11")}, `this Python SDK needs Python 3.12 or later, and requires-python = ">=3.11" asks for Python 3.11. Ask for Python 3.12 or later, or pin the last release of this SDK that runs on it: dagger module install github.com/dagger/python-sdk@v1.2.0`}, + "older floor": {map[string]string{"pyproject.toml": project(">=3.10")}, `this Python SDK needs Python 3.11 or later, and requires-python = ">=3.10" asks for Python 3.10. Ask for Python 3.11 or later, or pin the last release of this SDK that runs on it: dagger module install github.com/dagger/python-sdk@v1.2.0`}, "older range": {map[string]string{"pyproject.toml": project(">=3.10,<4")}, "asks for Python 3.10."}, - "older exact": {map[string]string{"pyproject.toml": project("==3.11.4")}, "asks for Python 3.11.4."}, + "older exact": {map[string]string{"pyproject.toml": project("==3.10.4")}, "asks for Python 3.10.4."}, "another major": {map[string]string{"pyproject.toml": project(">=2.7")}, "asks for Python 2.7."}, "older major only": {map[string]string{"pyproject.toml": project(">=2")}, "asks for Python 2."}, - "range the runtime ignores": {map[string]string{"pyproject.toml": project("~=3.11")}, ""}, + "range the runtime ignores": {map[string]string{"pyproject.toml": project("~=3.10")}, ""}, "no requires-python": {map[string]string{"pyproject.toml": "[project]\nname = \"app\"\n"}, ""}, "no pyproject.toml": {map[string]string{}, ""}, "older pin": { - map[string]string{".python-version": "3.11.9\n", "pyproject.toml": project(">=3.14")}, - "this Python SDK needs Python 3.12 or later, and .python-version pins Python 3.11.9. Set it to Python 3.12 or later, or pin the last release", + map[string]string{".python-version": "3.10.9\n", "pyproject.toml": project(">=3.14")}, + "this Python SDK needs Python 3.11 or later, and .python-version pins Python 3.10.9. Set it to Python 3.11 or later, or pin the last release", }, "pin over requires-python": {map[string]string{".python-version": "3.13\n", "pyproject.toml": project(">=3.10")}, ""}, "base image over requires-python": { @@ -84,7 +85,7 @@ func TestPythonRefusal(t *testing.T) { "", }, "base image over pin": { - map[string]string{".python-version": "3.11\n", "pyproject.toml": "[tool.dagger]\nbase-image = \"python:3.14-slim\"\n"}, + map[string]string{".python-version": "3.10\n", "pyproject.toml": "[tool.dagger]\nbase-image = \"python:3.14-slim\"\n"}, "", }, "unreadable pin": {map[string]string{".python-version": "pypy3.10\n"}, ""}, @@ -102,7 +103,7 @@ func TestPythonRefusal(t *testing.T) { } func TestPythonRefusalOffersTheLastReleaseOnlyWhereItRuns(t *testing.T) { - for requires, offered := range map[string]bool{">=3.11": true, ">=3.10": true, ">=3.9": false, ">=2.7": false} { + for requires, offered := range map[string]bool{">=3.10": true, ">=3.9": false, ">=2.7": false} { got, err := pythonRefusal(moduleDir(t, map[string]string{"pyproject.toml": "[project]\nrequires-python = \"" + requires + "\"\n"})) if err != nil { t.Fatal(err) @@ -115,7 +116,7 @@ func TestPythonRefusalOffersTheLastReleaseOnlyWhereItRuns(t *testing.T) { func TestRunPythonRefusalTakesADirectory(t *testing.T) { dir := moduleDir(t, map[string]string{"pyproject.toml": "[project]\nrequires-python = \">=3.10\"\n"}) - if got := printed(t, "python-refusal", dir); !strings.Contains(got, "needs Python 3.12 or later") { + if got := printed(t, "python-refusal", dir); !strings.Contains(got, "needs Python 3.11 or later") { t.Errorf("got %q", got) } } diff --git a/python-sdk.dang b/python-sdk.dang index d37d8e5..f968f7d 100644 --- a/python-sdk.dang +++ b/python-sdk.dang @@ -528,7 +528,7 @@ type PythonSdk { bumped with each SDK release. Core is read from the running engine in that release's view, and the generated entrypoint and the library announce it. """ - let engineTarget: String! = "v1.0.0-beta.23" + let engineTarget: String! = "v1.0.0-beta.24" """ The last release of this SDK that runs on an engine below engineFloor. diff --git a/sdk/README.md b/sdk/README.md index d4276c7..6ad18e2 100644 --- a/sdk/README.md +++ b/sdk/README.md @@ -27,7 +27,7 @@ The Dagger Python SDK contains everything you need to develop CI/CD pipelines in ## Requirements -- Python 3.12 or later +- Python 3.11 or later - [Docker](https://docs.docker.com/engine/install/), or another OCI-compatible container runtime A compatible version of the [Dagger CLI](https://docs.dagger.io/cli) is automatically downloaded and run by the SDK for you, although it’s possible to manage it manually. diff --git a/sdk/codegen/pyproject.toml b/sdk/codegen/pyproject.toml index d5e0cbf..f59dff7 100644 --- a/sdk/codegen/pyproject.toml +++ b/sdk/codegen/pyproject.toml @@ -2,7 +2,7 @@ name = "codegen" version = "0.0.0" description = "Codegen for the Python SDK" -requires-python = ">=3.12" +requires-python = ">=3.11" dependencies = ["graphql-core>=3.2.3,<3.3"] [build-system] diff --git a/sdk/pyproject.toml b/sdk/pyproject.toml index bf00634..e4aa4f0 100644 --- a/sdk/pyproject.toml +++ b/sdk/pyproject.toml @@ -16,6 +16,7 @@ classifiers = [ "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", @@ -24,7 +25,7 @@ classifiers = [ "Operating System :: OS Independent", "Typing :: Typed", ] -requires-python = ">=3.12" +requires-python = ">=3.11" dependencies = [ "anyio>=3.6.2", "cattrs>=25.1.0", diff --git a/sdk/ruff.toml b/sdk/ruff.toml index 0cabc87..4819a77 100644 --- a/sdk/ruff.toml +++ b/sdk/ruff.toml @@ -1,5 +1,5 @@ src = ["src", "tests"] -target-version = "py312" +target-version = "py311" [format] docstring-code-format = true diff --git a/sdk/src/dagger/_engine/_version.py b/sdk/src/dagger/_engine/_version.py index 83c50d7..9483c6e 100644 --- a/sdk/src/dagger/_engine/_version.py +++ b/sdk/src/dagger/_engine/_version.py @@ -1,3 +1,3 @@ # Code generated by dagger. DO NOT EDIT. -CLI_VERSION = "1.0.0-beta.23" +CLI_VERSION = "1.0.0-beta.24" diff --git a/sdk/src/dagger/client/base.py b/sdk/src/dagger/client/base.py index 3b618d2..51aa662 100644 --- a/sdk/src/dagger/client/base.py +++ b/sdk/src/dagger/client/base.py @@ -2,7 +2,8 @@ import enum import typing -from typing import override + +from typing_extensions import override if typing.TYPE_CHECKING: from dagger.client._core import Context diff --git a/sdk/src/dagger/mod/_resolver.py b/sdk/src/dagger/mod/_resolver.py index d67dbb3..29d5bf9 100644 --- a/sdk/src/dagger/mod/_resolver.py +++ b/sdk/src/dagger/mod/_resolver.py @@ -13,10 +13,10 @@ cast, get_type_hints, overload, - override, ) from cattrs.preconf.json import JsonConverter, make_converter +from typing_extensions import override from dagger.mod._arguments import Parameter from dagger.mod._exceptions import ( diff --git a/sdk/tests/mod/golden/main.dang b/sdk/tests/mod/golden/main.dang index 1363361..51319be 100644 --- a/sdk/tests/mod/golden/main.dang +++ b/sdk/tests/mod/golden/main.dang @@ -2,7 +2,7 @@ type Entrypoint implements ModuleEntrypoint { let moduleName: String! = "main" - let clientVersion: String! = "v1.0.0-beta.23" + let clientVersion: String! = "v1.0.0-beta.24" pub sources(workspace: Workspace!): Directory! { directory diff --git a/sdk/tests/mod/golden/main_outside.dang b/sdk/tests/mod/golden/main_outside.dang index f677e59..b534f0c 100644 --- a/sdk/tests/mod/golden/main_outside.dang +++ b/sdk/tests/mod/golden/main_outside.dang @@ -2,7 +2,7 @@ type Entrypoint implements ModuleEntrypoint { let moduleName: String! = "main" - let clientVersion: String! = "v1.0.0-beta.23" + let clientVersion: String! = "v1.0.0-beta.24" pub sources(workspace: Workspace!): Directory! { directory diff --git a/sdk/tests/mod/test_entrypoint.py b/sdk/tests/mod/test_entrypoint.py index 1c7abb2..a394945 100644 --- a/sdk/tests/mod/test_entrypoint.py +++ b/sdk/tests/mod/test_entrypoint.py @@ -96,17 +96,17 @@ def test_types_golden(mod: Module): def test_main_golden(): - _assert_golden("main.dang", render_main("main", "v1.0.0-beta.23")) + _assert_golden("main.dang", render_main("main", "v1.0.0-beta.24")) def test_main_outside_golden(): - rendered = render_main("main", "v1.0.0-beta.23", ["../lib", '../../shared/"text"']) + rendered = render_main("main", "v1.0.0-beta.24", ["../lib", '../../shared/"text"']) _assert_golden("main_outside.dang", rendered) def test_main_declares_client_version(): - rendered = render_main("main", 'v1.0.0-beta.23+"commit"') - assert 'let clientVersion: String! = "v1.0.0-beta.23+\\"commit\\""' in rendered + rendered = render_main("main", 'v1.0.0-beta.24+"commit"') + assert 'let clientVersion: String! = "v1.0.0-beta.24+\\"commit\\""' in rendered assert '.withEnvVariable("DAGGER_CLIENT_VERSION", clientVersion)' in rendered assert rendered.index("DAGGER_CLIENT_VERSION") < rendered.index(".withExec(") @@ -154,12 +154,12 @@ def fresh(self) -> str: ... def test_write_entrypoint(mod: Module, tmp_path: pathlib.Path): out = tmp_path / "out" write_entrypoint( - mod.describe(), name="main", client_version="v1.0.0-beta.23", output=out + mod.describe(), name="main", client_version="v1.0.0-beta.24", output=out ) assert (out / "types.dang").read_text().startswith("# Code generated") main = (out / "main.dang").read_text() assert 'let moduleName: String! = "main"' in main - assert 'let clientVersion: String! = "v1.0.0-beta.23"' in main + assert 'let clientVersion: String! = "v1.0.0-beta.24"' in main @pytest.mark.parametrize( @@ -187,7 +187,7 @@ def test_command(tmp_path: pathlib.Path, args: list[str], outside: list[str]): "--name", "hello", "--client-version", - "v1.0.0-beta.23", + "v1.0.0-beta.24", "--output", "out", *args, diff --git a/sdk/uv.lock b/sdk/uv.lock index 4be43a1..2c28583 100644 --- a/sdk/uv.lock +++ b/sdk/uv.lock @@ -1,6 +1,6 @@ version = 1 revision = 5 -requires-python = ">=3.12" +requires-python = ">=3.11" resolution-markers = [ "python_full_version >= '3.15'", "python_full_version < '3.15'", @@ -126,6 +126,22 @@ version = "3.5.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/33/1c/f41d4e74c28ab327ff3acd36053f7ea506c55872d7a90b0fa71aa3ab0c89/charset_normalizer-3.5.2.tar.gz", hash = "sha256:39de2a259fc954455c57274dc94c79d5842774e1247a016aff30bc0efed0f4ef", size = 172659, upload-time = "2026-09-30T04:39:23.398Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/22/67/6a0b94a7960d5e1b5eacd2fb529f3fccc47db4644f7f0a7cfdcfc3be578a/charset_normalizer-3.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d21b8b13c7592db2ac5e544a6d83187b995257472b0c9e8351b6d507ae37ed6", size = 370642, upload-time = "2026-09-30T04:35:06.91Z" }, + { url = "https://files.pythonhosted.org/packages/fb/94/01009e13b94041599004edf32e56e382c24e570f60f79bab8efe45cfe1eb/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d760fe2a4d7c3b226cb9026d6a842868d52a7901bd98420e1baf14e80da85cf5", size = 259280, upload-time = "2026-09-30T04:35:08.448Z" }, + { url = "https://files.pythonhosted.org/packages/66/85/3b5358f60a13210f0b67d3755c168ef758701b021e655d88d4da28554467/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c9790464842f85f437dbbb54417eda1e0e6bfc52dd8d22d6fd1c994b73b2dc74", size = 245335, upload-time = "2026-09-30T04:35:10.104Z" }, + { url = "https://files.pythonhosted.org/packages/74/75/77c1c479b09ecd751d1e767b251ea5c14d4d50ff757bf404afab2692f600/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4685902cf26edf013ed7a3da0f426ebba7a00ebb9541386d835afbf002c11cab", size = 291707, upload-time = "2026-09-30T04:35:11.575Z" }, + { url = "https://files.pythonhosted.org/packages/0b/0d/363f78cacb70f58f15f4b083961bbd9d292f335d3f5c66fc4f1cfe69cb90/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4495c5002a7b28557e7e222e77e0b661183e432b7d6d2e788101e3f240e05b8c", size = 286747, upload-time = "2026-09-30T04:35:13.022Z" }, + { url = "https://files.pythonhosted.org/packages/e4/ed/cf505d3011ffceb12c2067a7a5d3cfe92b875d4d44bb0ff0d69375e2c184/charset_normalizer-3.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:211d5a3eb6af8f513b8d4ca19a8c1b7accab1b5f0d3175f9826b03c1a920dc1f", size = 269972, upload-time = "2026-09-30T04:35:14.606Z" }, + { url = "https://files.pythonhosted.org/packages/15/d8/f0a93a431d170e7ca681d4f6650fee3de934d18560e474e7267eb4b0f987/charset_normalizer-3.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ef4fcbf3327382cd4c9f540babd61248208af7b93eec4de397b4d5f58a09e288", size = 269339, upload-time = "2026-09-30T04:35:16.087Z" }, + { url = "https://files.pythonhosted.org/packages/86/bd/9b2bd1c5b7af02462c9752d33994834ff972a96b4c483eefde9e594488e2/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd16aabe4a02a297c23417aa17ac6299dbd8c49f673bcd645b4929b11f5a4400", size = 261683, upload-time = "2026-09-30T04:35:17.488Z" }, + { url = "https://files.pythonhosted.org/packages/76/a5/cac540ab0fd61f3fec88ad3dbb64509e71424593d73cfdfff5ab3e4db279/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:fb9e68df06293761f9fe66ade60a9bc6d0f5e42b8acf2939a9158af86ab0e5bd", size = 248143, upload-time = "2026-09-30T04:35:18.849Z" }, + { url = "https://files.pythonhosted.org/packages/71/7a/ff467301deef2089fad87f72df9e000a26a78fec7acbb18e1999371b8369/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:59f63901b0031c3136cf64704dcb21de0bbae62ce2c9529bc39d27665463de37", size = 292358, upload-time = "2026-09-30T04:35:20.326Z" }, + { url = "https://files.pythonhosted.org/packages/ad/77/22d7e785d1e210afc2e2f58600dd1799d17a35665faf84383f002826c5f8/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:304d5463e65a35d7bb0850550e0780395395f6fcf452f04db7d5ca7cecc425ac", size = 268766, upload-time = "2026-09-30T04:35:21.72Z" }, + { url = "https://files.pythonhosted.org/packages/ae/91/e8e946267f1c2d9e2bd651726e2fbd2addf02c4d36cea5069e32ca9d7bb5/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9cf9b1a857e25c4baceeb3624e92a56df3668f398c4acba74e174d81fb4d1d3a", size = 287432, upload-time = "2026-09-30T04:35:23.273Z" }, + { url = "https://files.pythonhosted.org/packages/4e/88/7561d8a88d555e7df6623abe7c0070b4baf47549b9408783a2ae0a1a6cf7/charset_normalizer-3.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:114e4d0c92d618409ed82a99e22b5c5e768fe995f2973f78265f4524f49d4640", size = 272470, upload-time = "2026-09-30T04:35:24.655Z" }, + { url = "https://files.pythonhosted.org/packages/35/7e/578c702301ec036f01455f30744a08d2b42f6ab35b9b2d4bf8cae0ef2a80/charset_normalizer-3.5.2-cp311-cp311-win32.whl", hash = "sha256:2625388c6c754520c37abaf3b41eb34d1cc4a373f457898f08606c8e362b891d", size = 186688, upload-time = "2026-09-30T04:35:26.225Z" }, + { url = "https://files.pythonhosted.org/packages/e8/fc/fdf8cf52ff21cd5bf158f20978991cf985325842f74283eb6df26c8a39d8/charset_normalizer-3.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:87e50a3e7cb90af586b6c5faf23e302a970415ac73bd7bd90a515a04b427ef96", size = 214932, upload-time = "2026-09-30T04:35:27.796Z" }, + { url = "https://files.pythonhosted.org/packages/97/66/3e45a506d8110b632541faf9a9470185aa9878f1ed44020f31346c1c5e5b/charset_normalizer-3.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:254eb48b9fa5ee9898a3c445825a1f340fe53712a098904b39b0bddba8ea3cb1", size = 202828, upload-time = "2026-09-30T04:35:29.259Z" }, { url = "https://files.pythonhosted.org/packages/e7/c8/693809898870237d82785a03f3b2b58fe4c9f14669f84a7d4e623c92a59e/charset_normalizer-3.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ed2a239c0ea213acc1908150a3037257083c7c083128f1a4cec2ec4b97dca491", size = 367780, upload-time = "2026-09-30T04:35:30.888Z" }, { url = "https://files.pythonhosted.org/packages/c9/87/2fea8c13dc24b3ca9c6f803a5b2dfdeae73eb4f9e12c7885ed908ff0433c/charset_normalizer-3.5.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b91363207bd9dc966a691e959bb47f64b30f7ac4b072be9968b366982f7db77c", size = 246730, upload-time = "2026-09-30T04:35:32.286Z" }, { url = "https://files.pythonhosted.org/packages/a8/9e/09efac30b937722f46d3110ba30b875b24b2e3a266ed746cc4e376a94d80/charset_normalizer-3.5.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:38a873987f3be698494da8b2e3085e29da02da7b633dce73e79c699a113d7bf0", size = 237707, upload-time = "2026-09-30T04:35:33.709Z" }, @@ -400,6 +416,21 @@ version = "0.16.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/04/f5/9dc696772d241814bacac7880bac32f2930b5a6ebc1f85317b83161a011c/librt-0.16.0.tar.gz", hash = "sha256:ac38d6d8d66bf3d744148dbbc0b8e193e195a51e364ed55e224631f5721891fc", size = 219839, upload-time = "2026-09-29T00:55:32.891Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/0e/b04fd2d76b6a78a02286938251b2c119fb36ddece92c76cb4886ef7d44b8/librt-0.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fe4372c52d4849096c6cc1cda2817d293ec51440c890474ed59ef38d46556f18", size = 148058, upload-time = "2026-09-29T00:44:40.903Z" }, + { url = "https://files.pythonhosted.org/packages/a3/fc/e1ed24aadb32d38603c0c07f579d739eb4d90e64e90d525b024e4a999b4d/librt-0.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c72c5295a84bd249526da9bdca38f2e176d15c31c13bb0063c5053f4ca023421", size = 153073, upload-time = "2026-09-29T00:44:42.165Z" }, + { url = "https://files.pythonhosted.org/packages/be/38/133ab655409420e0c34a9a9836a7f4e5ae75fba758d7fe177099130d58ba/librt-0.16.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be56ba9c884143495b517f23fe794ae367d58cd89ea0fdd6d437e3c024a87f9f", size = 493052, upload-time = "2026-09-29T00:44:44.043Z" }, + { url = "https://files.pythonhosted.org/packages/94/42/aaa663bc9421f5bf7bbbe9d3316d7219749698ec7688ac3b519770a89c04/librt-0.16.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:ef46c1a29ffb8c72e882e22618ec618778eacd0578fb22c6e7cf9c11d15f357b", size = 485506, upload-time = "2026-09-29T00:44:45.479Z" }, + { url = "https://files.pythonhosted.org/packages/7b/59/83a6eb5087ba8b45b083859e2085256963e06d4c2531944cdd962670bfb5/librt-0.16.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d3c94211ee0c4f8d649ec06b7c115c0ec4eadb873a0e3154ca15cef3f814b071", size = 498708, upload-time = "2026-09-29T00:44:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e4/15a8d62b2bc12935080ec7277e2e0b9b233047781eb784a51d3e25af669a/librt-0.16.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94aed6a8308818b91677957d1bd03188869cd7aeb23c5dba7912a6c0402f7602", size = 515981, upload-time = "2026-09-29T00:44:48.316Z" }, + { url = "https://files.pythonhosted.org/packages/46/4f/287cc282ac5dd815204c0779e79401bb0a568c3a1335fb319bf0838fb566/librt-0.16.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:349c0bcb87ebd07481b6ff781e25cdc699723dbe2212e57dabb27f7a13b7b87d", size = 508670, upload-time = "2026-09-29T00:44:49.726Z" }, + { url = "https://files.pythonhosted.org/packages/bf/5b/ab7292add898ade0d2b5b75d32a923aae315861671aa5c39f5491309f7ae/librt-0.16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:001bfd59a7d45b17e3e75f2a8c6405280b35e7b84471792778e718c4f368950e", size = 530393, upload-time = "2026-09-29T00:44:51.356Z" }, + { url = "https://files.pythonhosted.org/packages/7a/9e/8e6bcf027d4bcbc16a4e864b3d158a1d3e5f55ffa53af0238020cad89271/librt-0.16.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:28e038895b998d7a0c7798922ce8a1dc157675df5cf1c9ef0aca809ed804b7a1", size = 534302, upload-time = "2026-09-29T00:44:52.893Z" }, + { url = "https://files.pythonhosted.org/packages/96/a4/8c5ab4f3b3a8e905ff8305d76976a2e666f52fe049edd398aed2402beb36/librt-0.16.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0dbe4096a7ecc00fa835d24510ad8545a4efef738dac96e0e63516783ccde905", size = 536150, upload-time = "2026-09-29T00:44:54.421Z" }, + { url = "https://files.pythonhosted.org/packages/ea/5e/7c4bc267e3cd4b8bd288de9f62d61fff203829c9cc649ea2aa12e9218cf0/librt-0.16.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5cd5b092441053364af968ea12084692cb9d4a22f3ce9524e377880bf028761e", size = 514316, upload-time = "2026-09-29T00:44:55.998Z" }, + { url = "https://files.pythonhosted.org/packages/e0/75/c8bc6b50f43c73819334233f5a3259c81216742cef56d2140c3dd377c3f0/librt-0.16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ddeb3c9dedb461bb457c6c7d9aa7fbf35329da313d1a7543d00c8d0f3473c96", size = 557731, upload-time = "2026-09-29T00:44:57.581Z" }, + { url = "https://files.pythonhosted.org/packages/93/fb/e241f91bc8de6c7ac1c6a20ea6dd381bc52312b44d711ffcd97140db1e57/librt-0.16.0-cp311-cp311-win32.whl", hash = "sha256:e05108e0849966f53a8d2d3112a7af881d0efaa479bc735bba91108f9f2350a7", size = 104922, upload-time = "2026-09-29T00:44:59.078Z" }, + { url = "https://files.pythonhosted.org/packages/d1/38/c892383d2bb1a6a80b2ec8ede84970a265a792c56614a06282bf3008517c/librt-0.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:5f49cff01bd608ef7d97104cb035c75455e79c2d70bf4a506cf773338ac1860d", size = 125093, upload-time = "2026-09-29T00:49:01.621Z" }, + { url = "https://files.pythonhosted.org/packages/e4/56/8bbde1ed0b21480163617648f638fdaec9374cf5e9c846ebcee34ec02a42/librt-0.16.0-cp311-cp311-win_arm64.whl", hash = "sha256:1d28ae980ae2218f9c5b95d191e947296f918c9bf0b400d467a9430275bbe678", size = 115910, upload-time = "2026-09-29T00:52:40.131Z" }, { url = "https://files.pythonhosted.org/packages/ad/76/bbdaeb87b7c47b5c7343e90222b9bfa4e4a8a83f647e02933ad0129225b1/librt-0.16.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fe52bf4641069e7978a14253b036cb9002def1926317e710f2e249f8a8c47742", size = 151028, upload-time = "2026-09-29T00:52:41.508Z" }, { url = "https://files.pythonhosted.org/packages/fd/0c/ab8ed3dab0085931aec4a792c7eaac8dc6c5ff4691fda3a5360d9d8a9cd2/librt-0.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5bcc2c4726ced915b00de0c9856a4eeabfb3fddb93e10e0b8f735b7709358b6d", size = 155283, upload-time = "2026-09-29T00:52:42.873Z" }, { url = "https://files.pythonhosted.org/packages/eb/36/494e79d460c80c1f030661e8287c9eca5e1ad652dc2b2180b6cd42abce0a/librt-0.16.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff7baa55f8e7c69851419e50a666015d02a74198716fd45c0125a2112e0a389f", size = 503185, upload-time = "2026-09-29T00:52:44.638Z" }, @@ -529,6 +560,12 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/34/4e/64300736cf0a0373a27b94a91b664ee7382e36f77b0621bae6381da3e180/mypy-2.4.0.tar.gz", hash = "sha256:77bdaebd452f43fcfc4cc3ba94352a3ea537cd01e3f2d0879f48673d2ec00d6e", size = 4064425, upload-time = "2026-10-01T20:40:39.229Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/26/67/e53965e67d23d48e78dd603aa7525a8d77e7818c23954cc217ccde5cd5c0/mypy-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d20e6c7c35fcbf2a0ebdd0eaeacfbc243009dfd33ab7822d54e213912e6dbbd", size = 14315745, upload-time = "2026-10-01T20:39:25.03Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5d/a588ccd57625822d8484d7aff4e9c70f88d042a91c2ec84324a2bc14b3f3/mypy-2.4.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3011537be6cf1de4511c0255a324362a812b58184bbe61e15f59c8b31033bd74", size = 14465652, upload-time = "2026-10-01T20:38:57.19Z" }, + { url = "https://files.pythonhosted.org/packages/05/af/b4978a5566cb829ca563dc08e3ad8d944f116078786ad54ba3dff2bcb64d/mypy-2.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a96b07a49b7b1d025ce59c1b3acbcf24bead9a83da4523c4a6bde1bb94e7a0e1", size = 15419180, upload-time = "2026-10-01T20:40:27.808Z" }, + { url = "https://files.pythonhosted.org/packages/b2/8c/52c71f31c54d0a749d832cc73b933c6e38c52d9b270d5503e031c73723dc/mypy-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7c4f8f8d1d1c0e2832d8ee7113dd08f6df6c7aad9e863fcbed9f25832be0b8c4", size = 15669212, upload-time = "2026-10-01T20:39:20.443Z" }, + { url = "https://files.pythonhosted.org/packages/e8/55/ba63121494404fd7d3787ec176ccd02820d6ec125ac4e7c4c0b79f2cc6c7/mypy-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba05652540bf12828e52abae807b024b09ca144ff4f75e2450a81d69c376425b", size = 11299572, upload-time = "2026-10-01T20:40:03.627Z" }, + { url = "https://files.pythonhosted.org/packages/9c/9c/385c81b5c0d3a2917f077c4da660d0493f9521ccfd4b058e33b860f72d02/mypy-2.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:6306086b87cf7f8a29aa618d9fd9bffb56c59247166b9660fdb54d86d7714ecd", size = 10869751, upload-time = "2026-10-01T20:40:25.483Z" }, { url = "https://files.pythonhosted.org/packages/68/ed/e5d7cf4017e74a1c1e1c4058ce8f614fc1e3e7606564f47166e22bfc9f95/mypy-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e05ff2925d8b37ad26c80c1b9dc43ae5d455da2df1e23c24c095a6425917c57e", size = 14378593, upload-time = "2026-10-01T20:38:48.222Z" }, { url = "https://files.pythonhosted.org/packages/30/7d/12d994886a922f0f1997becc9c6625198d61eeb5962558a886af7dd38d54/mypy-2.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29243242cf72582b65f9582ad9e56e8cb281566ed3519f4cd70bb8b9f2977e90", size = 14464697, upload-time = "2026-10-01T20:39:11.059Z" }, { url = "https://files.pythonhosted.org/packages/f3/9e/bcc9af755425ad17790bf11d73c2ea7592914cf309ee1340997670f9d57a/mypy-2.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29eb0b9427a6b11b992e452f6cceb8af724f4dceb47e779d0b35e405e996ea5e", size = 15552257, upload-time = "2026-10-01T20:39:56.269Z" }, @@ -873,6 +910,17 @@ version = "2.5.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/04/22/89e2f3bdae5cb34e0cab0cd86d7172dbf418de4b46c9b17b9c7a560dfa44/wrapt-2.5.1.tar.gz", hash = "sha256:f595bb0185aab3e9dc31950c95d914f56ea8278810c3b928f3426e12ed6d27bc", size = 184455, upload-time = "2026-10-14T00:39:39.24Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/2b/0f2ae9e355a0491c202a1331ec405d794c249f4fe9b4db952c0246909786/wrapt-2.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aed178902c2386d7c5d3d23eb96d32c100e34cb8c2390e7ece0e4901ae43f0e7", size = 105587, upload-time = "2026-10-14T00:37:01.614Z" }, + { url = "https://files.pythonhosted.org/packages/0a/54/a5b9904d341ae255bc5618ac43830ab68ed6420dac62af9a305a6191062a/wrapt-2.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1910be5adc0232cc6e8c0673bf3f41c2ee724547543526bed8d00734458e7bc5", size = 105759, upload-time = "2026-10-14T00:37:03.02Z" }, + { url = "https://files.pythonhosted.org/packages/2b/bf/8edaec939d7411a58bccb4dc4310246caea5050576ff91b5f5abf6079a9c/wrapt-2.5.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c25c594f58ecb676358d6d6b0ff068b8bbbc506dc831c6d17876460c66ce39c2", size = 240110, upload-time = "2026-10-14T00:37:04.448Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8c/18ad7f24c82cbf689324521abe4dc90078d20a5498d991ec83e03dc60c85/wrapt-2.5.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e85a9db9e5a5ccc326edb19e35a5106ba16e451d570a2ec8ea9deb1ea52a3c42", size = 241618, upload-time = "2026-10-14T00:37:06.1Z" }, + { url = "https://files.pythonhosted.org/packages/d2/1b/607e1fc9a8e8838f1a8516f5b87565c9dc415b474ec09479f9443a5a7305/wrapt-2.5.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2c642a83b6703804b571caa3b8b205aacd341b1b37e2b2d89cd70e03e0e9caa6", size = 226604, upload-time = "2026-10-14T00:37:07.899Z" }, + { url = "https://files.pythonhosted.org/packages/b4/fb/6f637ca3e71ea046148dd17622e023df159a16d99762aad4bbdbac11c76e/wrapt-2.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:920f700ef41ee774a1e4778c1f4295e117f1ff3435a7e0cd3e997d10da819d32", size = 239265, upload-time = "2026-10-14T00:37:09.45Z" }, + { url = "https://files.pythonhosted.org/packages/f3/fc/b746f3a72ee7f56d238debeb3842b2569511cf357f5a35f455e24258dc4f/wrapt-2.5.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3f93ceb0ac4896de45d5a45a8f4e69474da583440589de10b362ddc1db4691ed", size = 223864, upload-time = "2026-10-14T00:37:11.363Z" }, + { url = "https://files.pythonhosted.org/packages/97/12/290a6385393fddcb01bcc83d78c16a24c50a392fe72fb4936999bfe573ec/wrapt-2.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a88370a7d89fcb1c4953a87673fdd7b4a0eb14a1a4dfce49771f0c827ef44893", size = 229426, upload-time = "2026-10-14T00:37:12.868Z" }, + { url = "https://files.pythonhosted.org/packages/29/af/b52bb81d4217ed7f0fe285de6754e44cb5e6a8b316fc78c605743f463709/wrapt-2.5.1-cp311-cp311-win32.whl", hash = "sha256:12bee472452019706fa1d4ead093f52a9683b4fe6617953e15bab9acdfdc013f", size = 100684, upload-time = "2026-10-14T00:37:14.59Z" }, + { url = "https://files.pythonhosted.org/packages/e6/d4/ae9ca837038a7a9aadb906eeca76b42df54e299edb29f8ac2cbad1d55b4f/wrapt-2.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:ce3889e3815f97d46414eb574bffdd9bdb41ff70f503097e2707615a87d4e92c", size = 105878, upload-time = "2026-10-14T00:37:16.057Z" }, + { url = "https://files.pythonhosted.org/packages/15/5e/0605567a81c7105446cec682bc2235172a37e2bc817e2de3f5bad95ee969/wrapt-2.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:ca7b967e96384abdf7e7182c79f71529997981ece8169f8a8ddb31bc5b57cbec", size = 102825, upload-time = "2026-10-14T00:37:17.492Z" }, { url = "https://files.pythonhosted.org/packages/66/9b/c7f97d5493a33b5ed01d3c85745f9bdfdd2e5c2785471b8d8b55a3c273d6/wrapt-2.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6e3eff05ae616671b40d7ad0a504210329e4adc9fb91415663570aca93c5f5cc", size = 106452, upload-time = "2026-10-14T00:37:18.951Z" }, { url = "https://files.pythonhosted.org/packages/7f/b0/335b0af2930938678fcde954b29780b26308961b93df5e0192fc182e8b7e/wrapt-2.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c44dd9881626da7d621c23805f26726f6b023cf3e9755f48d092bc9cbef4a8e7", size = 106087, upload-time = "2026-10-14T00:37:20.392Z" }, { url = "https://files.pythonhosted.org/packages/4a/5a/2a34ba5a468e9d3d6e5b0733280e1ae3c850bfc5f1d681fc0e97f564d1f2/wrapt-2.5.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bfaa998ceeea4d0aa72b40cdd0023d19409504e244b439ff2aa9f01729341c5f", size = 250438, upload-time = "2026-10-14T00:37:21.882Z" },