1{ 2 lib, 3 buildPythonPackage, 4 fetchFromGitHub, 5 pythonOlder, 6 stdenvNoCC, 7 substituteAll, 8 9 # build 10 setuptools, 11 pythonRelaxDepsHook, 12 13 # propagates 14 aiohttp, 15 aiorun, 16 async-timeout, 17 coloredlogs, 18 dacite, 19 orjson, 20 home-assistant-chip-clusters, 21 22 # optionals 23 cryptography, 24 home-assistant-chip-core, 25 zeroconf, 26 27 # tests 28 python, 29 pytest, 30 pytest-aiohttp, 31 pytestCheckHook, 32}: 33 34let 35 paaCerts = stdenvNoCC.mkDerivation rec { 36 pname = "matter-server-paa-certificates"; 37 version = "1.2.0.1"; 38 39 src = fetchFromGitHub { 40 owner = "project-chip"; 41 repo = "connectedhomeip"; 42 rev = "refs/tags/v${version}"; 43 hash = "sha256-p3P0n5oKRasYz386K2bhN3QVfN6oFndFIUWLEUWB0ss="; 44 }; 45 46 installPhase = '' 47 runHook preInstall 48 49 mkdir -p $out 50 cp $src/credentials/development/paa-root-certs/* $out/ 51 52 runHook postInstall 53 ''; 54 }; 55in 56 57buildPythonPackage rec { 58 pname = "python-matter-server"; 59 version = "5.10.0"; 60 format = "pyproject"; 61 62 disabled = pythonOlder "3.10"; 63 64 src = fetchFromGitHub { 65 owner = "home-assistant-libs"; 66 repo = "python-matter-server"; 67 rev = "refs/tags/${version}"; 68 hash = "sha256-rfpGclSgCBTxlTgVqgNz3ixoldB9M+6mLmogkNDDdWs="; 69 }; 70 71 patches = [ 72 (substituteAll { 73 src = ./link-paa-root-certs.patch; 74 paacerts = paaCerts; 75 }) 76 ]; 77 78 postPatch = '' 79 substituteInPlace pyproject.toml \ 80 --replace 'version = "0.0.0"' 'version = "${version}"' \ 81 --replace '--cov' "" 82 ''; 83 84 nativeBuildInputs = [ 85 setuptools 86 pythonRelaxDepsHook 87 ]; 88 89 pythonRelaxDeps = [ "home-assistant-chip-clusters" ]; 90 91 propagatedBuildInputs = [ 92 aiohttp 93 aiorun 94 async-timeout 95 coloredlogs 96 dacite 97 orjson 98 home-assistant-chip-clusters 99 ]; 100 101 passthru.optional-dependencies = { 102 server = [ 103 cryptography 104 home-assistant-chip-core 105 zeroconf 106 ]; 107 }; 108 109 nativeCheckInputs = [ 110 pytest-aiohttp 111 pytestCheckHook 112 ] ++ lib.flatten (lib.attrValues passthru.optional-dependencies); 113 114 preCheck = 115 let 116 pythonEnv = python.withPackages (_: propagatedBuildInputs ++ nativeCheckInputs ++ [ pytest ]); 117 in 118 '' 119 export PYTHONPATH=${pythonEnv}/${python.sitePackages} 120 ''; 121 122 pytestFlagsArray = [ 123 # Upstream theymselves limit the test scope 124 # https://github.com/home-assistant-libs/python-matter-server/blob/main/.github/workflows/test.yml#L65 125 "tests/server" 126 ]; 127 128 meta = with lib; { 129 changelog = "https://github.com/home-assistant-libs/python-matter-server/releases/tag/${version}"; 130 description = "Python server to interact with Matter"; 131 mainProgram = "matter-server"; 132 homepage = "https://github.com/home-assistant-libs/python-matter-server"; 133 license = licenses.asl20; 134 maintainers = teams.home-assistant.members; 135 }; 136}