Merge pull request #307098 from r-ryantm/auto-update/cilium-cli
[NixPkgs.git] / pkgs / development / python-modules / sanic / default.nix
blobc8cb16ecc13750f40ae53fac3ca0c927863a4c6b
1 { lib
2 , stdenv
3 , buildPythonPackage
4 , fetchFromGitHub
5 , fetchpatch
6 , pythonAtLeast
8 # build-system
9 , setuptools
10 , wheel
12 # propagates
13 , aiofiles
14 , html5tagger
15 , httptools
16 , multidict
17 , sanic-routing
18 , tracerite
19 , typing-extensions
20 , ujson
21 , uvloop
22 , websockets
24 # optionals
25 , aioquic
27 # tests
28 , doCheck ? !stdenv.isDarwin # on Darwin, tests fail but pkg still works
30 , beautifulsoup4
31 , gunicorn
32 , pytest-asyncio
33 , pytestCheckHook
34 , pythonOlder
35 , sanic-testing
36 , uvicorn
39 buildPythonPackage rec {
40   pname = "sanic";
41   version = "23.12.1";
42   format = "pyproject";
44   disabled = pythonOlder "3.7";
46   src = fetchFromGitHub {
47     owner = "sanic-org";
48     repo = pname;
49     rev = "refs/tags/v${version}";
50     hash = "sha256-TizjibqoLNMX0m5oPyncKgFnltXOLZUIPSzVIeKU25w=";
51   };
53   nativeBuildInputs = [
54     setuptools
55     wheel
56   ];
58   propagatedBuildInputs = [
59     aiofiles
60     httptools
61     html5tagger
62     multidict
63     sanic-routing
64     tracerite
65     typing-extensions
66     ujson
67     uvloop
68     websockets
69   ];
71   passthru.optional-dependencies = {
72     ext = [
73       # TODO: sanic-ext
74     ];
75     http3 = [
76       aioquic
77     ];
78   };
80   nativeCheckInputs = [
81     beautifulsoup4
82     gunicorn
83     pytest-asyncio
84     pytestCheckHook
85     sanic-testing
86     uvicorn
87   ] ++ passthru.optional-dependencies.http3;
89   inherit doCheck;
91   preCheck = ''
92     # Some tests depends on sanic on PATH
93     PATH="$out/bin:$PATH"
94     PYTHONPATH=$PWD:$PYTHONPATH
96     # needed for relative paths for some packages
97     cd tests
98   '' + lib.optionalString stdenv.isDarwin ''
99     # OSError: [Errno 24] Too many open files
100     ulimit -n 1024
101   '';
103   # uvloop usage is buggy
104   #SANIC_NO_UVLOOP = true;
106   pytestFlagsArray = [
107     "--asyncio-mode=auto"
108     "-vvv"
109   ];
111   disabledTests = [
112     # Require networking
113     "test_full_message"
114     # Server mode mismatch (debug vs production)
115     "test_num_workers"
116     # Racy tests
117     "test_keep_alive_client_timeout"
118     "test_keep_alive_server_timeout"
119     "test_zero_downtime"
120     # sanic.exceptions.SanicException: Cannot setup Sanic Simple Server without a path to a directory
121     "test_load_app_simple"
122     # create defunct python processes
123     "test_reloader_live"
124     "test_reloader_live_with_dir"
125     "test_reload_listeners"
126     # crash the python interpreter
127     "test_host_port_localhost"
128     "test_host_port"
129     "test_server_run"
130     # NoneType object is not subscriptable
131     "test_serve_app_implicit"
132     # AssertionError: assert [] == ['Restarting a process', 'Begin restart termination', 'Starting a process']
133     "test_default_reload_shutdown_order"
134     # App not found.
135     "test_input_is_dir"
136     # HTTP 500 with Websocket subprotocols
137     "test_websocket_route_with_subprotocols"
138     # Socket closes early
139     "test_no_exceptions_when_cancel_pending_request"
140   ] ++ lib.optionals (pythonAtLeast "3.12") [
141     # AttributeError: 'has_calls' is not a valid assertion. Use a spec for the mock if 'has_calls' is meant to be an attribute.
142     "test_ws_frame_put_message_into_queue"
143   ];
145   disabledTestPaths = [
146     # We are not interested in benchmarks
147     "benchmark/"
148     # We are also not interested in typing
149     "typing/test_typing.py"
150     # unable to create async loop
151     "test_app.py"
152     "test_asgi.py"
153     # occasionally hangs
154     "test_multiprocessing.py"
155   ];
157   # avoid usage of nixpkgs-review in darwin since tests will compete usage
158   # for the same local port
159   __darwinAllowLocalNetworking = true;
161   pythonImportsCheck = [ "sanic" ];
163   meta = with lib; {
164     description = "Web server and web framework";
165     mainProgram = "sanic";
166     homepage = "https://github.com/sanic-org/sanic/";
167     changelog = "https://github.com/sanic-org/sanic/releases/tag/v${version}";
168     license = licenses.mit;
169     maintainers = with maintainers; [ AluisioASG ];
170   };