1{
2 lib,
3 stdenv,
4 buildPythonPackage,
5 setuptools,
6 eventlet,
7 fetchPypi,
8 fetchpatch,
9 gevent,
10 pkgs,
11 process-tests,
12 pytestCheckHook,
13 pythonOlder,
14 redis,
15 django-redis,
16}:
17
18buildPythonPackage rec {
19 pname = "python-redis-lock";
20 version = "4.0.0";
21
22 pyproject = true;
23
24 disabled = pythonOlder "3.7";
25
26 src = fetchPypi {
27 inherit pname version;
28 hash = "sha256-Sr0Lz0kTasrWZye/VIbdJJQHjKVeSe+mk/eUB3MZCRo=";
29 };
30
31 # Fix django tests
32 postPatch = ''
33 substituteInPlace tests/test_project/settings.py \
34 --replace-fail "USE_L10N = True" ""
35 '';
36
37 patches = [
38 # https://github.com/ionelmc/python-redis-lock/pull/119
39 (fetchpatch {
40 url = "https://github.com/ionelmc/python-redis-lock/commit/ae404b7834990b833c1f0f703ec8fbcfecd201c2.patch";
41 hash = "sha256-Fo43+pCtnrEMxMdEEdo0YfJGkBlhhH0GjYNgpZeHF3U=";
42 })
43 ./test_signal_expiration_increase_sleep.patch
44 ];
45
46 build-system = [ setuptools ];
47
48 dependencies = [ redis ];
49
50 optional-dependencies.django = [ django-redis ];
51
52 nativeCheckInputs = [
53 eventlet
54 gevent
55 pytestCheckHook
56 process-tests
57 pkgs.valkey
58 ]
59 ++ optional-dependencies.django;
60
61 # For Django tests
62 preCheck = "export DJANGO_SETTINGS_MODULE=test_project.settings";
63
64 disabledTests = lib.optionals stdenv.hostPlatform.isDarwin [
65 # fail on Darwin because it defaults to multiprocessing `spawn`
66 "test_reset_signalizes"
67 "test_reset_all_signalizes"
68 ];
69
70 pythonImportsCheck = [ "redis_lock" ];
71
72 meta = with lib; {
73 changelog = "https://github.com/ionelmc/python-redis-lock/blob/v${version}/CHANGELOG.rst";
74 description = "Lock context manager implemented via redis SETNX/BLPOP";
75 homepage = "https://github.com/ionelmc/python-redis-lock";
76 license = licenses.bsd2;
77 maintainers = with maintainers; [ erictapen ];
78 };
79}