1{
2 lib,
3 aiofiles,
4 aiohttp,
5 async-timeout,
6 async-generator,
7 buildPythonPackage,
8 fetchFromGitHub,
9 pypubsub,
10 pyserial,
11 pyserial-asyncio,
12 pytestCheckHook,
13 pythonAtLeast,
14 pythonOlder,
15 setuptools,
16 voluptuous,
17}:
18
19buildPythonPackage rec {
20 pname = "pyinsteon";
21 version = "1.6.3";
22 pyproject = true;
23
24 disabled = pythonOlder "3.8";
25
26 src = fetchFromGitHub {
27 owner = "pyinsteon";
28 repo = "pyinsteon";
29 tag = version;
30 hash = "sha256-SyhPM3NS7iJX8jwTJ4YWZ72eYLn9JT6eESekPf5eCKI=";
31 };
32
33 build-system = [ setuptools ];
34
35 dependencies = [
36 aiofiles
37 aiohttp
38 async-timeout
39 pypubsub
40 pyserial
41 pyserial-asyncio
42 voluptuous
43 ];
44
45 nativeCheckInputs = [
46 async-generator
47 pytestCheckHook
48 ];
49
50 disabledTests = [
51 # RuntimeError: BUG: Dead Listener called, still subscribed!
52 "test_linking_with_i1_device"
53 ];
54
55 disabledTestPaths = lib.optionals (pythonAtLeast "3.12") [
56 # Tests are blocking or failing
57 "tests/test_handlers/"
58 ];
59
60 pythonImportsCheck = [ "pyinsteon" ];
61
62 meta = with lib; {
63 description = "Python library to support Insteon home automation projects";
64 longDescription = ''
65 This is a Python package to interface with an Insteon Modem. It has been
66 tested to work with most USB or RS-232 serial based devices such as the
67 2413U, 2412S, 2448A7 and Hub models 2242 and 2245.
68 '';
69 homepage = "https://github.com/pyinsteon/pyinsteon";
70 changelog = "https://github.com/pyinsteon/pyinsteon/releases/tag/${version}";
71 license = with licenses; [ mit ];
72 maintainers = with maintainers; [ fab ];
73 mainProgram = "insteon_tools";
74 };
75}