python3Packages.prefect: 3.5.0 -> 3.7.0 (#514306)

This commit is contained in:
Yt
2026-05-11 08:12:34 +00:00
committed by GitHub
9 changed files with 452 additions and 251 deletions
+2 -1
View File
@@ -11,6 +11,7 @@ in
{
services.prefect = {
enable = true;
baseUrl = "http://127.0.0.1";
};
};
};
@@ -18,7 +19,7 @@ in
testScript = ''
machine.start()
machine.wait_for_unit("prefect-server.service")
machine.wait_for_open_port("${mainPort}")
machine.wait_for_open_port(${mainPort})
'';
meta = with lib.maintainers; {
+1 -207
View File
@@ -1,207 +1 @@
{
lib,
python3Packages,
fetchPypi,
nixosTests,
nix-update-script,
}:
python3Packages.buildPythonApplication rec {
pname = "prefect";
version = "3.5.0";
pyproject = true;
# Trying to install from source is challenging
# the packaging is using versioningit and looking for
# .git directory
# Source will be missing sdist, uv.lock, ui artefacts ...
src = fetchPypi {
inherit pname version;
hash = "sha256-BazzO+gR/mLcx+tlysPMJzcqmctUU0LSYL0YMZMyVrg=";
};
pythonRelaxDeps = [
"websockets"
"typer"
];
build-system = with python3Packages; [
hatchling
versioningit
];
dependencies =
with python3Packages;
[
aiosqlite
alembic
apprise
asyncpg
click
cryptography
dateparser
docker
graphviz
jinja2
jinja2-humanize-extension
humanize
pytz
readchar
sqlalchemy
typer
# client dependencies
anyio
asgi-lifespan
cachetools
cloudpickle
coolname
exceptiongroup
fastapi
fsspec
# graphviz already included
griffe
httpcore
httpx
jsonpatch
jsonschema
opentelemetry-api
orjson
packaging
pathspec
pendulum
pluggy
prometheus-client
pydantic
pydantic-core
pydantic-extra-types
pydantic-settings
python-dateutil
python-slugify
python-socks
pyyaml
rfc3339-validator
rich
ruamel-yaml
semver
sniffio
toml
typing-extensions
ujson
uvicorn
websockets
whenever
uv
semver
]
++ sqlalchemy.optional-dependencies.asyncio
++ httpx.optional-dependencies.http2;
optional-dependencies = with python3Packages; {
aws = [
# prefect-aws
];
azure = [
# prefect-azure
];
bitbucket = [
# prefect-bitbucket
];
dask = [
# prefect-dask
];
databricks = [
# prefect-databricks
];
dbt = [
# prefect-dbt
];
docker = [
# prefect-docker
];
email = [
# prefect-email
];
gcp = [
# prefect-gcp
];
github = [
# prefect-github
];
gitlab = [
# prefect-gitlab
];
kubernetes = [
# prefect-kubernetes
];
otel = [
opentelemetry-distro
opentelemetry-exporter-otlp
opentelemetry-instrumentation
opentelemetry-instrumentation-logging
opentelemetry-test-utils
];
ray = [
# prefect-ray
];
redis = [
# prefect-redis
];
shell = [
# prefect-shell
];
slack = [
# prefect-slack
];
snowflake = [
# prefect-snowflake
];
sqlalchemy = [
# prefect-sqlalchemy
];
};
makeWrapperArgs = [
# Add the installed directories to the python path so the worker can find them
"--prefix PYTHONPATH : ${python3Packages.makePythonPath dependencies}"
"--prefix PYTHONPATH : $out/${python3Packages.python.sitePackages}"
];
passthru.tests = {
inherit (nixosTests) prefect;
updateScript = nix-update-script {
extraArgs = [
# avoid prereleases
"--version-regex"
"^(\\d+\\.\\d+\\.\\d+)$"
];
};
};
# Tests are not included in the pypi source
doCheck = false;
# nativeCheckInputs = (
# with python3Packages;
# [
# pytestCheckHook
# pytest-asyncio
# pytest-cov
# pytest-env
# # pytest-flakefinder
# pytest-mypy-plugins
# pytest-timeout
# pytest-xdist
# ]
# );
meta = {
description = "Workflow orchestration framework for building resilient data pipelines in Python";
homepage = "https://github.com/PrefectHQ/prefect";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [
happysalada
mrmebelman
];
mainProgram = "prefect";
};
}
{ python3Packages }: python3Packages.toPythonApplication python3Packages.prefect
@@ -0,0 +1,36 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
pytestCheckHook,
setuptools,
}:
buildPythonPackage (finalAttrs: {
pname = "amplitude-analytics";
version = "1.2.3";
pyproject = true;
src = fetchFromGitHub {
owner = "amplitude";
repo = "Amplitude-Python";
tag = "v${finalAttrs.version}";
hash = "sha256-on4TJPiPyznYkBeJsTd7W59KhN7UaSX5+XJaSjkqFaE=";
};
build-system = [ setuptools ];
nativeCheckInputs = [ pytestCheckHook ];
pythonImportsCheck = [ "amplitude" ];
meta = {
description = "Official Amplitude backend Python SDK for server-side instrumentation";
homepage = "https://github.com/amplitude/Amplitude-Python";
downloadPage = "https://github.com/amplitude/Amplitude-Python/releases";
changelog = "https://github.com/amplitude/Amplitude-Python/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ prince213 ];
};
})
@@ -0,0 +1,52 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
pytestCheckHook,
rustPlatform,
pytest-asyncio,
redis,
}:
buildPythonPackage (finalAttrs: {
pname = "burner-redis";
version = "0.1.6";
pyproject = true;
src = fetchFromGitHub {
owner = "prefectlabs";
repo = "burner-redis";
tag = "v${finalAttrs.version}";
hash = "sha256-soXwXxo8vVGEEM5iDNFa86zlPA+e74b+AS9diUoOdME=";
};
cargoDeps = rustPlatform.fetchCargoVendor {
inherit (finalAttrs) pname version src;
hash = "sha256-0qdmcoRje7OkHnGhO8CaR/g38yL9K8Jc+1KjfW4xPTQ=";
};
nativeBuildInputs = [
rustPlatform.cargoSetupHook
rustPlatform.maturinBuildHook
];
pythonImportsCheck = [ "burner_redis" ];
doCheck = true;
nativeCheckInputs = [
pytestCheckHook
pytest-asyncio
redis
];
meta = {
description = "Embedded, in-process Redis-compatible database";
homepage = "https://github.com/prefectlabs/burner-redis";
downloadPage = "https://github.com/prefectlabs/burner-redis/releases";
changelog = "https://github.com/prefectlabs/burner-redis/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ prince213 ];
};
})
@@ -2,30 +2,32 @@
lib,
buildPythonPackage,
fetchFromGitHub,
pytestCheckHook,
redisTestHook,
hatchling,
hypothesis,
jsonpath-ng,
lupa,
hatchling,
numpy,
pyprobables,
pytest-asyncio,
pytest-mock,
pytestCheckHook,
redis,
redisTestHook,
sortedcontainers,
valkey,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "fakeredis";
version = "2.33.0";
version = "2.35.1";
pyproject = true;
src = fetchFromGitHub {
owner = "dsoftwareinc";
owner = "cunla";
repo = "fakeredis-py";
tag = "v${version}";
hash = "sha256-uvbvrziVdoa/ip8MbZG8GcpN1FoINxUV+SDVRmg78Qs=";
tag = "v${finalAttrs.version}";
hash = "sha256-euhWKXFERpRoXX7G81ffAygt5e1mt7uy9Y9zAGacu38=";
};
build-system = [ hatchling ];
@@ -42,6 +44,10 @@ buildPythonPackage rec {
cf = [ pyprobables ];
probabilistic = [ pyprobables ];
valkey = [ valkey ];
vectorset = [
jsonpath-ng
numpy
];
};
nativeCheckInputs = [
@@ -58,23 +64,8 @@ buildPythonPackage rec {
disabledTestMarks = [ "slow" ];
disabledTests = [
"test_init_args" # AttributeError: module 'fakeredis' has no attribute 'FakeValkey'
"test_async_init_kwargs" # AttributeError: module 'fakeredis' has no attribute 'FakeAsyncValkey'"
# redis.exceptions.ResponseError: unknown command 'evalsha'
"test_async_lock"
# AssertionError: assert [0, b'1'] == [0, 1.0]
"test_zrank_redis7_2"
"test_zrevrank_redis7_2"
# KeyError: 'tot-mem'
"test_acl_log_auth_exist"
"test_acl_log_invalid_channel"
"test_acl_log_invalid_key"
"test_client_id"
"test_client_info"
"test_client_list"
];
preCheck = ''
@@ -83,9 +74,9 @@ buildPythonPackage rec {
meta = {
description = "Fake implementation of Redis API";
homepage = "https://github.com/dsoftwareinc/fakeredis-py";
changelog = "https://github.com/cunla/fakeredis-py/releases/tag/${src.tag}";
homepage = "https://github.com/cunla/fakeredis-py";
changelog = "https://github.com/cunla/fakeredis-py/releases/tag/${finalAttrs.src.tag}";
license = with lib.licenses; [ bsd3 ];
maintainers = with lib.maintainers; [ fab ];
};
}
})
@@ -0,0 +1,305 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
nixosTests,
nix-update-script,
pytestCheckHook,
pythonAtLeast,
pythonOlder,
replaceVars,
writableTmpDirAsHomeHook,
writeShellScriptBin,
aiosqlite,
alembic,
amplitude-analytics,
anyio,
apprise,
asgi-lifespan,
asyncpg,
boto3,
cachetools,
click,
cloudpickle,
coolname,
cryptography,
cyclopts,
dateparser,
docker,
exceptiongroup,
fastapi,
fsspec,
graphviz,
griffe,
hatchling,
httpcore,
httpx,
humanize,
jinja2-humanize-extension,
jinja2,
jsonpatch,
jsonschema,
moto,
numpy,
opentelemetry-api,
opentelemetry-distro,
opentelemetry-exporter-otlp,
opentelemetry-instrumentation,
opentelemetry-instrumentation-logging,
opentelemetry-instrumentation-system-metrics,
opentelemetry-sdk,
opentelemetry-test-utils,
orjson,
packaging,
pathspec,
pendulum,
pluggy,
prometheus-client,
pydantic-core,
pydantic-extra-types,
pydantic-settings,
pydantic,
pydocket,
pytest-asyncio,
pytest-env,
pytest-timeout,
pytest-xdist,
python-dateutil,
python-on-whales,
python-slugify,
pytz,
pyyaml,
readchar,
respx,
rfc3339-validator,
rich,
ruamel-yaml-clib,
ruamel-yaml,
semver,
sniffio,
sqlalchemy,
toml,
typing-extensions,
uv,
uvicorn,
versioningit,
watchfiles,
websockets,
whenever,
yamllint,
}:
buildPythonPackage (finalAttrs: {
pname = "prefect";
version = "3.7.0";
pyproject = true;
src = fetchFromGitHub {
owner = "PrefectHQ";
repo = "prefect";
tag = finalAttrs.version;
hash = "sha256-AfiXH9u6W6UpE8hepNzPGIm1cxC+5RonhtBYWMu2IaQ=";
};
postPatch = ''
substituteInPlace pyproject.toml \
--replace-fail \
'default-version = "3.6.24+nogit"' \
'default-version = "${finalAttrs.version}"'
''
+ lib.optionalString finalAttrs.doCheck ''
substituteInPlace src/prefect/__init__.py \
--replace-fail \
'__development_base_path__: pathlib.Path = __module_path__.parents[1]' \
'__development_base_path__: pathlib.Path = pathlib.Path("${finalAttrs.src}")'
'';
# versioningit: NotVCSError: Git not installed; assuming this isn't a Git repository
nativeBuildInputs = [
(writeShellScriptBin "git" "false")
];
build-system = [
hatchling
versioningit
];
dependencies = [
aiosqlite
alembic
apprise
asyncpg
click
cryptography
cyclopts
dateparser
docker
jinja2
jinja2-humanize-extension
pytz
readchar
sqlalchemy
# client dependencies
amplitude-analytics
anyio
asgi-lifespan
cachetools
cloudpickle
coolname
exceptiongroup
fastapi
fsspec
graphviz
griffe
httpcore
httpx
humanize
jsonpatch
jsonschema
opentelemetry-api
orjson
packaging
pathspec
pluggy
prometheus-client
pydantic
pydantic-core
pydantic-extra-types
pydantic-settings
pydocket
python-dateutil
python-slugify
pyyaml
rfc3339-validator
rich
ruamel-yaml
ruamel-yaml-clib
semver
sniffio
toml
typing-extensions
uvicorn
websockets
]
++ sqlalchemy.optional-dependencies.asyncio
++ httpx.optional-dependencies.http2
++ lib.optional (pythonOlder "3.13") pendulum
++ lib.optional (pythonAtLeast "3.13") whenever;
optional-dependencies = {
aws = [
# prefect-aws
];
azure = [
# prefect-azure
];
bitbucket = [
# prefect-bitbucket
];
buildx = [
python-on-whales
];
bundles = [
uv
];
dask = [
# prefect-dask
];
databricks = [
# prefect-databricks
];
dbt = [
# prefect-dbt
];
docker = [
# prefect-docker
];
email = [
# prefect-email
];
gcp = [
# prefect-gcp
];
github = [
# prefect-github
];
gitlab = [
# prefect-gitlab
];
kubernetes = [
# prefect-kubernetes
];
otel = [
opentelemetry-distro
opentelemetry-exporter-otlp
opentelemetry-instrumentation
opentelemetry-instrumentation-logging
opentelemetry-instrumentation-system-metrics
opentelemetry-test-utils
];
ray = [
# prefect-ray
];
redis = [
# prefect-redis
];
shell = [
# prefect-shell
];
slack = [
# prefect-slack
];
snowflake = [
# prefect-snowflake
];
sqlalchemy = [
# prefect-sqlalchemy
];
};
passthru.tests = {
inherit (nixosTests) prefect;
updateScript = nix-update-script {
extraArgs = [
# avoid prereleases
"--version-regex"
"^(\\d+\\.\\d+\\.\\d+)$"
];
};
};
# FIXME: build killed at ~30%
doCheck = false;
nativeCheckInputs = [
pytestCheckHook
writableTmpDirAsHomeHook
boto3
moto
numpy
opentelemetry-sdk
opentelemetry-test-utils
pytest-asyncio
pytest-env
pytest-timeout
pytest-xdist
respx
uv
uvicorn
watchfiles
yamllint
];
meta = {
description = "Workflow orchestration framework for building resilient data pipelines in Python";
homepage = "https://github.com/PrefectHQ/prefect";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [
happysalada
mrmebelman
];
mainProgram = "prefect";
};
})
@@ -2,17 +2,18 @@
lib,
buildPythonPackage,
fetchFromGitHub,
pytestCheckHook,
# build-system
hatch-vcs,
hatchling,
# dependencies
burner-redis,
cloudpickle,
fakeredis,
cronsim,
opentelemetry-api,
opentelemetry-exporter-prometheus,
opentelemetry-instrumentation,
opentelemetry-sdk,
prometheus-client,
py-key-value-aio,
python-json-logger,
@@ -20,18 +21,25 @@
rich,
typer,
typing-extensions,
uncalled-for,
docker,
pytest-asyncio,
pytest-cov,
pytest-timeout,
pytest-xdist,
}:
buildPythonPackage (finalAttrs: {
pname = "pydocket";
version = "0.17.1";
version = "0.20.1";
pyproject = true;
src = fetchFromGitHub {
owner = "chrisguidry";
repo = "docket";
tag = finalAttrs.version;
hash = "sha256-p3FqIHulsBxI7oyiahEruARXBuA2QAYdQeVh83OFHbg=";
hash = "sha256-QCx1tpiMkyIveay3OwnjcTRb8pTJNcTjOyor59oYHqQ=";
};
build-system = [
@@ -39,17 +47,11 @@ buildPythonPackage (finalAttrs: {
hatchling
];
pythonRelaxDeps = [
"fakeredis"
"opentelemetry-exporter-prometheus"
"opentelemetry-instrumentation"
];
dependencies = [
burner-redis
cloudpickle
fakeredis
cronsim
opentelemetry-api
opentelemetry-exporter-prometheus
opentelemetry-instrumentation
prometheus-client
py-key-value-aio
python-json-logger
@@ -57,15 +59,31 @@ buildPythonPackage (finalAttrs: {
rich
typer
typing-extensions
uncalled-for
]
++ fakeredis.optional-dependencies.lua
++ py-key-value-aio.optional-dependencies.memory
++ py-key-value-aio.optional-dependencies.redis;
optional-dependencies = {
metrics = [
opentelemetry-sdk
];
};
pythonImportsCheck = [ "docket" ];
# All tests require internet access
doCheck = false;
nativeCheckInputs = [
pytestCheckHook
docker
opentelemetry-sdk
pytest-asyncio
pytest-cov
pytest-timeout
pytest-xdist
];
meta = {
description = "Distributed background task system for Python";
@@ -16,7 +16,7 @@
buildPythonPackage (finalAttrs: {
pname = "uncalled-for";
version = "0.3.1";
version = "0.3.2";
pyproject = true;
__structuredAttrs = true;
@@ -25,7 +25,7 @@ buildPythonPackage (finalAttrs: {
owner = "chrisguidry";
repo = "uncalled-for";
tag = finalAttrs.version;
hash = "sha256-+akXLsfto3FNbkpsPPwN1DQmvu3BpTafRbqLmLwtqek=";
hash = "sha256-5jFMlynYaxd83SQiZ1uPs1whWFgKP4y6s473TplH4iI=";
};
build-system = [
+5 -1
View File
@@ -736,6 +736,8 @@ self: super: with self; {
ament-package = callPackage ../development/python-modules/ament-package { };
amplitude-analytics = callPackage ../development/python-modules/amplitude-analytics { };
amply = callPackage ../development/python-modules/amply { };
amqp = callPackage ../development/python-modules/amqp { };
@@ -2407,6 +2409,8 @@ self: super: with self; {
bundlewrap-teamvault = callPackage ../development/python-modules/bundlewrap-teamvault { };
burner-redis = callPackage ../development/python-modules/burner-redis { };
busylight-core = callPackage ../development/python-modules/busylight-core { };
busylight-for-humans = callPackage ../development/python-modules/busylight-for-humans { };
@@ -12927,7 +12931,7 @@ self: super: with self; {
precisely = callPackage ../development/python-modules/precisely { };
prefect = toPythonModule pkgs.prefect;
prefect = callPackage ../development/python-modules/prefect { };
prefixed = callPackage ../development/python-modules/prefixed { };