summary refs log tree commit diff
path: root/pkgs/development/python-modules/pypass/default.nix
blob: 9c497b3e3b50438c9994a4e4dfb1960892cfa5e8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
{ stdenv
, lib
, buildPythonPackage
, click
, colorama
, enum34
, fetchPypi
, git
, gnugrep
, gnupg
, nose
, pbr
, pexpect
, pythonAtLeast
, pythonOlder
, substituteAll
, tree
, xclip
}:

# Use the `pypass` top-level attribute, if you're interested in the
# application
buildPythonPackage rec {
  pname = "pypass";
  version = "0.2.1";

  src = fetchPypi {
    inherit pname version;
    sha256 = "1nm4mj7pd7gz4ghic6b3wrnd1b59hd1f0axavdabfl79wy511l7r";
  };

  # Set absolute nix store paths to the executables that pypass uses
  patches = [
    (substituteAll {
      src = ./mark-executables.patch;
      git_exec = "${git}/bin/git";
      grep_exec = "${gnugrep}/bin/grep";
      gpg_exec = "${gnupg}/bin/gpg2";
      tree_exec = "${tree}/bin/tree";
      xclip_exec = "${xclip}/bin/xclip";
    })
  ];

  # Remove enum34 requirement if Python >= 3.4
  postPatch = lib.optionalString (pythonAtLeast "3.4") ''
    substituteInPlace requirements.txt --replace "enum34" ""
  '';

  nativeBuildInputs = [ pbr ];

  propagatedBuildInputs = [
    click
    colorama
    pexpect
  ] ++ lib.optional (pythonOlder "3.4") enum34;

  nativeCheckInputs = [ nose ];

  # Configuration so that the tests work
  preCheck = ''
    HOME=$TEMP ${git}/bin/git config --global user.email "nix-builder@nixos.org"
    HOME=$TEMP ${git}/bin/git config --global user.name "Nix Builder"
    HOME=$TEMP ${git}/bin/git config --global pull.ff only
    HOME=$TEMP make setup_gpg
  '';

  # Run tests but exclude the test that uses clipboard as I wasn't able to make
  # it work - probably the X clipboard just doesn't work in the build
  # environment..
  checkPhase = ''
    runHook preCheck
    HOME=$TEMP GNUPGHOME=pypass/tests/gnupg nosetests -v --exclude=test_show_clip .
    runHook postCheck
  '';

  meta = with lib; {
    broken = stdenv.isDarwin;
    description = "Password manager pass in Python";
    homepage = "https://github.com/aviau/python-pass";
    license = licenses.gpl3Plus;
    platforms = platforms.all;
    maintainers = with maintainers; [ jluttine ];
  };
}