1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
{ lib, fetchFromGitHub, fetchpatch, python3
# Look up dependencies of specified components in component-packages.nix
, extraComponents ? []
# Additional packages to add to propagatedBuildInputs
, extraPackages ? ps: []
# Skip pip install of required packages on startup
, skipPip ? true }:
let
py = python3.override {
# Override the version of some packages pinned in Home Assistant's setup.py
packageOverrides = self: super: {
aiohttp = super.aiohttp.overridePythonAttrs (oldAttrs: rec {
version = "3.3.2";
src = oldAttrs.src.override {
inherit version;
sha256 = "f20deec7a3fbaec7b5eb7ad99878427ad2ee4cc16a46732b705e8121cbb3cc12";
};
});
requests = super.requests.overridePythonAttrs (oldAttrs: rec {
version = "2.19.1";
src = oldAttrs.src.override {
inherit version;
sha256 = "ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a";
};
});
voluptuous = super.voluptuous.overridePythonAttrs (oldAttrs: rec {
version = "0.11.5";
src = oldAttrs.src.override {
inherit version;
sha256 = "567a56286ef82a9d7ae0628c5842f65f516abcb496e74f3f59f1d7b28df314ef";
};
});
attrs = super.attrs.overridePythonAttrs (oldAttrs: rec {
version = "18.1.0";
src = oldAttrs.src.override {
inherit version;
sha256 = "e0d0eb91441a3b53dab4d9b743eafc1ac44476296a2053b6ca3af0b139faf87b";
};
});
astral = super.astral.overridePythonAttrs (oldAttrs: rec {
version = "1.6.1";
src = oldAttrs.src.override {
inherit version;
sha256 = "ab0c08f2467d35fcaeb7bad15274743d3ac1ad18b5391f64a0058a9cd192d37d";
};
});
# used by check_config script
# can be unpinned once https://github.com/home-assistant/home-assistant/issues/11917 is resolved
colorlog = super.colorlog.overridePythonAttrs (oldAttrs: rec {
version = "3.1.4";
src = oldAttrs.src.override {
inherit version;
sha256 = "418db638c9577f37f0fae4914074f395847a728158a011be2a193ac491b9779d";
};
});
hass-frontend = super.callPackage ./frontend.nix { };
};
};
componentPackages = import ./component-packages.nix;
availableComponents = builtins.attrNames componentPackages.components;
getPackages = component: builtins.getAttr component componentPackages.components;
componentBuildInputs = lib.concatMap (component: getPackages component py.pkgs) extraComponents;
# Ensure that we are using a consistent package set
extraBuildInputs = extraPackages py.pkgs;
# Don't forget to run parse-requirements.py after updating
hassVersion = "0.75.1";
in with py.pkgs; buildPythonApplication rec {
pname = "homeassistant";
version = assert (componentPackages.version == hassVersion); hassVersion;
disabled = pythonOlder "3.5";
inherit availableComponents;
# PyPI tarball is missing tests/ directory
src = fetchFromGitHub {
owner = "home-assistant";
repo = "home-assistant";
rev = version;
sha256 = "1slm2r48yh4l57wnvalin6mnk3id2phsaqpd4qy0c0ksqc61ffqk";
};
# Upgrade voluptuous to 0.11.5
# Needed because voluptuous-0.11.3 requires pypandoc
# See https://github.com/home-assistant/home-assistant/pull/15830#issuecomment-410485197
patches = fetchpatch {
name = "upgrade-voluptuous.patch";
url = https://github.com/home-assistant/home-assistant/commit/9ea3be4dc112fb45544fa089cb367c7f4f91b5f0.patch;
sha256 = "0wacs9aifdysw6jpz86d6cqah8spi48pwwcbydj9l8zxndzqp6na";
};
propagatedBuildInputs = [
# From setup.py
requests pyyaml pytz pip jinja2 voluptuous typing aiohttp async-timeout astral certifi attrs
# From http, frontend, recorder and config.config_entries components
sqlalchemy aiohttp-cors hass-frontend voluptuous-serialize
] ++ componentBuildInputs ++ extraBuildInputs;
checkInputs = [
pytest requests-mock pydispatcher pytest-aiohttp
];
checkPhase = ''
# The components' dependencies are not included, so they cannot be tested
py.test --ignore tests/components
# Some basic components should be tested however
py.test \
tests/components/{group,http,frontend} \
tests/components/test_{api,configurator,demo,discovery,init,introduction,logger,script,shell_command,system_log,websocket_api}.py
'';
makeWrapperArgs = lib.optional skipPip "--add-flags --skip-pip";
meta = with lib; {
homepage = https://home-assistant.io/;
description = "Open-source home automation platform running on Python 3";
license = licenses.asl20;
maintainers = with maintainers; [ f-breidenstein dotlambda ];
};
}
|