1{
2 lib,
3 stdenv,
4 asyncssh,
5 bcrypt,
6 buildPythonPackage,
7 fetchFromGitHub,
8 fsspec,
9 importlib-metadata,
10 mock-ssh-server,
11 pytest-asyncio,
12 pytestCheckHook,
13 setuptools,
14 setuptools-scm,
15}:
16
17buildPythonPackage rec {
18 pname = "sshfs";
19 version = "2025.2.0";
20 pyproject = true;
21
22 src = fetchFromGitHub {
23 owner = "fsspec";
24 repo = "sshfs";
25 tag = version;
26 hash = "sha256-O9Va3dLfTko9AfyK4iJa8U6xrtJsNNEeBn9UeRAgmVc=";
27 };
28
29 build-system = [
30 setuptools
31 setuptools-scm
32 ];
33
34 dependencies = [
35 asyncssh
36 fsspec
37 ];
38
39 optional-dependencies = {
40 bcrypt = [ asyncssh ] ++ asyncssh.optional-dependencies.bcrypt;
41 fido2 = [ asyncssh ] ++ asyncssh.optional-dependencies.fido2;
42 gssapi = [ asyncssh ] ++ asyncssh.optional-dependencies.gssapi;
43 libnacl = [ asyncssh ] ++ asyncssh.optional-dependencies.libnacl;
44 pkcs11 = [ asyncssh ] ++ asyncssh.optional-dependencies.pkcs11;
45 pyopenssl = [ asyncssh ] ++ asyncssh.optional-dependencies.pyOpenSSL;
46 };
47
48 __darwinAllowLocalNetworking = true;
49
50 nativeCheckInputs = [
51 importlib-metadata
52 mock-ssh-server
53 pytest-asyncio
54 pytestCheckHook
55 ];
56
57 disabledTests = [
58 # Test requires network access
59 "test_config_expansions"
60 ]
61 ++ lib.optionals stdenv.hostPlatform.isDarwin [
62 # Test fails with sandbox enabled
63 "test_checksum"
64 ];
65
66 pythonImportsCheck = [ "sshfs" ];
67
68 meta = with lib; {
69 description = "SSH/SFTP implementation for fsspec";
70 homepage = "https://github.com/fsspec/sshfs/";
71 changelog = "https://github.com/fsspec/sshfs/releases/tag/${src.tag}";
72 license = licenses.asl20;
73 maintainers = with maintainers; [ melling ];
74 };
75}