summaryrefslogtreecommitdiff
path: root/pkgs/development/python-modules/fsspec/default.nix
blob: 15da101a6dec55fa079d51d2b8ec6509a8121fea (about) (plain)
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
133
134
135
136
137
138
{
  lib,
  stdenv,
  buildPythonPackage,
  fetchFromGitHub,

  # build-system
  hatchling,
  hatch-vcs,

  # optional-dependencies
  adlfs,
  pyarrow,
  dask,
  distributed,
  requests,
  dropbox,
  aiohttp,
  fusepy,
  gcsfs,
  libarchive-c,
  ocifs,
  panel,
  paramiko,
  pygit2,
  s3fs,
  smbprotocol,
  tqdm,

  # tests
  numpy,
  pytest-asyncio,
  pytest-mock,
  pytest-vcr,
  pytestCheckHook,
  writableTmpDirAsHomeHook,
}:

buildPythonPackage rec {
  pname = "fsspec";
  version = "2025.2.0";
  pyproject = true;

  src = fetchFromGitHub {
    owner = "fsspec";
    repo = "filesystem_spec";
    tag = version;
    hash = "sha256-vJYnPbGbEMAe1p0EUBxSRZYtvBdJzjzDOesyTJsFJbU=";
  };

  build-system = [
    hatchling
    hatch-vcs
  ];

  optional-dependencies = {
    abfs = [ adlfs ];
    adl = [ adlfs ];
    arrow = [ pyarrow ];
    dask = [
      dask
      distributed
    ];
    dropbox = [
      dropbox
      # dropboxdrivefs
      requests
    ];
    entrypoints = [ ];
    full = [
      adlfs
      aiohttp
      dask
      distributed
      dropbox
      # dropboxdrivefs
      fusepy
      gcsfs
      libarchive-c
      ocifs
      panel
      paramiko
      pyarrow
      pygit2
      requests
      s3fs
      smbprotocol
      tqdm
    ];
    fuse = [ fusepy ];
    gcs = [ gcsfs ];
    git = [ pygit2 ];
    github = [ requests ];
    gs = [ gcsfs ];
    gui = [ panel ];
    hdfs = [ pyarrow ];
    http = [ aiohttp ];
    libarchive = [ libarchive-c ];
    oci = [ ocifs ];
    s3 = [ s3fs ];
    sftp = [ paramiko ];
    smb = [ smbprotocol ];
    ssh = [ paramiko ];
    tqdm = [ tqdm ];
  };

  nativeCheckInputs = [
    aiohttp
    numpy
    pytest-asyncio
    pytest-mock
    pytest-vcr
    pytestCheckHook
    writableTmpDirAsHomeHook
  ];

  __darwinAllowLocalNetworking = true;

  disabledTests = lib.optionals (stdenv.hostPlatform.isDarwin) [
    # works locally on APFS, fails on hydra with AssertionError comparing timestamps
    # darwin hydra builder uses HFS+ and has only one second timestamp resolution
    # this two tests however, assume nanosecond resolution
    "test_modified"
    "test_touch"
    # tries to access /home, ignores $HOME
    "test_directories"
  ];

  pythonImportsCheck = [ "fsspec" ];

  meta = {
    description = "Specification that Python filesystems should adhere to";
    homepage = "https://github.com/fsspec/filesystem_spec";
    changelog = "https://github.com/fsspec/filesystem_spec/raw/${version}/docs/source/changelog.rst";
    license = lib.licenses.bsd3;
    maintainers = with lib.maintainers; [ nickcao ];
  };
}