Unverified Commit ecb80a77 authored by Doron Behar's avatar Doron Behar Committed by GitHub
Browse files

python3.pkgs.beets: use fixed-point arguments (#477084)

parents 7affa481 a615e9dc
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@
  hatchling,

  # native
  beets,
  beets-minimal,

  # dependencies
  markdownify,
@@ -35,7 +35,7 @@ buildPythonPackage rec {
  ];

  nativeBuildInputs = [
    beets
    beets-minimal
  ];

  pythonRelaxDeps = true;
+80 −38
Original line number Diff line number Diff line
@@ -19,13 +19,15 @@
  **     };
  **   };
  ** }
  **
  ** For an example adding a builtin plugin, see
  ** passthru.tests.with-new-builtin-plugin below
*/
{
  lib,
  stdenv,
  buildPythonPackage,
  fetchFromGitHub,
  beets,

  # build-system
  poetry-core,
@@ -104,24 +106,16 @@

  # passthru.tests
  runCommand,
  beets,
}:

let
  # Avoid using `rec`, so that using e.g `passthru` or any other attributes
  # defined inside, will have to be done via the beets argument, which can be
  # overriden. Until `finalAttrs` support reaches `buildPythonPackage`, there
  # is no way to avoid this. See:
  #
  # https://github.com/NixOS/nixpkgs/issues/258246
  version = "2.5.1";
in
buildPythonPackage {
buildPythonPackage (finalAttrs: {
  pname = "beets";
  version = "2.5.1";
  src = fetchFromGitHub {
    owner = "beetbox";
    repo = "beets";
    tag = "v${version}";
    tag = "v${finalAttrs.version}";
    hash = "sha256-H3jcEHyK13+RHVlV4zp+8M3LZ0Jc2FdmAbLpekGozLA=";
  };
  pyproject = true;
@@ -154,7 +148,9 @@ buildPythonPackage {
    typing-extensions
    lap
  ]
  ++ (lib.concatMap (p: p.propagatedBuildInputs) (lib.attrValues beets.passthru.plugins.enabled));
  ++ (lib.concatMap (p: p.propagatedBuildInputs) (
    lib.attrValues finalAttrs.finalPackage.passthru.plugins.enabled
  ));

  nativeBuildInputs = [
    gobject-introspection
@@ -195,7 +191,7 @@ buildPythonPackage {
  makeWrapperArgs = [
    "--set GI_TYPELIB_PATH \"$GI_TYPELIB_PATH\""
    "--set GST_PLUGIN_SYSTEM_PATH_1_0 \"$GST_PLUGIN_SYSTEM_PATH_1_0\""
    "--prefix PATH : ${lib.makeBinPath beets.passthru.plugins.wrapperBins}"
    "--prefix PATH : ${lib.makeBinPath finalAttrs.finalPackage.passthru.plugins.wrapperBins}"
  ];

  nativeCheckInputs = [
@@ -208,12 +204,12 @@ buildPythonPackage {
    pillow
    writableTmpDirAsHomeHook
  ]
  ++ beets.passthru.plugins.wrapperBins;
  ++ finalAttrs.finalPackage.passthru.plugins.wrapperBins;

  __darwinAllowLocalNetworking = true;

  disabledTestPaths =
    beets.passthru.plugins.disabledTestPaths
    finalAttrs.finalPackage.passthru.plugins.disabledTestPaths
    ++ [
      # touches network
      "test/plugins/test_aura.py"
@@ -255,14 +251,14 @@ buildPythonPackage {
      \( -name '*.py' -o -path 'beetsplug/*/__init__.py' \) -print \
      | sed -n -re 's|^beetsplug/([^/.]+).*|\1|p' \
      | sort -u > plugins_available
    ${diffPlugins (lib.attrNames beets.passthru.plugins.builtins) "plugins_available"}
    ${diffPlugins (lib.attrNames finalAttrs.finalPackage.passthru.plugins.builtins) "plugins_available"}

    export BEETS_TEST_SHELL="${lib.getExe bashInteractive} --norc"

    env EDITOR="${writeScript "beetconfig.sh" ''
      #!${runtimeShell}
      cat > "$1" <<CFG
      plugins: ${lib.concatStringsSep " " (lib.attrNames beets.passthru.plugins.enabled)}
      plugins: ${lib.concatStringsSep " " (lib.attrNames finalAttrs.finalPackage.passthru.plugins.enabled)}
      CFG
    ''}" "$out/bin/beet" config -e
    env EDITOR=true "$out/bin/beet" config -e
@@ -442,13 +438,17 @@ buildPythonPackage {
          testPaths = [ ];
        };
      };
      base = lib.mapAttrs (_: a: { builtin = true; } // a) beets.passthru.plugins.builtins;
      base = lib.mapAttrs (
        _: a: { builtin = true; } // a
      ) finalAttrs.finalPackage.passthru.plugins.builtins;
      overrides = lib.mapAttrs (
        plugName:
        lib.throwIf (beets.passthru.plugins.builtins.${plugName}.deprecated or false)
        lib.throwIf (finalAttrs.finalPackage.passthru.plugins.builtins.${plugName}.deprecated or false)
          "beets evaluation error: Plugin ${plugName} was enabled in pluginOverrides, but it has been removed. Remove the override to fix evaluation."
      ) pluginOverrides;
      all = lib.mapAttrs (
      all =
        lib.mapAttrs
          (
            n: a:
            {
              name = n;
@@ -459,13 +459,18 @@ buildPythonPackage {
              wrapperBins = [ ];
            }
            // a
      ) (lib.recursiveUpdate beets.passthru.plugins.base beets.passthru.plugins.overrides);
      enabled = lib.filterAttrs (_: p: p.enable) beets.passthru.plugins.all;
      disabled = lib.filterAttrs (_: p: !p.enable) beets.passthru.plugins.all;
          )
          (
            lib.recursiveUpdate finalAttrs.finalPackage.passthru.plugins.base finalAttrs.finalPackage.passthru.plugins.overrides
          );
      enabled = lib.filterAttrs (_: p: p.enable) finalAttrs.finalPackage.passthru.plugins.all;
      disabled = lib.filterAttrs (_: p: !p.enable) finalAttrs.finalPackage.passthru.plugins.all;
      disabledTestPaths = lib.flatten (
        lib.attrValues (lib.mapAttrs (_: v: v.testPaths) beets.passthru.plugins.disabled)
        lib.attrValues (lib.mapAttrs (_: v: v.testPaths) finalAttrs.finalPackage.passthru.plugins.disabled)
      );
      wrapperBins = lib.concatMap (p: p.wrapperBins) (
        lib.attrValues finalAttrs.finalPackage.passthru.plugins.enabled
      );
      wrapperBins = lib.concatMap (p: p.wrapperBins) (lib.attrValues beets.passthru.plugins.enabled);
    };
    tests = {
      gstreamer =
@@ -483,7 +488,44 @@ buildPythonPackage {
              backend: gstreamer
            EOF

            ${beets}/bin/beet -c $out/config.yaml > /dev/null
            ${finalAttrs.finalPackage}/bin/beet -c $out/config.yaml > /dev/null
          '';
      with-new-builtin-plugin = finalAttrs.finalPackage.overrideAttrs (
        newAttrs: oldAttrs: {
          postPatch = (oldAttrs.postPatch or "") + ''
            mkdir -p beetsplug/my_special_plugin
            touch beetsplug/my_special_plugin/__init__.py
          '';
          passthru = lib.recursiveUpdate oldAttrs.passthru {
            plugins.builtins.my_special_plugin = { };
          };
        }
      );
      # Test that disabling
      with-mpd-plugins-disabled = beets.override {
        pluginOverrides = {
          # These two plugins require mpd2 Python dependency. If they are
          # disabled, this dependency shouldn't be pulled, and the `runCommand`
          # test below should fail with a `ModuleNotFoundError`
          mpdstats.enable = false;
          mpdupdate.enable = false;
        };
      };
      mpd-plugins-really-disabled = runCommand "beets-mpd-plugins-disabled-test" { } ''
        set -euo pipefail
        export HOME=$(mktemp -d)
        mkdir $out

        cat << EOF > $out/config.yaml
        plugins:
          - mpdstats
        EOF
        ${finalAttrs.finalPackage.passthru.tests.with-mpd-plugins-disabled}/bin/beet \
          -c $out/config.yaml \
          --help 2> $out/help-stderr || true
        ${finalAttrs.finalPackage.passthru.tests.with-mpd-plugins-disabled}/bin/beet \
          -c $out/config.yaml \
          mpdstats --help 2> $out/mpdstats-help-stderr || true
      '';
    };
  };
@@ -501,4 +543,4 @@ buildPythonPackage {
    platforms = lib.platforms.linux ++ lib.platforms.darwin;
    mainProgram = "beet";
  };
}
})