1{
2 lib,
3 stdenv,
4 buildPythonPackage,
5 fetchFromGitHub,
6 fetchpatch2,
7 pythonAtLeast,
8 pythonOlder,
9 substituteAll,
10
11 # build-system
12 setuptools,
13
14 # patched in
15 geos,
16 gdal,
17 withGdal ? false,
18
19 # dependencies
20 asgiref,
21 sqlparse,
22
23 # optional-dependencies
24 argon2-cffi,
25 bcrypt,
26
27 # tests
28 aiosmtpd,
29 docutils,
30 geoip2,
31 jinja2,
32 numpy,
33 pillow,
34 pylibmc,
35 pymemcache,
36 python,
37 pywatchman,
38 pyyaml,
39 pytz,
40 redis,
41 selenium,
42 tblib,
43 tzdata,
44}:
45
46buildPythonPackage rec {
47 pname = "django";
48 version = "5.0.5";
49 pyproject = true;
50
51 disabled = pythonOlder "3.10";
52
53 src = fetchFromGitHub {
54 owner = "django";
55 repo = "django";
56 rev = "refs/tags/${version}";
57 hash = "sha256-0/AbPmTl38E9BpHVKs0r79fISjEa1d4XO/se1pA7zxg=";
58 };
59
60 patches =
61 [
62 (substituteAll {
63 src = ./django_5_set_zoneinfo_dir.patch;
64 zoneinfo = tzdata + "/share/zoneinfo";
65 })
66 # prevent tests from messing with our pythonpath
67 ./django_5_tests_pythonpath.patch
68 # disable test that excpects timezone issues
69 ./django_5_disable_failing_tests.patch
70 ]
71 ++ lib.optionals withGdal [
72 (substituteAll {
73 src = ./django_5_set_geos_gdal_lib.patch;
74 geos = geos;
75 gdal = gdal;
76 extension = stdenv.hostPlatform.extensions.sharedLibrary;
77 })
78 ];
79
80 postPatch =
81 ''
82 substituteInPlace tests/utils_tests/test_autoreload.py \
83 --replace "/usr/bin/python" "${python.interpreter}"
84 ''
85 + lib.optionalString (pythonAtLeast "3.12" && stdenv.hostPlatform.system == "aarch64-linux") ''
86 # Test regression after xz was reverted from 5.6.0 to 5.4.6
87 # https://hydra.nixos.org/build/254532197
88 substituteInPlace tests/view_tests/tests/test_debug.py \
89 --replace-fail "test_files" "dont_test_files"
90 '';
91
92 build-system = [ setuptools ];
93
94 dependencies = [
95 asgiref
96 sqlparse
97 ];
98
99 optional-dependencies = {
100 argon2 = [ argon2-cffi ];
101 bcrypt = [ bcrypt ];
102 };
103
104 nativeCheckInputs = [
105 # tests/requirements/py3.txt
106 aiosmtpd
107 docutils
108 geoip2
109 jinja2
110 numpy
111 pillow
112 pylibmc
113 pymemcache
114 pywatchman
115 pyyaml
116 pytz
117 redis
118 selenium
119 tblib
120 tzdata
121 ] ++ lib.flatten (lib.attrValues optional-dependencies);
122
123 doCheck = !stdenv.isDarwin;
124
125 preCheck = ''
126 # make sure the installed library gets imported
127 rm -rf django
128
129 # provide timezone data, works only on linux
130 export TZDIR=${tzdata}/${python.sitePackages}/tzdata/zoneinfo
131 '';
132
133 checkPhase = ''
134 runHook preCheck
135
136 pushd tests
137 ${python.interpreter} runtests.py --settings=test_sqlite
138 popd
139
140 runHook postCheck
141 '';
142
143 __darwinAllowLocalNetworking = true;
144
145 meta = with lib; {
146 changelog = "https://docs.djangoproject.com/en/${lib.versions.majorMinor version}/releases/${version}/";
147 description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design.";
148 homepage = "https://www.djangoproject.com";
149 license = licenses.bsd3;
150 maintainers = with maintainers; [ hexa ];
151 };
152}