1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 buildPythonPackage,
6 pythonOlder,
7
8 # build-system
9 setuptools,
10
11 # dependencies
12 async-timeout,
13
14 # optional-dependencies
15 cryptography,
16 pyopenssl,
17 requests,
18
19 # tests
20 cachetools,
21 mock,
22 packaging,
23 pytestCheckHook,
24 pytest-asyncio,
25 pytest-timeout,
26 redisTestHook,
27 ujson,
28 uvloop,
29}:
30
31buildPythonPackage rec {
32 pname = "valkey";
33 version = "6.1.1";
34 pyproject = true;
35
36 src = fetchFromGitHub {
37 owner = "valkey-io";
38 repo = "valkey-py";
39 tag = "v${version}";
40 hash = "sha256-woJYfgLNIVzTYj9q8IjXo+SXhQZkQdB/Ofv5StGy9Rc=";
41 };
42
43 build-system = [ setuptools ];
44
45 dependencies = lib.optionals (pythonOlder "3.11") [ async-timeout ];
46
47 optional-dependencies = {
48 # TODO: libvalkey = [ libvalkey ];
49 ocsp = [
50 cryptography
51 pyopenssl
52 requests
53 ];
54 };
55
56 pythonImportsCheck = [
57 "valkey"
58 "valkey.client"
59 "valkey.cluster"
60 "valkey.connection"
61 "valkey.exceptions"
62 "valkey.sentinel"
63 "valkey.utils"
64 ];
65
66 nativeCheckInputs = [
67 cachetools
68 mock
69 packaging
70 pytestCheckHook
71 pytest-asyncio
72 pytest-timeout
73 redisTestHook
74 ujson
75 uvloop
76 ]
77 ++ lib.flatten (lib.attrValues optional-dependencies);
78
79 disabledTestMarks = [
80 "onlycluster"
81 "ssl"
82 ];
83
84 disabledTests = [
85 # valkey.sentinel.MasterNotFoundError: No master found for 'valkey-py-test'
86 "test_get_from_cache"
87 "test_cache_decode_response"
88 # Expects another valkey instance on port 6380 *shrug*
89 "test_psync"
90 ]
91 ++ lib.optionals stdenv.hostPlatform.isDarwin [
92 # OSError: AF_UNIX path too long
93 "test_uds_connect"
94 "test_network_connection_failure"
95 ];
96
97 disabledTestPaths = lib.optionals stdenv.hostPlatform.isDarwin [
98 # AttributeError: Can't get local object 'TestMultiprocessing.test_valkey_client.<locals>.target'
99 "tests/test_multiprocessing.py"
100 ];
101
102 __darwinAllowLocalNetworking = true;
103
104 meta = {
105 description = "Python client for Redis key-value store";
106 homepage = "https://github.com/valkey-io/valkey-py";
107 changelog = "https://github.com/valkey-io/valkey-py/releases/tag/${src.tag}";
108 license = lib.licenses.mit;
109 maintainers = with lib.maintainers; [ hexa ];
110 };
111}