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}