{ lib, stdenv, buildPythonPackage, fetchFromGitHub, future, hypothesis, packaging, parameterized, msgpack, pyserial, pytest-timeout, pytestCheckHook, pythonOlder, setuptools, typing-extensions, wrapt, uptime, }: buildPythonPackage rec { pname = "can"; version = "4.3.1"; pyproject = true; disabled = pythonOlder "3.7"; src = fetchFromGitHub { owner = "hardbyte"; repo = "python-can"; rev = "refs/tags/v${version}"; hash = "sha256-t2zt54nPOYcEE0RPb4fbW7sN4HzFXlDIHvHudstBwrM="; }; postPatch = '' substituteInPlace tox.ini \ --replace " --cov=can --cov-config=tox.ini --cov-report=lcov --cov-report=term" "" ''; nativeBuildInputs = [ setuptools ]; propagatedBuildInputs = [ msgpack packaging typing-extensions wrapt ]; passthru.optional-dependencies = { serial = [ pyserial ]; seeedstudio = [ pyserial ]; pcan = [ uptime ]; }; nativeCheckInputs = [ future hypothesis parameterized pytest-timeout pytestCheckHook ] ++ passthru.optional-dependencies.serial; disabledTestPaths = [ # We don't support all interfaces "test/test_interface_canalystii.py" ]; disabledTests = [ # Tests require access socket "BasicTestUdpMulticastBusIPv4" "BasicTestUdpMulticastBusIPv6" # pytest.approx is not supported in a boolean context (since pytest7) "test_pack_unpack" "test_receive" ] ++ lib.optionals stdenv.isDarwin [ # timing sensitive "test_general" "test_gap" ]; preCheck = '' export PATH="$PATH:$out/bin"; # skips timing senstive tests export CI=1 ''; pythonImportsCheck = [ "can" ]; meta = with lib; { description = "CAN support for Python"; homepage = "https://python-can.readthedocs.io"; changelog = "https://github.com/hardbyte/python-can/releases/tag/v${version}"; license = licenses.lgpl3Only; maintainers = with maintainers; [ fab sorki ]; }; }