aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/development/python-modules/sanic/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/python-modules/sanic/default.nix')
-rw-r--r--nixpkgs/pkgs/development/python-modules/sanic/default.nix79
1 files changed, 75 insertions, 4 deletions
diff --git a/nixpkgs/pkgs/development/python-modules/sanic/default.nix b/nixpkgs/pkgs/development/python-modules/sanic/default.nix
index 6aae4c11fdd..5c1e0e81246 100644
--- a/nixpkgs/pkgs/development/python-modules/sanic/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/sanic/default.nix
@@ -15,15 +15,76 @@
, pytest-sanic
, pytest-sugar
, pytest-benchmark
+
+# required just httpcore / requests-async
+, h11
+, h2
+, certifi
+, chardet
+, idna
+, requests
+, rfc3986
+, uvicorn
}:
+let
+
+ # This version of sanic depends on two packages that have been deprecated by
+ # their development teams:
+ #
+ # - requests-async [where first line of pypi says to use `http3` instead now]
+ # - httpcore [where the homepage redirects to `http3` now]
+ #
+ # Since no other packages in nixpkg depend on these right now, define these
+ # packages just as local dependencies here, to avoid bloat.
+
+ httpcore = buildPythonPackage rec {
+ pname = "httpcore";
+ version = "0.3.0";
+ src = fetchPypi {
+ inherit pname version;
+ sha256 = "0n3bamaixxhcm27gf1ws3g6rkamvqx87087c88r6hyyl52si1ycn";
+ };
+
+ propagatedBuildInputs = [ certifi chardet h11 h2 idna rfc3986 ];
+
+ # relax pinned old version of h11
+ postConfigure = ''
+ substituteInPlace setup.py \
+ --replace "h11==0.8.*" "h11"
+ '';
+
+ # LICENCE.md gets propagated without this, causing collisions
+ postInstall = ''
+ rm $out/LICENSE.md
+ '';
+ };
+
+ requests-async = buildPythonPackage rec {
+ pname = "requests-async";
+ version = "0.5.0";
+ src = fetchPypi {
+ inherit pname version;
+ sha256 = "8731420451383196ecf2fd96082bfc8ae5103ada90aba185888499d7784dde6f";
+ };
+
+ propagatedBuildInputs = [ requests httpcore ];
+
+ # LICENCE.md gets propagated without this, causing collisions
+ postInstall = ''
+ rm $out/LICENSE.md
+ '';
+ };
+
+in
+
buildPythonPackage rec {
pname = "sanic";
- version = "19.3.1";
+ version = "19.6.3";
src = fetchPypi {
inherit pname version;
- sha256 = "ce434eb154872ca64493a6c3a288f11fd10bca0de7be7bf9f1d0d063185e51ec";
+ sha256 = "0b1qqsvdjkibrw5kgr0pm7n7jzb1403132wjmb0lx3k5wyvqfi95";
};
propagatedBuildInputs = [
@@ -31,6 +92,7 @@ buildPythonPackage rec {
aiofiles
websockets
multidict
+ requests-async
uvloop
ujson
];
@@ -44,11 +106,20 @@ buildPythonPackage rec {
pytest-sanic
pytest-sugar
pytest-benchmark
+ uvicorn
];
+ # Sanic says it needs websockets 7.x, but the changelog for 8.x is actually
+ # nearly compatible with sanic's use. So relax this constraint, with a small
+ # required code change.
postConfigure = ''
- substituteInPlace setup.py \
- --replace "websockets>=6.0,<7.0" "websockets"
+ substituteInPlace setup.py --replace \
+ "websockets>=7.0,<8.0" \
+ "websockets>=7.0,<9.0"
+ substituteInPlace sanic/websocket.py --replace \
+ "self.websocket.subprotocol = subprotocol" \
+ "self.websocket.subprotocol = subprotocol
+ self.websocket.is_client = False"
'';
# 10/500 tests ignored due to missing directory and