Merge pull request #307098 from r-ryantm/auto-update/cilium-cli
[NixPkgs.git] / pkgs / development / python-modules / aiohttp / default.nix
blobe46b5989dd7628ac8cb844764fb71491affea43d
1 { lib
2 , stdenv
3 , buildPythonPackage
4 , pythonOlder
5 , fetchFromGitHub
6 , substituteAll
7 , llhttp
8 # build_requires
9 , cython
10 , setuptools
11 # install_requires
12 , attrs
13 , multidict
14 , async-timeout
15 , yarl
16 , frozenlist
17 , aiosignal
18 , aiodns
19 , brotli
20 # tests_require
21 , freezegun
22 , gunicorn
23 , pytest-mock
24 , pytest7CheckHook
25 , python-on-whales
26 , re-assert
27 , trustme
30 buildPythonPackage rec {
31   pname = "aiohttp";
32   version = "3.9.3";
33   pyproject = true;
35   disabled = pythonOlder "3.8";
37   src = fetchFromGitHub {
38     owner = "aio-libs";
39     repo = "aiohttp";
40     rev = "refs/tags/v${version}";
41     hash = "sha256-dEeMHruFJ1o0J6VUJcpUk7LhEC8sV8hUKXoKcd618lE=";
42   };
44   patches = [
45     (substituteAll {
46       src = ./unvendor-llhttp.patch;
47       llhttpDev = lib.getDev llhttp;
48       llhttpLib = lib.getLib llhttp;
49     })
50   ];
52   postPatch = ''
53     sed -i '/--cov/d' setup.cfg
55     rm -r vendor
56     patchShebangs tools
57     touch .git  # tools/gen.py uses .git to find the project root
58   '';
60   nativeBuildInputs = [
61     cython
62     setuptools
63   ];
65   preBuild = ''
66     make cythonize
67   '';
69   propagatedBuildInputs = [
70     attrs
71     multidict
72     async-timeout
73     yarl
74     frozenlist
75     aiosignal
76     aiodns
77     brotli
78   ];
80   # NOTE: pytest-xdist cannot be added because it is flaky. See https://github.com/NixOS/nixpkgs/issues/230597 for more info.
81   nativeCheckInputs = [
82     freezegun
83     gunicorn
84     pytest-mock
85     pytest7CheckHook
86     python-on-whales
87     re-assert
88   ] ++ lib.optionals (!(stdenv.isDarwin && stdenv.isAarch64)) [
89     # Optional test dependency. Depends indirectly on pyopenssl, which is
90     # broken on aarch64-darwin.
91     trustme
92   ];
94   disabledTests = [
95     # Disable tests that require network access
96     "test_client_session_timeout_zero"
97     "test_mark_formdata_as_processed"
98     "test_requote_redirect_url_default"
99     # Disable tests that trigger deprecation warnings in pytest
100     "test_async_with_session"
101     "test_session_close_awaitable"
102     "test_close_run_until_complete_not_deprecated"
103     # https://github.com/aio-libs/aiohttp/issues/7130
104     "test_static_file_if_none_match"
105     "test_static_file_if_match"
106     "test_static_file_if_modified_since_past_date"
107     # don't run benchmarks
108     "test_import_time"
109   ] ++ lib.optionals stdenv.is32bit [
110     "test_cookiejar"
111   ] ++ lib.optionals stdenv.isDarwin [
112     "test_addresses"  # https://github.com/aio-libs/aiohttp/issues/3572, remove >= v4.0.0
113     "test_close"
114   ];
116   disabledTestPaths = [
117     "tests/test_proxy_functional.py" # FIXME package proxy.py
118   ];
120   __darwinAllowLocalNetworking = true;
122   # aiohttp in current folder shadows installed version
123   preCheck = ''
124     rm -r aiohttp
125     touch tests/data.unknown_mime_type # has to be modified after 1 Jan 1990
126   '' + lib.optionalString stdenv.isDarwin ''
127     # Work around "OSError: AF_UNIX path too long"
128     export TMPDIR="/tmp"
129   '';
131   meta = with lib; {
132     changelog = "https://github.com/aio-libs/aiohttp/blob/v${version}/CHANGES.rst";
133     description = "Asynchronous HTTP Client/Server for Python and asyncio";
134     license = licenses.asl20;
135     homepage = "https://github.com/aio-libs/aiohttp";
136     maintainers = with maintainers; [ dotlambda ];
137   };