diff --git a/pkgs/development/python-modules/aiosonic/default.nix b/pkgs/development/python-modules/aiosonic/default.nix new file mode 100644 index 000000000000..373cf2f0cb90 --- /dev/null +++ b/pkgs/development/python-modules/aiosonic/default.nix @@ -0,0 +1,147 @@ +{ + nodejs, + lib, + buildPythonPackage, + pythonOlder, + fetchFromGitHub, + poetry-core, + # install_requires + charset-normalizer, + h2, + onecache, + # test dependencies + asgiref, + black, + django, + click, + httpx, + proxy-py, + pytest-aiohttp, + pytest-asyncio, + pytest-django, + pytest-mock, + pytest-sugar, + pytest-timeout, + uvicorn, + httptools, + typed-ast, + uvloop, + requests, + aiohttp, + aiodns, + pytestCheckHook, + stdenv, +}: + +buildPythonPackage rec { + pname = "aiosonic"; + version = "0.20.1"; + pyproject = true; + + disabled = pythonOlder "3.8"; + + __darwinAllowLocalNetworking = true; + + src = fetchFromGitHub { + owner = "sonic182"; + repo = "aiosonic"; + rev = "refs/tags/${version}"; + hash = "sha256-RMkmmXUqzt9Nsx8N+f9Xdbgjt1nd5NuJHs9dzarx8IY="; + }; + + postPatch = '' + substituteInPlace pytest.ini --replace-fail \ + "addopts = --black --cov=aiosonic --cov-report term --cov-report html --doctest-modules" \ + "addopts = --doctest-modules" + ''; + + build-system = [ poetry-core ]; + + dependencies = [ + charset-normalizer + onecache + h2 + ]; + + nativeCheckInputs = [ + aiohttp + aiodns + asgiref + black + django + click + httpx + proxy-py + pytest-aiohttp + pytest-asyncio + pytest-django + pytest-mock + pytest-sugar + pytest-timeout + uvicorn + httptools + typed-ast + uvloop + requests + pytestCheckHook + nodejs + ]; + + pythonImportsCheck = [ "aiosonic" ]; + + disabledTests = + lib.optionals stdenv.isLinux [ + # need network + "test_simple_get" + "test_get_python" + "test_post_http2" + "test_get_http2" + "test_method_lower" + "test_keep_alive_smart_pool" + "test_keep_alive_cyclic_pool" + "test_get_with_params" + "test_get_with_params_in_url" + "test_get_with_params_tuple" + "test_post_form_urlencoded" + "test_post_tuple_form_urlencoded" + "test_post_json" + "test_put_patch" + "test_delete" + "test_delete_2" + "test_get_keepalive" + "test_post_multipart_to_django" + "test_connect_timeout" + "test_read_timeout" + "test_timeouts_overriden" + "test_pool_acquire_timeout" + "test_simple_get_ssl" + "test_simple_get_ssl_ctx" + "test_simple_get_ssl_no_valid" + "test_get_chunked_response" + "test_get_chunked_response_and_not_read_it" + "test_read_chunks_by_text_method" + "test_get_body_gzip" + "test_get_body_deflate" + "test_post_chunked" + "test_close_connection" + "test_close_old_keeped_conn" + "test_get_redirect" + "test_max_redirects" + "test_get_image" + "test_get_image_chunked" + "test_get_with_cookies" + "test_proxy_request" + ] + ++ lib.optionals stdenv.isDarwin [ + # "FAILED tests/test_proxy.py::test_proxy_request - Exception: port 8865 never got active" + "test_proxy_request" + ]; + + meta = { + changelog = "https://github.com/sonic182/aiosonic/blob/${version}/CHANGELOG.md"; + description = "Very fast Python asyncio http client"; + license = lib.licenses.mit; + homepage = "https://github.com/sonic182/aiosonic"; + maintainers = with lib.maintainers; [ geraldog ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 65716fa2895c..3120476b35d6 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -403,6 +403,8 @@ self: super: with self; { aiosasl = callPackage ../development/python-modules/aiosasl { }; + aiosonic = callPackage ../development/python-modules/aiosonic { }; + aiosql = callPackage ../development/python-modules/aiosql { }; aiosenz = callPackage ../development/python-modules/aiosenz { };