nixpkgs/pkgs/servers/home-assistant/default.nix
Frederik Rietdijk 3d00d8e4ee pythonPackages.pyyaml_3: init , instead of multiple pyyaml overrides
Temporary attribute until we can get rid of it everywhere.

This was triggered due to the libyaml 0.2.2 incompatibilty requiring
patches and still not building.
2019-07-25 11:51:55 +02:00

150 lines
5.4 KiB
Nix

{ lib, fetchFromGitHub, python3, protobuf3_6
# Look up dependencies of specified components in component-packages.nix
, extraComponents ? []
# Additional packages to add to propagatedBuildInputs
, extraPackages ? ps: []
# Override Python packages using
# self: super: { pkg = super.pkg.overridePythonAttrs (oldAttrs: { ... }); }
# Applied after defaultOverrides
, packageOverrides ? self: super: { }
# Skip pip install of required packages on startup
, skipPip ? true }:
let
defaultOverrides = [
# Override the version of some packages pinned in Home Assistant's setup.py
(mkOverride "aiohttp" "3.5.4"
"9c4c83f4fa1938377da32bc2d59379025ceeee8e24b89f72fcbccd8ca22dc9bf")
(mkOverride "astral" "1.10.1"
"d2a67243c4503131c856cafb1b1276de52a86e5b8a1d507b7e08bee51cb67bf1")
(mkOverride "async-timeout" "3.0.1"
"0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f")
(mkOverride "attrs" "19.1.0"
"f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399")
(mkOverride "bcrypt" "3.1.6"
"44636759d222baa62806bbceb20e96f75a015a6381690d1bc2eda91c01ec02ea")
(mkOverride "pyjwt" "1.7.1"
"8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96")
(mkOverride "cryptography" "2.6.1"
"26c821cbeb683facb966045e2064303029d572a87ee69ca5a1bf54bf55f93ca6")
(mkOverride "cryptography_vectors" "2.6.1" # required by cryptography==2.6.1
"03f38115dccb266dd96538f94067442a877932c2322661bdc5bf2502c76658af")
(mkOverride "python-slugify" "3.0.2"
"57163ffb345c7e26063435a27add1feae67fa821f1ef4b2f292c25847575d758")
(mkOverride "requests" "2.21.0"
"502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e")
(mkOverride "ruamel_yaml" "0.15.94"
"0939bcb399ad037ef903d74ccf2f8a074f06683bc89133ad19305067d34487c8")
(mkOverride "voluptuous" "0.11.5"
"567a56286ef82a9d7ae0628c5842f65f516abcb496e74f3f59f1d7b28df314ef")
(mkOverride "voluptuous-serialize" "2.1.0"
"d30fef4f1aba251414ec0b315df81a06da7bf35201dcfb1f6db5253d738a154f")
# used by auth.mfa_modules.totp
(mkOverride "pyotp" "2.2.7"
"be0ffeabddaa5ee53e7204e7740da842d070cf69168247a3d0c08541b84de602")
# used by check_config script
# can be unpinned once https://github.com/home-assistant/home-assistant/issues/11917 is resolved
(mkOverride "colorlog" "4.0.2"
"3cf31b25cbc8f86ec01fef582ef3b840950dea414084ed19ab922c8b493f9b42")
# required by aioesphomeapi
(self: super: {
protobuf = super.protobuf.override {
protobuf = protobuf3_6;
};
})
(self: super: {
pyyaml = super.pyyaml_3;
})
# hass-frontend does not exist in python3.pkgs
(self: super: {
hass-frontend = self.callPackage ./frontend.nix { };
})
];
mkOverride = attrname: version: sha256:
self: super: {
${attrname} = super.${attrname}.overridePythonAttrs (oldAttrs: {
inherit version;
src = oldAttrs.src.override {
inherit version sha256;
};
});
};
py = python3.override {
# Put packageOverrides at the start so they are applied after defaultOverrides
packageOverrides = lib.foldr lib.composeExtensions (self: super: { }) ([ packageOverrides ] ++ defaultOverrides);
};
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.93.2";
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 = "01zdg6yfj6qal8jpr9bskmq25crrvz7w3vifrfxmlqws6hv35gc8";
};
propagatedBuildInputs = [
# From setup.py
aiohttp astral async-timeout attrs bcrypt certifi jinja2 pyjwt cryptography pip
python-slugify pytz pyyaml requests ruamel_yaml voluptuous voluptuous-serialize
# From http, frontend and recorder components and auth.mfa_modules.totp
sqlalchemy aiohttp-cors hass-frontend pyotp pyqrcode
] ++ componentBuildInputs ++ extraBuildInputs;
checkInputs = [
asynctest pytest pytest-aiohttp requests-mock pydispatcher aiohue
];
checkPhase = ''
# The components' dependencies are not included, so they cannot be tested
# test_webhook_create_cloudhook imports hass_nabucasa and is thus excluded
py.test --ignore tests/components -k "not test_webhook_create_cloudhook"
# Some basic components should be tested however
py.test \
tests/components/{api,config,configurator,demo,discovery,frontend,group,history,history_graph} \
tests/components/{homeassistant,http,logger,script,shell_command,system_log,websocket_api}
'';
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 ];
};
}