about summary refs log tree commit diff
path: root/pkgs/development/python-modules/maestral/default.nix
blob: 52ebece153147c0db2e4b3a3224c58b979125652 (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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
{
  lib,
  stdenv,
  buildPythonPackage,
  fetchFromGitHub,
  makePythonPath,
  pythonOlder,
  python,
  click,
  dbus-python,
  desktop-notifier,
  dropbox,
  fasteners,
  importlib-metadata,
  keyring,
  keyrings-alt,
  packaging,
  pathspec,
  pyro5,
  requests,
  rich,
  rubicon-objc,
  setuptools,
  survey,
  typing-extensions,
  watchdog,
  xattr,
  pytestCheckHook,
  nixosTests,
}:

buildPythonPackage rec {
  pname = "maestral";
  version = "1.9.4";
  pyproject = true;

  disabled = pythonOlder "3.8";

  src = fetchFromGitHub {
    owner = "SamSchott";
    repo = "maestral";
    rev = "refs/tags/v${version}";
    hash = "sha256-akh0COltpUU4Z4kfubg6A7k6W8ICoqVYkmFpMkTC8H8=";
  };

  build-system = [ setuptools ];

  dependencies = [
    click
    desktop-notifier
    dbus-python
    dropbox
    fasteners
    importlib-metadata
    keyring
    keyrings-alt
    packaging
    pathspec
    pyro5
    requests
    rich
    setuptools
    survey
    typing-extensions
    watchdog
    xattr
  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ rubicon-objc ];

  makeWrapperArgs = [
    # Add the installed directories to the python path so the daemon can find them
    "--prefix PYTHONPATH : ${makePythonPath dependencies}"
    "--prefix PYTHONPATH : $out/${python.sitePackages}"
  ];

  nativeCheckInputs = [ pytestCheckHook ];

  # ModuleNotFoundError: No module named '_watchdog_fsevents'
  doCheck = !(stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64);

  preCheck = ''
    export HOME=$(mktemp -d)
  '';

  disabledTests =
    [
      # We don't want to benchmark
      "test_performance"
      # Requires systemd
      "test_autostart"
      # Requires network access
      "test_check_for_updates"
      # Tries to look at /usr
      "test_filestatus"
      "test_path_exists_case_insensitive"
      "test_cased_path_candidates"
      # AssertionError
      "test_locking_multiprocess"
      # OSError: [Errno 95] Operation not supported
      "test_move_preserves_xattrs"
    ]
    ++ lib.optionals stdenv.hostPlatform.isDarwin [
      # maetral daemon does not start but worked in real environment
      "test_catching_non_ignored_events"
      "test_connection"
      "test_event_handler"
      "test_fs_ignore_tree_creation"
      "test_lifecycle"
      "test_notify_level"
      "test_notify_snooze"
      "test_receiving_events"
      "test_remote_exceptions"
      "test_start_already_running"
      "test_stop"
    ];

  pythonImportsCheck = [ "maestral" ];

  passthru.tests.maestral = nixosTests.maestral;

  meta = with lib; {
    description = "Open-source Dropbox client for macOS and Linux";
    mainProgram = "maestral";
    homepage = "https://maestral.app";
    changelog = "https://github.com/samschott/maestral/releases/tag/v${version}";
    license = licenses.mit;
    maintainers = with maintainers; [
      natsukium
      peterhoeg
      sfrijters
    ];
  };
}