about summary refs log tree commit diff
path: root/pkgs/by-name/nb/nbqa/package.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/nb/nbqa/package.nix')
-rw-r--r--pkgs/by-name/nb/nbqa/package.nix180
1 files changed, 91 insertions, 89 deletions
diff --git a/pkgs/by-name/nb/nbqa/package.nix b/pkgs/by-name/nb/nbqa/package.nix
index f4b1a8fdf527e..07fdcdde271a7 100644
--- a/pkgs/by-name/nb/nbqa/package.nix
+++ b/pkgs/by-name/nb/nbqa/package.nix
@@ -4,112 +4,114 @@
   fetchFromGitHub,
 
   # optional-dependencies
-  black,
-  blacken-docs,
   ruff,
 
-  # passthru
-  testers,
-  nbqa,
+  # tests
+  versionCheckHook,
 }:
-python3.pkgs.buildPythonApplication rec {
-  pname = "nbqa";
-  version = "1.9.0";
-  pyproject = true;
 
-  src = fetchFromGitHub {
-    owner = "nbQA-dev";
-    repo = "nbQA";
-    rev = "refs/tags/${version}";
-    hash = "sha256-9s+q2unh+jezU0Er7ZH0tvgntmPFts9OmsgAMeQXRrY=";
-  };
+let
+  nbqa = python3.pkgs.buildPythonApplication rec {
+    pname = "nbqa";
+    version = "1.9.0";
+    pyproject = true;
 
-  build-system = with python3.pkgs; [
-    setuptools
-  ];
+    src = fetchFromGitHub {
+      owner = "nbQA-dev";
+      repo = "nbQA";
+      rev = "refs/tags/${version}";
+      hash = "sha256-9s+q2unh+jezU0Er7ZH0tvgntmPFts9OmsgAMeQXRrY=";
+    };
 
-  passthru.optional-dependencies = {
-    black = [ black ];
-    blacken-docs = [ blacken-docs ];
-    flake8 = [ python3.pkgs.flake8 ];
-    isort = [ python3.pkgs.isort ];
-    jupytext = [ python3.pkgs.jupytext ];
-    mypy = [ python3.pkgs.mypy ];
-    pylint = [ python3.pkgs.pylint ];
-    pyupgrade = [ python3.pkgs.pyupgrade ];
-    ruff = [ ruff ];
-  };
+    build-system = with python3.pkgs; [
+      setuptools
+    ];
 
-  dependencies =
-    with python3.pkgs;
-    [
+    optional-dependencies.toolchain =
+      (with python3.pkgs; [
+        black
+        blacken-docs
+        flake8
+        isort
+        jupytext
+        mypy
+        pylint
+        pyupgrade
+      ])
+      ++ [
+        ruff
+      ];
+
+    dependencies = with python3.pkgs; [
       autopep8
       ipython
       tokenize-rt
       tomli
-    ]
-    ++ builtins.attrValues passthru.optional-dependencies;
+    ];
 
-  postPatch = ''
-    # Force using the Ruff executable rather than the Python package
-    substituteInPlace nbqa/__main__.py --replace 'if shell:' 'if shell or main_command == "ruff":'
-  '';
+    postPatch = ''
+      # Force using the Ruff executable rather than the Python package
+      substituteInPlace nbqa/__main__.py --replace 'if shell:' 'if shell or main_command == "ruff":'
+    '';
 
-  preCheck = ''
-    # Allow the tests to run `nbqa` itself from the path
-    export PATH="$out/bin":"$PATH"
-  '';
+    preCheck = ''
+      # Allow the tests to run `nbqa` itself from the path
+      export PATH="$out/bin":"$PATH"
+    '';
 
-  nativeCheckInputs =
-    [
-      black
-      ruff
-    ]
-    ++ (with python3.pkgs; [
-      autoflake
-      distutils
-      flake8
-      isort
-      jupytext
-      mdformat
-      pre-commit-hooks
-      pydocstyle
-      pylint
-      pytestCheckHook
-      pyupgrade
-      yapf
-    ]);
+    nativeCheckInputs =
+      (with python3.pkgs; [
+        autoflake
+        distutils
+        mdformat
+        pre-commit-hooks
+        pydocstyle
+        pytestCheckHook
+        yapf
+      ])
+      ++ lib.flatten (lib.attrValues optional-dependencies)
+      ++ [ versionCheckHook ];
 
-  disabledTests = [
-    # Test data not found
-    "test_black_multiple_files"
-    "test_black_return_code"
-    "test_grep"
-    "test_jupytext_on_folder"
-    "test_mypy_works"
-    "test_running_in_different_dir_works"
-    "test_unable_to_reconstruct_message_pythonpath"
-    "test_with_subcommand"
-    "test_pylint_works"
-  ];
+    disabledTests = [
+      # Test data not found
+      "test_black_multiple_files"
+      "test_black_return_code"
+      "test_grep"
+      "test_jupytext_on_folder"
+      "test_mypy_works"
+      "test_running_in_different_dir_works"
+      "test_unable_to_reconstruct_message_pythonpath"
+      "test_with_subcommand"
+      "test_pylint_works"
+    ];
 
-  disabledTestPaths = [
-    # Test data not found
-    "tests/test_include_exclude.py"
-  ];
+    disabledTestPaths = [
+      # Test data not found
+      "tests/test_include_exclude.py"
+    ];
 
-  passthru = {
-    tests.version = testers.testVersion {
-      package = nbqa;
+    passthru = {
+      # selector is a function mapping pythonPackages to a list of code quality
+      # tools, e.g. nbqa.withTools (ps: [ ps.black ])
+      withTools =
+        selector:
+        nbqa.overridePythonAttrs (
+          { dependencies, ... }:
+          {
+            dependencies = dependencies ++ selector python3.pkgs;
+            doCheck = false;
+          }
+        );
     };
-  };
 
-  meta = {
-    homepage = "https://github.com/nbQA-dev/nbQA";
-    changelog = "https://nbqa.readthedocs.io/en/latest/history.html";
-    description = "Run ruff, isort, pyupgrade, mypy, pylint, flake8, black, blacken-docs, and more on Jupyter Notebooks";
-    license = lib.licenses.mit;
-    maintainers = with lib.maintainers; [ l0b0 ];
-    mainProgram = "nbqa";
+    meta = {
+      homepage = "https://github.com/nbQA-dev/nbQA";
+      changelog = "https://nbqa.readthedocs.io/en/latest/history.html";
+      description = "Run ruff, isort, pyupgrade, mypy, pylint, flake8, black, blacken-docs, and more on Jupyter Notebooks";
+      license = lib.licenses.mit;
+      maintainers = with lib.maintainers; [ l0b0 ];
+      mainProgram = "nbqa";
+    };
   };
-}
+in
+nbqa