8b263a4530
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.
139 lines
3.1 KiB
Nix
139 lines
3.1 KiB
Nix
{ lib
|
|
, buildPythonPackage
|
|
, fetchPypi
|
|
, httptools
|
|
, aiofiles
|
|
, websockets
|
|
, multidict
|
|
, uvloop
|
|
, ujson
|
|
, pytest
|
|
, gunicorn
|
|
, pytestcov
|
|
, aiohttp
|
|
, beautifulsoup4
|
|
, 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.6.3";
|
|
|
|
src = fetchPypi {
|
|
inherit pname version;
|
|
sha256 = "0b1qqsvdjkibrw5kgr0pm7n7jzb1403132wjmb0lx3k5wyvqfi95";
|
|
};
|
|
|
|
propagatedBuildInputs = [
|
|
httptools
|
|
aiofiles
|
|
websockets
|
|
multidict
|
|
requests-async
|
|
uvloop
|
|
ujson
|
|
];
|
|
|
|
checkInputs = [
|
|
pytest
|
|
gunicorn
|
|
pytestcov
|
|
aiohttp
|
|
beautifulsoup4
|
|
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>=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
|
|
# requiring network access
|
|
checkPhase = ''
|
|
pytest --ignore tests/test_blueprints.py \
|
|
--ignore tests/test_routes.py \
|
|
--ignore tests/test_worker.py
|
|
'';
|
|
|
|
meta = with lib; {
|
|
description = "A microframework based on uvloop, httptools, and learnings of flask";
|
|
homepage = http://github.com/channelcat/sanic/;
|
|
license = licenses.mit;
|
|
maintainers = [ maintainers.costrouc ];
|
|
};
|
|
}
|