diff --git a/pkgs/tools/misc/blacken-docs/default.nix b/pkgs/tools/misc/blacken-docs/default.nix new file mode 100644 index 000000000000..186f1d393ac3 --- /dev/null +++ b/pkgs/tools/misc/blacken-docs/default.nix @@ -0,0 +1,38 @@ +{ black +, fetchFromGitHub +, lib +, python3 +}: +python3.pkgs.buildPythonApplication rec { + pname = "blacken-docs"; + version = "1.15.0"; + format = "pyproject"; + + src = fetchFromGitHub { + owner = "adamchainz"; + repo = "blacken-docs"; + rev = version; + hash = "sha256-3FGuFOAHCcybPwujWlh58NWtuF5CebaKTgBWgCGpSL8="; + }; + + nativeBuildInputs = [ + python3.pkgs.setuptools + ]; + + propagatedBuildInputs = [ + black + ]; + + nativeCheckInputs = [ + black + python3.pkgs.pytestCheckHook + ]; + + meta = with lib; { + homepage = "https://github.com/adamchainz/blacken-docs"; + changelog = "https://github.com/adamchainz/blacken-docs/blob/${src.rev}/CHANGELOG.rst"; + description = "Run Black on Python code blocks in documentation files"; + license = licenses.mit; + maintainers = with maintainers; [ l0b0 ]; + }; +} diff --git a/pkgs/tools/misc/nbqa/default.nix b/pkgs/tools/misc/nbqa/default.nix new file mode 100644 index 000000000000..214ab79abd63 --- /dev/null +++ b/pkgs/tools/misc/nbqa/default.nix @@ -0,0 +1,93 @@ +{ black +, blacken-docs +, fetchFromGitHub +, lib +, python3 +, ruff +}: +python3.pkgs.buildPythonApplication rec { + pname = "nbqa"; + version = "1.7.0"; + + src = fetchFromGitHub { + owner = "nbQA-dev"; + repo = "nbQA"; + rev = version; + hash = "sha256-CTF5HisBS44Ta18cVT04UrMIF30WmEBwZBGW7fkKXwk="; + }; + + 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 ]; + }; + + propagatedBuildInputs = 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":' + ''; + + preCheck = '' + # Allow the tests to run `nbqa` itself from the path + export PATH="$out/bin":"$PATH" + ''; + + nativeCheckInputs = + [ + black + ruff + ] + ++ (with python3.pkgs; [ + autoflake + flake8 + isort + jupytext + mdformat + pre-commit-hooks + pydocstyle + pylint + pytestCheckHook + pyupgrade + yapf + ]); + + 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" + ]; + + disabledTestPaths = [ + # Test data not found + "tests/test_include_exclude.py" + ]; + + meta = with lib; { + 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 = licenses.mit; + maintainers = with maintainers; [ l0b0 ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6b2945e8caa8..962a97fd6f9e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6916,6 +6916,8 @@ with pkgs; bbin = callPackage ../development/tools/bbin { }; + blacken-docs = callPackage ../tools/misc/blacken-docs { }; + bore = callPackage ../tools/networking/bore { inherit (darwin) Libsystem; inherit (darwin.apple_sdk.frameworks) SystemConfiguration; @@ -10989,6 +10991,8 @@ with pkgs; nb = callPackage ../tools/misc/nb { }; + nbqa = callPackage ../tools/misc/nbqa { }; + kb = callPackage ../tools/misc/kb { }; notable = callPackage ../applications/misc/notable { };