diff --git a/pkgs/by-name/sn/snakemake/package.nix b/pkgs/by-name/sn/snakemake/package.nix index 3182e82095b8..dedcaab6cfbd 100644 --- a/pkgs/by-name/sn/snakemake/package.nix +++ b/pkgs/by-name/sn/snakemake/package.nix @@ -6,18 +6,20 @@ stress, versionCheckHook, writableTmpDirAsHomeHook, + snakemake, }: python3Packages.buildPythonApplication (finalAttrs: { pname = "snakemake"; - version = "9.16.3"; + version = "9.21.0"; pyproject = true; + __structuredAttrs = true; src = fetchFromGitHub { owner = "snakemake"; repo = "snakemake"; tag = "v${finalAttrs.version}"; - hash = "sha256-+eEzpRY6ZEKB3v1/AkHDg4bOcM2Y6pt4UMrdKF6soac="; + hash = "sha256-+EO+BTMkui0mJvEf0TOaCRBH8MzLsit8xK+71gujHt0="; }; postPatch = '' @@ -33,6 +35,10 @@ python3Packages.buildPythonApplication (finalAttrs: { build-system = with python3Packages; [ setuptools-scm ]; + pythonRelaxDeps = [ + "packaging" + "sqlmodel" + ]; dependencies = with python3Packages; [ appdirs conda-inject @@ -53,20 +59,24 @@ python3Packages.buildPythonApplication (finalAttrs: { requests reretry smart-open - snakemake-interface-executor-plugins snakemake-interface-common + snakemake-interface-executor-plugins snakemake-interface-logger-plugins - snakemake-interface-storage-plugins snakemake-interface-report-plugins snakemake-interface-scheduler-plugins + snakemake-interface-storage-plugins + sqlmodel stopit tabulate + tenacity throttler toposort wrapt yte ]; + pythonImportsCheck = [ "snakemake" ]; + # See # https://github.com/snakemake/snakemake/blob/main/.github/workflows/main.yml#L99 # for the current basic test suite. Slurm, Tibanna and Tes require extra @@ -81,11 +91,15 @@ python3Packages.buildPythonApplication (finalAttrs: { requests-mock snakemake-executor-plugin-cluster-generic snakemake-storage-plugin-fs + snakemake-storage-plugin-http + snakemake-storage-plugin-s3 stress - versionCheckHook polars ]) - ++ [ writableTmpDirAsHomeHook ]; + ++ [ + versionCheckHook + writableTmpDirAsHomeHook + ]; enabledTestPaths = [ "tests/tests.py" @@ -97,6 +111,9 @@ python3Packages.buildPythonApplication (finalAttrs: { ]; disabledTests = [ + # AssertionError: expected file "onerror_module2.log" not produced + "test_module_onerror" + # FAILED tests/tests.py::test_env_modules - AssertionError: expected successful execution "test_ancient" "test_conda_create_envs_only" @@ -119,13 +136,6 @@ python3Packages.buildPythonApplication (finalAttrs: { "test_issue1256" "test_issue2574" - # Require `snakemake-storage-plugin-fs` (circular dependency) - "test_default_storage" - "test_default_storage_local_job" - "test_deploy_sources" - "test_output_file_cache_storage" - "test_storage" - # Tries to access internet "test_report_after_run" @@ -136,10 +146,6 @@ python3Packages.buildPythonApplication (finalAttrs: { # Needs unshare "test_nodelocal" - # Requires snakemake-storage-plugin-http - "test_keep_local" - "test_retrieve" - # Requires conda "test_jupyter_notebook" "test_jupyter_notebook_nbconvert" @@ -179,7 +185,11 @@ python3Packages.buildPythonApplication (finalAttrs: { "test_issue1331" ]; - pythonImportsCheck = [ "snakemake" ]; + # Circular dependencies + doCheck = false; + passthru.tests.pytest = snakemake.overridePythonAttrs { + doCheck = true; + }; meta = { homepage = "https://snakemake.github.io"; diff --git a/pkgs/by-name/xr/xrootd/package.nix b/pkgs/by-name/xr/xrootd/package.nix index 4ad8f2d7951e..626f6f5edc77 100644 --- a/pkgs/by-name/xr/xrootd/package.nix +++ b/pkgs/by-name/xr/xrootd/package.nix @@ -158,5 +158,6 @@ stdenv.mkDerivation (finalAttrs: { license = lib.licenses.lgpl3Plus; platforms = lib.platforms.all; maintainers = with lib.maintainers; [ ShamrockLee ]; + mainProgram = "xrootd"; }; }) diff --git a/pkgs/development/python-modules/snakemake-executor-plugin-cluster-generic/default.nix b/pkgs/development/python-modules/snakemake-executor-plugin-cluster-generic/default.nix index 4dab4726cc1b..660b4db7bfac 100644 --- a/pkgs/development/python-modules/snakemake-executor-plugin-cluster-generic/default.nix +++ b/pkgs/development/python-modules/snakemake-executor-plugin-cluster-generic/default.nix @@ -2,36 +2,69 @@ lib, buildPythonPackage, fetchFromGitHub, + + # build-system poetry-core, - snakemake-interface-executor-plugins, + + # dependencies snakemake-interface-common, + snakemake-interface-executor-plugins, + + # tests + pytestCheckHook, + snakemake, + writableTmpDirAsHomeHook, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "snakemake-executor-plugin-cluster-generic"; version = "1.0.9"; pyproject = true; + __structuredAttrs = true; src = fetchFromGitHub { owner = "snakemake"; repo = "snakemake-executor-plugin-cluster-generic"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-RHMefoJOZb6TjRsFCORLFdHtI5ZpTsV6CHrjHKMat9o="; }; - nativeBuildInputs = [ poetry-core ]; + build-system = [ + poetry-core + ]; - propagatedBuildInputs = [ - snakemake-interface-executor-plugins + dependencies = [ snakemake-interface-common + snakemake-interface-executor-plugins ]; pythonImportsCheck = [ "snakemake_executor_plugin_cluster_generic" ]; + nativeCheckInputs = [ + pytestCheckHook + snakemake + writableTmpDirAsHomeHook + ]; + + enabledTestPaths = [ "tests/tests.py" ]; + + disabledTestPaths = [ + # Failed to setup log file: [Errno 13] Permission denied: '/build/pytest-of-nixbld/pytest-0/test_group_workflow5/groups/.snakemake' + "tests/tests.py::TestWorkflowsCancelCmd::test_group_workflow" + "tests/tests.py::TestWorkflowsCancelCmd::test_simple_workflow" + "tests/tests.py::TestWorkflowsSidecar::test_group_workflow" + "tests/tests.py::TestWorkflowsSidecar::test_simple_workflow" + "tests/tests.py::TestWorkflowsStatusCmd::test_group_workflow" + "tests/tests.py::TestWorkflowsStatusCmd::test_simple_workflow" + "tests/tests.py::TestWorkflowsSubmitCmdOnly::test_group_workflow" + "tests/tests.py::TestWorkflowsSubmitCmdOnly::test_simple_workflow" + ]; + meta = { description = "Generic cluster executor for Snakemake"; homepage = "https://github.com/snakemake/snakemake-executor-plugin-cluster-generic"; + changelog = "https://github.com/snakemake/snakemake-executor-plugin-cluster-generic/releases/tag/${finalAttrs.src.tag}"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ veprbl ]; }; -} +}) diff --git a/pkgs/development/python-modules/snakemake-interface-common/default.nix b/pkgs/development/python-modules/snakemake-interface-common/default.nix index 4ff7030078fb..11eafb41897a 100644 --- a/pkgs/development/python-modules/snakemake-interface-common/default.nix +++ b/pkgs/development/python-modules/snakemake-interface-common/default.nix @@ -1,22 +1,34 @@ { lib, - argparse-dataclass, buildPythonPackage, - configargparse, fetchFromGitHub, fetchpatch, + + # build-system setuptools, + + # dependencies + argparse-dataclass, + configargparse, + + # tests + pytestCheckHook, + snakemake, + + # passthru + snakemake-interface-common, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "snakemake-interface-common"; version = "1.23.0"; pyproject = true; + __structuredAttrs = true; src = fetchFromGitHub { owner = "snakemake"; repo = "snakemake-interface-common"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-D3vktJmn1CifdiEg5UPGpBuuigEIb+ja4yklHZA6ytQ="; }; @@ -29,7 +41,9 @@ buildPythonPackage rec { }) ]; - build-system = [ setuptools ]; + build-system = [ + setuptools + ]; dependencies = [ argparse-dataclass @@ -38,16 +52,24 @@ buildPythonPackage rec { pythonImportsCheck = [ "snakemake_interface_common" ]; - # test_snakemake_version: No module named 'snakemake' - # nativeCheckInputs = [ pytestCheckHook ]; + nativeCheckInputs = [ + pytestCheckHook + snakemake + ]; - # enabledTestPaths = [ "tests/tests.py" ]; + enabledTestPaths = [ "tests/tests.py" ]; + + # Circular dependency with snakemake + doCheck = false; + passthru.tests.pytest = snakemake-interface-common.overridePythonAttrs { + doCheck = true; + }; meta = { description = "Common functions and classes for Snakemake and its plugins"; homepage = "https://github.com/snakemake/snakemake-interface-common"; - changelog = "https://github.com/snakemake/snakemake-interface-common/releases/tag/v${version}"; + changelog = "https://github.com/snakemake/snakemake-interface-common/releases/tag/${finalAttrs.src.tag}"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ veprbl ]; }; -} +}) diff --git a/pkgs/development/python-modules/snakemake-interface-executor-plugins/default.nix b/pkgs/development/python-modules/snakemake-interface-executor-plugins/default.nix index 6200948df93a..57d6ab72f582 100644 --- a/pkgs/development/python-modules/snakemake-interface-executor-plugins/default.nix +++ b/pkgs/development/python-modules/snakemake-interface-executor-plugins/default.nix @@ -2,39 +2,66 @@ lib, buildPythonPackage, fetchFromGitHub, + + # build-system poetry-core, + + # dependencies argparse-dataclass, - throttler, snakemake-interface-common, + throttler, + + # tests + pytestCheckHook, + snakemake-executor-plugin-cluster-generic, + + # passthru + snakemake-interface-executor-plugins, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "snakemake-interface-executor-plugins"; version = "9.4.0"; pyproject = true; + __structuredAttrs = true; src = fetchFromGitHub { owner = "snakemake"; repo = "snakemake-interface-executor-plugins"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-ePbdHMYB2LfCOglz87ZnsUkJH7B97hhSmNBGzwtl5OM="; }; - build-system = [ poetry-core ]; + build-system = [ + poetry-core + ]; dependencies = [ argparse-dataclass - throttler snakemake-interface-common + throttler ]; pythonImportsCheck = [ "snakemake_interface_executor_plugins" ]; + nativeCheckInputs = [ + pytestCheckHook + snakemake-executor-plugin-cluster-generic + ]; + + enabledTestPaths = [ "tests/tests.py" ]; + + # Circular dependency with snakemake + doCheck = false; + passthru.tests.pytest = snakemake-interface-executor-plugins.overridePythonAttrs { + doCheck = true; + }; + meta = { - description = "This package provides a stable interface for interactions between Snakemake and its executor plugins"; + description = "Stable interface for interactions between Snakemake and its executor plugins"; homepage = "https://github.com/snakemake/snakemake-interface-executor-plugins"; - changelog = "https://github.com/snakemake/snakemake-interface-executor-plugins/blob/${src.tag}/CHANGELOG.md"; + changelog = "https://github.com/snakemake/snakemake-interface-executor-plugins/blob/${finalAttrs.src.tag}/CHANGELOG.md"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ veprbl ]; }; -} +}) diff --git a/pkgs/development/python-modules/snakemake-interface-logger-plugins/default.nix b/pkgs/development/python-modules/snakemake-interface-logger-plugins/default.nix index 70854d4d851a..e4a115ea5c19 100644 --- a/pkgs/development/python-modules/snakemake-interface-logger-plugins/default.nix +++ b/pkgs/development/python-modules/snakemake-interface-logger-plugins/default.nix @@ -2,34 +2,62 @@ lib, buildPythonPackage, fetchFromGitHub, + + # build-system hatchling, + + # dependencies snakemake-interface-common, + + # tests + pytestCheckHook, + snakemake-logger-plugin-rich, + + # passthru + snakemake-interface-logger-plugins, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "snakemake-interface-logger-plugins"; - version = "2.0.1"; + version = "2.1.0"; pyproject = true; + __structuredAttrs = true; src = fetchFromGitHub { owner = "snakemake"; repo = "snakemake-interface-logger-plugins"; - tag = "v${version}"; - hash = "sha256-yvEjd4xBjjCocGK/HD1j5jcuy+syyXcEJGdsEFA0H40="; + tag = "v${finalAttrs.version}"; + hash = "sha256-UBdzJtKukR4Y9KPpu8qJv4HmN9ghncvEqGsTQnHk36k="; }; - nativeBuildInputs = [ hatchling ]; + build-system = [ + hatchling + ]; - propagatedBuildInputs = [ + dependencies = [ snakemake-interface-common ]; pythonImportsCheck = [ "snakemake_interface_logger_plugins" ]; + nativeCheckInputs = [ + pytestCheckHook + snakemake-logger-plugin-rich + ]; + + enabledTestPaths = [ "tests/tests.py" ]; + + # Circular dependency with snakemake + doCheck = false; + passthru.tests.pytest = snakemake-interface-logger-plugins.overridePythonAttrs { + doCheck = true; + }; + meta = { description = "Stable interface for interactions between Snakemake and its logger plugins"; homepage = "https://github.com/snakemake/snakemake-interface-logger-plugins"; + changelog = "https://github.com/snakemake/snakemake-interface-logger-plugins/blob/${finalAttrs.src.tag}/CHANGELOG.md"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ veprbl ]; }; -} +}) diff --git a/pkgs/development/python-modules/snakemake-interface-report-plugins/default.nix b/pkgs/development/python-modules/snakemake-interface-report-plugins/default.nix index 942da8601a29..d4400ce99643 100644 --- a/pkgs/development/python-modules/snakemake-interface-report-plugins/default.nix +++ b/pkgs/development/python-modules/snakemake-interface-report-plugins/default.nix @@ -2,32 +2,62 @@ lib, buildPythonPackage, fetchFromGitHub, + + # build-system poetry-core, + + # dependencies snakemake-interface-common, + + # tests + pytestCheckHook, + snakemake, + + # passthru + snakemake-interface-report-plugins, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "snakemake-interface-report-plugins"; version = "1.3.0"; pyproject = true; + __structuredAttrs = true; src = fetchFromGitHub { owner = "snakemake"; repo = "snakemake-interface-report-plugins"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-3ugEmdO1dcusKXXBZBRszlZXX5fhJyYSSF5Uj5CKJkQ="; }; - nativeBuildInputs = [ poetry-core ]; + build-system = [ + poetry-core + ]; - propagatedBuildInputs = [ snakemake-interface-common ]; + dependencies = [ + snakemake-interface-common + ]; pythonImportsCheck = [ "snakemake_interface_report_plugins" ]; + nativeCheckInputs = [ + pytestCheckHook + snakemake + ]; + + enabledTestPaths = [ "tests/tests.py" ]; + + # Circular dependency with snakemake + doCheck = false; + passthru.tests.pytest = snakemake-interface-report-plugins.overridePythonAttrs { + doCheck = true; + }; + meta = { description = "Interface for Snakemake report plugins"; homepage = "https://github.com/snakemake/snakemake-interface-report-plugins"; + changelog = "https://github.com/snakemake/snakemake-interface-report-plugins/blob/${finalAttrs.src.tag}/CHANGELOG.md"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ veprbl ]; }; -} +}) diff --git a/pkgs/development/python-modules/snakemake-interface-scheduler-plugins/default.nix b/pkgs/development/python-modules/snakemake-interface-scheduler-plugins/default.nix index bbceb3a22c30..6ccfe7862249 100644 --- a/pkgs/development/python-modules/snakemake-interface-scheduler-plugins/default.nix +++ b/pkgs/development/python-modules/snakemake-interface-scheduler-plugins/default.nix @@ -2,41 +2,62 @@ lib, buildPythonPackage, fetchFromGitHub, + + # build-system hatchling, + + # dependencies snakemake-interface-common, + + # tests + pytestCheckHook, + snakemake, + + # passthru + snakemake-interface-scheduler-plugins, }: -let +buildPythonPackage (finalAttrs: { + pname = "snakemake-interface-scheduler-plugins"; version = "2.0.2"; + pyproject = true; + __structuredAttrs = true; src = fetchFromGitHub { owner = "snakemake"; repo = "snakemake-interface-scheduler-plugins"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-BowMwZllFR9IKYUMhISAbf606awTxfmS/nQxkGgb4y8="; }; -in -buildPythonPackage { - pname = "snakemake-interface-scheduler-plugins"; - inherit version src; - pyproject = true; - build-system = [ hatchling ]; + build-system = [ + hatchling + ]; - dependencies = [ snakemake-interface-common ]; + dependencies = [ + snakemake-interface-common + ]; pythonImportsCheck = [ "snakemake_interface_scheduler_plugins" ]; - # test_scheduler: No module named 'snakemake' - # nativeCheckInputs = [ pytestCheckHook ]; + nativeCheckInputs = [ + pytestCheckHook + snakemake + ]; - # enabledTestPaths = [ "tests/tests.py" ]; + enabledTestPaths = [ "tests/tests.py" ]; + + # Circular dependency with snakemake + doCheck = false; + passthru.tests.pytest = snakemake-interface-scheduler-plugins.overridePythonAttrs { + doCheck = true; + }; meta = { description = "Provides a stable interface for interactions between Snakemake and its scheduler plugins"; homepage = "https://github.com/snakemake/snakemake-interface-scheduler-plugins"; - changelog = "https://github.com/snakemake/snakemake-interface-scheduler-plugins/blob/${src.rev}/CHANGELOG.md"; + changelog = "https://github.com/snakemake/snakemake-interface-scheduler-plugins/blob/${finalAttrs.src.tag}/CHANGELOG.md"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ kyehn ]; }; -} +}) diff --git a/pkgs/development/python-modules/snakemake-interface-storage-plugins/default.nix b/pkgs/development/python-modules/snakemake-interface-storage-plugins/default.nix index c9d157ba6c70..8b3f8c5f94ea 100644 --- a/pkgs/development/python-modules/snakemake-interface-storage-plugins/default.nix +++ b/pkgs/development/python-modules/snakemake-interface-storage-plugins/default.nix @@ -2,42 +2,77 @@ lib, buildPythonPackage, fetchFromGitHub, + + # build-system poetry-core, + + # dependencies humanfriendly, reretry, snakemake-interface-common, + tenacity, throttler, wrapt, + + # tests + pytestCheckHook, + snakemake, + snakemake-storage-plugin-http, + + # passthru + snakemake-interface-storage-plugins, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "snakemake-interface-storage-plugins"; - version = "4.3.2"; + version = "4.4.1"; pyproject = true; + __structuredAttrs = true; src = fetchFromGitHub { owner = "snakemake"; repo = "snakemake-interface-storage-plugins"; - tag = "v${version}"; - hash = "sha256-W2cUwc+9jng4IvBuN+m4WqpehA8qElTRb43w3QOIeN0="; + tag = "v${finalAttrs.version}"; + hash = "sha256-tqSIJnU1+DPx/GI5/wzMkoxpLyM/k/SO8FtejRv9Zls="; }; - nativeBuildInputs = [ poetry-core ]; + build-system = [ poetry-core ]; - propagatedBuildInputs = [ + dependencies = [ humanfriendly reretry snakemake-interface-common + tenacity throttler wrapt ]; pythonImportsCheck = [ "snakemake_interface_storage_plugins" ]; + nativeCheckInputs = [ + pytestCheckHook + snakemake + snakemake-storage-plugin-http + ]; + + enabledTestPaths = [ "tests/tests.py" ]; + + disabledTests = [ + # Requires internet access + "test_storage" + ]; + + # Circular dependency with snakemake + doCheck = false; + passthru.tests.pytest = snakemake-interface-storage-plugins.overridePythonAttrs { + doCheck = true; + }; + meta = { - description = "This package provides a stable interface for interactions between Snakemake and its storage plugins"; + description = "Stable interface for interactions between Snakemake and its storage plugins"; + changelog = "https://github.com/snakemake/snakemake-interface-storage-plugins/releases/tag/${finalAttrs.src.tag}"; homepage = "https://github.com/snakemake/snakemake-interface-storage-plugins"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ veprbl ]; }; -} +}) diff --git a/pkgs/development/python-modules/snakemake-logger-plugin-rich/default.nix b/pkgs/development/python-modules/snakemake-logger-plugin-rich/default.nix new file mode 100644 index 000000000000..ea76afe73264 --- /dev/null +++ b/pkgs/development/python-modules/snakemake-logger-plugin-rich/default.nix @@ -0,0 +1,60 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + + # build-system + hatchling, + + # dependencies + pydantic, + rich, + snakemake-interface-executor-plugins, + snakemake-interface-logger-plugins, + + # tests + pytestCheckHook, + snakemake, + writableTmpDirAsHomeHook, +}: + +buildPythonPackage (finalAttrs: { + pname = "snakemake-logger-plugin-rich"; + version = "0.4.1"; + pyproject = true; + __structuredAttrs = true; + + src = fetchFromGitHub { + owner = "cademirch"; + repo = "snakemake-logger-plugin-rich"; + tag = "v${finalAttrs.version}"; + hash = "sha256-kMjzagM95Td529JU+qIxGStgJGctS08glrFo3CF+Ih8="; + }; + + build-system = [ + hatchling + ]; + + dependencies = [ + pydantic + rich + snakemake-interface-executor-plugins + snakemake-interface-logger-plugins + ]; + + pythonImportsCheck = [ "snakemake_logger_plugin_rich" ]; + + nativeCheckInputs = [ + pytestCheckHook + snakemake + writableTmpDirAsHomeHook + ]; + + meta = { + description = "Snakemake logger plugin using Rich"; + homepage = "https://github.com/cademirch/snakemake-logger-plugin-rich"; + changelog = "https://github.com/cademirch/snakemake-logger-plugin-rich/blob/${finalAttrs.src.tag}/CHANGELOG.md"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ GaetanLepage ]; + }; +}) diff --git a/pkgs/development/python-modules/snakemake-storage-plugin-fs/default.nix b/pkgs/development/python-modules/snakemake-storage-plugin-fs/default.nix index 41c0f43edf22..96bcb3fc30fc 100644 --- a/pkgs/development/python-modules/snakemake-storage-plugin-fs/default.nix +++ b/pkgs/development/python-modules/snakemake-storage-plugin-fs/default.nix @@ -2,42 +2,59 @@ lib, buildPythonPackage, fetchFromGitHub, + + # build-system poetry-core, - snakemake-interface-storage-plugins, + + # dependencies snakemake-interface-common, + snakemake-interface-storage-plugins, sysrsync, + + # tests + pytestCheckHook, + snakemake, + writableTmpDirAsHomeHook, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "snakemake-storage-plugin-fs"; version = "1.1.3"; pyproject = true; + __structuredAttrs = true; src = fetchFromGitHub { owner = "snakemake"; repo = "snakemake-storage-plugin-fs"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-UdK0yhl7ljLh57CXAvH/OYiVyw+BjhPwGjSBXX8sbZk="; }; - build-system = [ poetry-core ]; + build-system = [ + poetry-core + ]; dependencies = [ - snakemake-interface-storage-plugins snakemake-interface-common + snakemake-interface-storage-plugins sysrsync ]; - # The current tests are not worth dealing with cyclic dependency on snakemake - doCheck = false; + pythonImportsCheck = [ "snakemake_storage_plugin_fs" ]; - # Use nothing due to a cyclic dependency on snakemake - pythonImportsCheck = [ ]; + nativeCheckInputs = [ + pytestCheckHook + snakemake + writableTmpDirAsHomeHook + ]; + + enabledTestPaths = [ "tests/tests.py" ]; meta = { description = "Snakemake storage plugin that reads and writes from a locally mounted filesystem using rsync"; homepage = "https://github.com/snakemake/snakemake-storage-plugin-fs"; + changelog = "https://github.com/snakemake/snakemake-storage-plugin-fs/blob/${finalAttrs.src.tag}/CHANGELOG.md"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ veprbl ]; }; -} +}) diff --git a/pkgs/development/python-modules/snakemake-storage-plugin-http/default.nix b/pkgs/development/python-modules/snakemake-storage-plugin-http/default.nix new file mode 100644 index 000000000000..8b36587e5dfb --- /dev/null +++ b/pkgs/development/python-modules/snakemake-storage-plugin-http/default.nix @@ -0,0 +1,68 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + + # build-system + poetry-core, + + # dependencies + requests, + requests-oauthlib, + snakemake-interface-common, + snakemake-interface-storage-plugins, + + # tests + pytestCheckHook, + snakemake, +}: + +buildPythonPackage (finalAttrs: { + pname = "snakemake-storage-plugin-http"; + version = "0.3.1"; + pyproject = true; + __structuredAttrs = true; + + src = fetchFromGitHub { + owner = "snakemake"; + repo = "snakemake-storage-plugin-http"; + tag = "v${finalAttrs.version}"; + hash = "sha256-ad4IOjU761CaZ+o0//I8/xW+e+4UJG0+VAbQ9KcNjFY="; + }; + + build-system = [ + poetry-core + ]; + + pythonRelaxDeps = [ + "requests-oauthlib" + ]; + dependencies = [ + requests + requests-oauthlib + snakemake-interface-common + snakemake-interface-storage-plugins + ]; + + pythonImportsCheck = [ "snakemake_storage_plugin_http" ]; + + nativeCheckInputs = [ + pytestCheckHook + snakemake + ]; + + enabledTestPaths = [ "tests/tests.py" ]; + + disabledTests = [ + # Requires internet access + "test_storage" + ]; + + meta = { + description = "Snakemake storage plugin for donwloading input files from HTTP(s)"; + homepage = "https://github.com/snakemake/snakemake-storage-plugin-http"; + changelog = "https://github.com/snakemake/snakemake-storage-plugin-http/blob/${finalAttrs.src.tag}/CHANGELOG.md"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ GaetanLepage ]; + }; +}) diff --git a/pkgs/development/python-modules/snakemake-storage-plugin-s3/default.nix b/pkgs/development/python-modules/snakemake-storage-plugin-s3/default.nix index 3b8529714ed8..d757a619609a 100644 --- a/pkgs/development/python-modules/snakemake-storage-plugin-s3/default.nix +++ b/pkgs/development/python-modules/snakemake-storage-plugin-s3/default.nix @@ -2,24 +2,33 @@ lib, buildPythonPackage, fetchFromGitHub, + + # build-system + poetry-core, + + # dependencies boto3, botocore, - poetry-core, - snakemake, - snakemake-interface-storage-plugins, snakemake-interface-common, + snakemake-interface-storage-plugins, urllib3, + + # tests + pytestCheckHook, + snakemake, + writableTmpDirAsHomeHook, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "snakemake-storage-plugin-s3"; version = "0.3.6"; pyproject = true; + __structuredAttrs = true; src = fetchFromGitHub { owner = "snakemake"; repo = "snakemake-storage-plugin-s3"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-hvyQ6V6POUBWTCWt9moQlH0RgSM4J36kjbXK4TtO8Bo="; }; @@ -33,15 +42,31 @@ buildPythonPackage rec { urllib3 ]; - nativeCheckInputs = [ snakemake ]; - pythonImportsCheck = [ "snakemake_storage_plugin_s3" ]; + nativeCheckInputs = [ + pytestCheckHook + snakemake + writableTmpDirAsHomeHook + ]; + + enabledTestPaths = [ "tests/tests.py" ]; + + disabledTests = [ + # Requires internet access + "test_storage" + + # snakemake_interface_common.exceptions.WorkflowError: Failed to create local storage prefix .snakemake/storage/s3 + # PermissionError: [Errno 13] Permission denied: '.snakemake' + "test_group_workflow" + "test_simple_workflow" + ]; + meta = { description = "Snakemake storage plugin for S3 API storage (AWS S3, MinIO, etc.)"; homepage = "https://github.com/snakemake/snakemake-storage-plugin-s3"; - changelog = "https://github.com/snakemake/snakemake-storage-plugin-s3/releases/tag/${src.tag}"; + changelog = "https://github.com/snakemake/snakemake-storage-plugin-s3/releases/tag/${finalAttrs.src.tag}"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ veprbl ]; }; -} +}) diff --git a/pkgs/development/python-modules/snakemake-storage-plugin-xrootd/default.nix b/pkgs/development/python-modules/snakemake-storage-plugin-xrootd/default.nix index de5a3cbdf62d..fc67fd23a9ad 100644 --- a/pkgs/development/python-modules/snakemake-storage-plugin-xrootd/default.nix +++ b/pkgs/development/python-modules/snakemake-storage-plugin-xrootd/default.nix @@ -1,29 +1,43 @@ { lib, + pkgs, buildPythonPackage, fetchFromGitHub, + + # build-system hatch-vcs, hatchling, - snakemake, - snakemake-interface-storage-plugins, + + # dependencies + reretry, snakemake-interface-common, + snakemake-interface-storage-plugins, xrootd, + + # tests + pytestCheckHook, + snakemake, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "snakemake-storage-plugin-xrootd"; - version = "1.0.0"; + version = "1.1.0"; pyproject = true; + __structuredAttrs = true; src = fetchFromGitHub { owner = "snakemake"; repo = "snakemake-storage-plugin-xrootd"; - tag = "v${version}"; - hash = "sha256-QYG/BE7y3h/Mz1PrVVxmfBBLBLoirrEx9unSEaflUds="; + tag = "v${finalAttrs.version}"; + hash = "sha256-vL9JD9h0ywsKpUPoXhgg6b+vwi7kxK8CF3L6HnAEidE="; }; - # xrootd<6.0.0,>=5.6.4 not satisfied by version 5.7rc20240303 - pythonRelaxDeps = [ "xrootd" ]; + postPatch = '' + substituteInPlace tests/tests.py \ + --replace-fail \ + 'subprocess.Popen(["xrootd",' \ + 'subprocess.Popen(["${lib.getExe pkgs.xrootd}",' + ''; build-system = [ hatch-vcs @@ -33,17 +47,24 @@ buildPythonPackage rec { dependencies = [ snakemake-interface-storage-plugins snakemake-interface-common + reretry xrootd ]; - nativeCheckInputs = [ snakemake ]; - pythonImportsCheck = [ "snakemake_storage_plugin_xrootd" ]; + nativeCheckInputs = [ + pytestCheckHook + snakemake + ]; + + enabledTestPaths = [ "tests/tests.py" ]; + meta = { description = "Snakemake storage plugin for handling input and output via XRootD"; homepage = "https://github.com/snakemake/snakemake-storage-plugin-xrootd"; + changelog = "https://github.com/snakemake/snakemake-storage-plugin-xrootd/releases/tag/${finalAttrs.src.tag}"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ veprbl ]; }; -} +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 89dc567da3b0..6df32da3a38b 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -18194,10 +18194,18 @@ self: super: with self; { callPackage ../development/python-modules/snakemake-interface-storage-plugins { }; + snakemake-logger-plugin-rich = + callPackage ../development/python-modules/snakemake-logger-plugin-rich + { }; + snakemake-storage-plugin-fs = callPackage ../development/python-modules/snakemake-storage-plugin-fs { }; + snakemake-storage-plugin-http = + callPackage ../development/python-modules/snakemake-storage-plugin-http + { }; + snakemake-storage-plugin-s3 = callPackage ../development/python-modules/snakemake-storage-plugin-s3 { };