Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions pkgs/development/python-modules/pytest-sanic/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,9 @@ buildPythonPackage rec {
homepage = "https://github.com/yunstanford/pytest-sanic/";
license = licenses.asl20;
maintainers = [ maintainers.costrouc ];
# pytest-sanic is incompatible with Sanic 21.3, see
# https://github.com/sanic-org/sanic/issues/2095 and
# https://github.com/yunstanford/pytest-sanic/issues/50.
broken = lib.versionAtLeast sanic.version "21.3.0";
};
}
28 changes: 28 additions & 0 deletions pkgs/development/python-modules/sanic-routing/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, pytestCheckHook
, pytest-asyncio
}:

buildPythonPackage rec {
pname = "sanic-routing";
version = "0.6.2";

src = fetchFromGitHub {
owner = "sanic-org";
repo = "sanic-routing";
rev = "v${version}";
hash = "sha256-ZMl8PB9E401pUfUJ4tW7nBx1TgPQQtx9erVni3zP+lo=";
};

checkInputs = [ pytestCheckHook pytest-asyncio ];
pythonImportsCheck = [ "sanic_routing" ];

meta = with lib; {
description = "Core routing component for the Sanic web framework";
homepage = "https://github.com/sanic-org/sanic-routing";
license = licenses.mit;
maintainers = with maintainers; [ AluisioASG ];
};
}
40 changes: 40 additions & 0 deletions pkgs/development/python-modules/sanic-testing/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, pytestCheckHook
, httpcore
, httpx
, pytest-asyncio
, sanic
, websockets
}:

buildPythonPackage rec {
pname = "sanic-testing";
version = "0.3.1";

src = fetchFromGitHub {
owner = "sanic-org";
repo = "sanic-testing";
rev = "v${version}";
hash = "sha256-hBAq+/BKs0a01M89Nb8HaClqxB+W5PTfjVzef/m9SWs=";
};

propagatedBuildInputs = [ httpx sanic websockets httpcore ];

# `sanic` is explicitly set to null when building `sanic` itself
# to prevent infinite recursion. In that case we skip running
# the package at all.
doCheck = sanic != null;
dontUsePythonImportsCheck = sanic == null;

checkInputs = [ pytestCheckHook pytest-asyncio ];
pythonImportsCheck = [ "sanic_testing" ];

meta = with lib; {
description = "Core testing clients for the Sanic web framework";
homepage = "https://github.com/sanic-org/sanic-testing";
license = licenses.mit;
maintainers = with maintainers; [ AluisioASG ];
};
}
34 changes: 18 additions & 16 deletions pkgs/development/python-modules/sanic/default.nix
Original file line number Diff line number Diff line change
@@ -1,42 +1,44 @@
{ lib, buildPythonPackage, fetchPypi, doCheck ? true
, aiofiles, httptools, httpx, multidict, ujson, uvloop, websockets
, pytestCheckHook, beautifulsoup4, gunicorn, httpcore, uvicorn
, pytest-asyncio, pytest-benchmark, pytest-dependency, pytest-sanic, pytest-sugar, pytestcov
, aiofiles, httptools, multidict, sanic-routing, ujson, uvloop, websockets
, pytestCheckHook, beautifulsoup4, gunicorn, uvicorn, sanic-testing
, pytest-benchmark, pytest-sanic, pytest-sugar, pytestcov
}:

buildPythonPackage rec {
pname = "sanic";
version = "21.3.2";
version = "21.3.4";

src = fetchPypi {
inherit pname version;
sha256 = "84a04c5f12bf321bed3942597787f1854d15c18f157aebd7ced8c851ccc49e08";
sha256 = "1cbd12b9138b3ca69656286b0be91fff02b826e8cb72dd76a2ca8c5eb1288d8e";
};

postPatch = ''
# Loosen dependency requirements.
substituteInPlace setup.py \
--replace '"multidict==5.0.0"' '"multidict"' \
--replace '"httpx==0.15.4"' '"httpx"' \
--replace '"httpcore==0.3.0"' '"httpcore"' \
--replace '"pytest==5.2.1"' '"pytest"'
--replace '"pytest==5.2.1"' '"pytest"' \
--replace '"gunicorn==20.0.4"' '"gunicorn"' \
--replace '"pytest-sanic",' ""
# Patch a request headers test to allow brotli encoding
# (we build httpx with brotli support, upstream doesn't).
substituteInPlace tests/test_headers.py \
--replace "deflate\r\n" "deflate, br\r\n"
'';

propagatedBuildInputs = [
aiofiles httptools httpx multidict ujson uvloop websockets
sanic-routing httptools uvloop ujson aiofiles websockets multidict
];

checkInputs = [
pytestCheckHook beautifulsoup4 gunicorn httpcore uvicorn
pytest-asyncio pytest-benchmark pytest-dependency pytest-sanic pytest-sugar pytestcov
sanic-testing gunicorn pytestcov beautifulsoup4 pytest-sanic pytest-sugar
pytest-benchmark pytestCheckHook uvicorn
];

inherit doCheck;

disabledTests = [
"test_gunicorn" # No "examples" directory in pypi distribution.
"test_logo" # Fails to filter out "DEBUG asyncio:selector_events.py:59 Using selector: EpollSelector"
"test_zero_downtime" # No "examples.delayed_response.app" module in pypi distribution.
"test_reloader_live" # OSError: [Errno 98] error while attempting to bind on address ('127.0.0.1', 42104)
];

__darwinAllowLocalNetworking = true;
Expand All @@ -45,8 +47,8 @@ buildPythonPackage rec {

meta = with lib; {
description = "A microframework based on uvloop, httptools, and learnings of flask";
homepage = "https://github.com/channelcat/sanic/";
homepage = "https://github.com/sanic-org/sanic/";
license = licenses.mit;
maintainers = [ maintainers.costrouc ];
maintainers = with maintainers; [ costrouc AluisioASG ];
};
}
15 changes: 14 additions & 1 deletion pkgs/top-level/python-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7195,9 +7195,22 @@ in {

samsungtvws = callPackage ../development/python-modules/samsungtvws { };

sanic = callPackage ../development/python-modules/sanic {
# pytest-sanic is doing ok for the sole purpose of testing Sanic.
pytest-sanic = self.pytest-sanic.overridePythonAttrs (oldAttrs: {
doCheck = false;
meta.broken = false;
});
# Don't pass any `sanic` to avoid dependency loops. `sanic-testing`
# has special logic to disable tests when this is the case.
sanic-testing = self.sanic-testing.override { sanic = null; };
};

sanic-auth = callPackage ../development/python-modules/sanic-auth { };

sanic = callPackage ../development/python-modules/sanic { };
sanic-routing = callPackage ../development/python-modules/sanic-routing { };

sanic-testing = callPackage ../development/python-modules/sanic-testing { };

sapi-python-client = callPackage ../development/python-modules/sapi-python-client { };

Expand Down