pythonPackages.sanic: 19.3.1 -> 19.6.3

The new version depend on two packages that are not currently in nixpkgs, and
marked as already deprecated by their author. So just include them locally. Also,
adapt to the fact that the version of websockets in nixpkgs is 8.x, when sanic
wants 7.x.
This commit is contained in:
Simon Chatterjee 2019-09-08 20:10:03 +01:00
parent a3e33b69ba
commit 8b263a4530

View File

@ -15,15 +15,76 @@
, pytest-sanic , pytest-sanic
, pytest-sugar , pytest-sugar
, pytest-benchmark , 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 { buildPythonPackage rec {
pname = "sanic"; pname = "sanic";
version = "19.3.1"; version = "19.6.3";
src = fetchPypi { src = fetchPypi {
inherit pname version; inherit pname version;
sha256 = "ce434eb154872ca64493a6c3a288f11fd10bca0de7be7bf9f1d0d063185e51ec"; sha256 = "0b1qqsvdjkibrw5kgr0pm7n7jzb1403132wjmb0lx3k5wyvqfi95";
}; };
propagatedBuildInputs = [ propagatedBuildInputs = [
@ -31,6 +92,7 @@ buildPythonPackage rec {
aiofiles aiofiles
websockets websockets
multidict multidict
requests-async
uvloop uvloop
ujson ujson
]; ];
@ -44,11 +106,20 @@ buildPythonPackage rec {
pytest-sanic pytest-sanic
pytest-sugar pytest-sugar
pytest-benchmark 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 = '' postConfigure = ''
substituteInPlace setup.py \ substituteInPlace setup.py --replace \
--replace "websockets>=6.0,<7.0" "websockets" "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 # 10/500 tests ignored due to missing directory and