about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/home-assistant/default.nix
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2021-06-22 15:01:47 +0000
committerAlyssa Ross <hi@alyssa.is>2021-06-22 16:57:59 +0000
commit633cab0ecb07627706c6b523e219490f019eaab5 (patch)
tree4fb472bdfe2723037dad53dc1b8a87c939015f5e /nixpkgs/pkgs/servers/home-assistant/default.nix
parentffb691c199e7e0cbc4e45e5310779c9e3f7c2a73 (diff)
parent432fc2d9a67f92e05438dff5fdc2b39d33f77997 (diff)
downloadnixlib-633cab0ecb07627706c6b523e219490f019eaab5.tar
nixlib-633cab0ecb07627706c6b523e219490f019eaab5.tar.gz
nixlib-633cab0ecb07627706c6b523e219490f019eaab5.tar.bz2
nixlib-633cab0ecb07627706c6b523e219490f019eaab5.tar.lz
nixlib-633cab0ecb07627706c6b523e219490f019eaab5.tar.xz
nixlib-633cab0ecb07627706c6b523e219490f019eaab5.tar.zst
nixlib-633cab0ecb07627706c6b523e219490f019eaab5.zip
Merge commit '432fc2d9a67f92e05438dff5fdc2b39d33f77997'
# Conflicts:
#	nixpkgs/pkgs/applications/editors/emacs/elisp-packages/elpa-generated.nix
#	nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/default.nix
#	nixpkgs/pkgs/applications/window-managers/sway/default.nix
#	nixpkgs/pkgs/build-support/rust/default.nix
#	nixpkgs/pkgs/development/go-modules/generic/default.nix
Diffstat (limited to 'nixpkgs/pkgs/servers/home-assistant/default.nix')
-rw-r--r--nixpkgs/pkgs/servers/home-assistant/default.nix382
1 files changed, 324 insertions, 58 deletions
diff --git a/nixpkgs/pkgs/servers/home-assistant/default.nix b/nixpkgs/pkgs/servers/home-assistant/default.nix
index cb4557380801..f0c00550381d 100644
--- a/nixpkgs/pkgs/servers/home-assistant/default.nix
+++ b/nixpkgs/pkgs/servers/home-assistant/default.nix
@@ -2,6 +2,7 @@
 , lib
 , fetchFromGitHub
 , python3
+, inetutils
 , nixosTests
 
 # Look up dependencies of specified components in component-packages.nix
@@ -22,24 +23,6 @@ let
   defaultOverrides = [
     # Override the version of some packages pinned in Home Assistant's setup.py
 
-    # Pinned due to API changes in astral>=2.0, required by the sun/moon plugins
-    # https://github.com/home-assistant/core/pull/48573; Remove >= 2021.5
-    (mkOverride "astral" "1.10.1"
-      "d2a67243c4503131c856cafb1b1276de52a86e5b8a1d507b7e08bee51cb67bf1")
-
-    # Pinned due to API changes in brother>=1.0, remove >= 2021.5
-    (self: super: {
-      brother = super.brother.overridePythonAttrs (oldAttrs: rec {
-        version = "0.2.2";
-        src = fetchFromGitHub {
-          owner = "bieniu";
-          repo = "brother";
-          rev = version;
-          sha256 = "sha256-vIefcL3K3ZbAUxMFM7gbbTFdrnmufWZHcq4OA19SYXE=";
-        };
-      });
-    })
-
     # Pinned due to API changes in iaqualink>=2.0, remove after
     # https://github.com/home-assistant/core/pull/48137 was merged
     (self: super: {
@@ -56,26 +39,15 @@ let
     })
 
     # Pinned due to API changes in pyjwt>=2.0
-    (mkOverride "pyjwt" "1.7.1"
-      "15hflax5qkw1v6nssk1r0wkj83jgghskcmn875m3wgvpzdvajncd")
-
-    # Pinned due to API changes in pykmtronic>=0.2.0
-    (mkOverride "pykmtronic" "0.0.3"
-      "sha256-8bxn27DU1XUQUxQFJklEge29DHx1DMu7pJG4hVE1jDU=")
-
-    # Pinned due to API changes in pylilterbot>=2021.3.0
-    # https://github.com/home-assistant/core/pull/48300; Remove >= 2021.5
     (self: super: {
-      pylitterbot = super.pylitterbot.overridePythonAttrs (oldAttrs: rec {
-        version = "2021.2.8";
-        src = fetchFromGitHub {
-          owner = "natekspencer";
-          repo = "pylitterbot";
-          rev = version;
-          sha256 = "142lhijm51v11cd0lhcfdnjdd143jxi2hjsrqdq0rrbbnmj6mymp";
+      pyjwt = super.pyjwt.overridePythonAttrs (oldAttrs: rec {
+        version = "1.7.1";
+        src = oldAttrs.src.override {
+          sha256 = "15hflax5qkw1v6nssk1r0wkj83jgghskcmn875m3wgvpzdvajncd";
         };
-        # had no tests before 2021.3.0
-        doCheck = false;
+        disabledTests = [
+          "test_ec_verify_should_return_false_if_signature_invalid"
+        ];
       });
     })
 
@@ -84,6 +56,46 @@ let
     (mkOverride "ring-doorbell" "0.6.2"
       "fbd537722a27b3b854c26506d894b7399bb8dc57ff36083285971227a2d46560")
 
+    # Pinned due to API changes in pyflunearyou>=2.0
+    (self: super: {
+      pyflunearyou = super.pyflunearyou.overridePythonAttrs (oldAttrs: rec {
+        version = "1.0.7";
+        src = fetchFromGitHub {
+          owner = "bachya";
+          repo = "pyflunearyou";
+          rev = version;
+          sha256 = "0hq55k298m9a90qb3lasw9bi093hzndrah00rfq94bp53aq0is99";
+        };
+        postPatch = ''
+          substituteInPlace pyproject.toml \
+            --replace "poetry.masonry.api" "poetry.core.masonry.api" \
+            --replace 'msgpack = "^0.6.2"' 'msgpack = "*"' \
+            --replace 'ujson = "^1.35"' 'ujson = "*"'
+        '';
+      });
+    })
+
+    # Pinned due to API changes in pylast 4.2.1
+    (mkOverride "pylast" "4.2.0"
+      "0zd0dn2l738ndz62vpa751z0ldnm91dcz9zzbvxv53r08l0s9yf3")
+
+    # Pinned due to API changes in pyopenuv>=1.1.0
+    (self: super: {
+      pyopenuv = super.pyopenuv.overridePythonAttrs (oldAttrs: rec {
+        version = "1.0.13";
+        src = fetchFromGitHub {
+          owner = "bachya";
+          repo = "pyopenuv";
+          rev = version;
+          sha256 = "1gx9xjkyvqqy8410lnbshq1j5y4cb0cdc4m505g17rwdzdwb01y8";
+        };
+        postPatch = ''
+          substituteInPlace pyproject.toml \
+            --replace "poetry.masonry.api" "poetry.core.masonry.api"
+        '';
+      });
+    })
+
     # Pinned due to API changes in pyruckus>0.12
     (self: super: {
       pyruckus = super.pyruckus.overridePythonAttrs (oldAttrs: rec {
@@ -97,6 +109,19 @@ let
       });
     })
 
+    # Remove after https://github.com/NixOS/nixpkgs/pull/121854 has passed staging-next
+    (self: super: {
+      sqlalchemy = super.sqlalchemy.overridePythonAttrs (oldAttrs: rec {
+        version = "1.4.13";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "0npsg38d11skv04zvsi90j93f6jdgm8666ds2ri7shr1pz1732hx";
+        };
+        patches = [];
+        propagatedBuildInputs = [ python3.pkgs.greenlet ];
+      });
+    })
+
     # hass-frontend does not exist in python3.pkgs
     (self: super: {
       hass-frontend = self.callPackage ./frontend.nix { };
@@ -130,7 +155,7 @@ let
   extraBuildInputs = extraPackages py.pkgs;
 
   # Don't forget to run parse-requirements.py after updating
-  hassVersion = "2021.4.6";
+  hassVersion = "2021.5.5";
 
 in with py.pkgs; buildPythonApplication rec {
   pname = "homeassistant";
@@ -149,7 +174,7 @@ in with py.pkgs; buildPythonApplication rec {
     owner = "home-assistant";
     repo = "core";
     rev = version;
-    sha256 = "1s1slwcqls2prz9kgyhggs8xi3x7ghwdi33j983kvpg0gva7d2f0";
+    sha256 = "1vdxygjik1ay58xgyr1rk12cgy63raqi4fldnd4mlhs4i21c7ff8";
   };
 
   # leave this in, so users don't have to constantly update their downstream patch handling
@@ -162,8 +187,6 @@ in with py.pkgs; buildPythonApplication rec {
       --replace "bcrypt==3.1.7" "bcrypt" \
       --replace "cryptography==3.3.2" "cryptography" \
       --replace "pip>=8.0.3,<20.3" "pip" \
-      --replace "pytz>=2021.1" "pytz" \
-      --replace "pyyaml==5.4.1" "pyyaml" \
       --replace "ruamel.yaml==0.15.100" "ruamel.yaml"
     substituteInPlace tests/test_config.py --replace '"/usr"' '"/build/media"'
   '';
@@ -200,70 +223,133 @@ in with py.pkgs; buildPythonApplication rec {
   doCheck = stdenv.isLinux;
 
   checkInputs = [
-    # test infrastructure
-    asynctest
+    # test infrastructure (selectively from requirement_test.txt)
     pytest-aiohttp
+    pytest-mock
     pytest-rerunfailures
     pytest-xdist
     pytestCheckHook
     requests-mock
-    # component dependencies
-    pyotp
+    jsonpickle
     respx
+    # required by tests/auth/mfa_modules
+    pyotp
   ] ++ lib.concatMap (component: getPackages component py.pkgs) componentTests;
 
   # We can reasonably test components that don't communicate with any network
   # services. Before adding new components to this list make sure we have all
   # its dependencies packaged and listed in ./component-packages.nix.
   componentTests = [
+    "abode"
     "accuweather"
+    "acmeda"
+    "adguard"
+    "advantage_air"
+    "agent_dvr"
+    "air_quality"
     "airly"
-    "analytics"
+    "airnow"
+    "airvisual"
+    "alarm_control_panel"
+    "alarmdecoder"
     "alert"
+    "alexa"
+    "almond"
+    "ambiclimate"
+    "ambient_station"
+    "analytics"
+    "androidtv"
+    "apache_kafka"
     "api"
+    "apple_tv"
+    "apprise"
+    "arlo"
+    "asuswrt"
+    "august"
+    "aurora"
     "auth"
     "automation"
+    "awair"
+    "aws"
     "axis"
     "bayesian"
     "binary_sensor"
+    "blackbird"
+    "blueprint"
+    "bluetooth_le_tracker"
+    "braviatv"
+    "broadlink"
     "brother"
+    "bsblan"
     "caldav"
     "calendar"
     "camera"
+    "canary"
     "cast"
+    "cert_expiry"
+    "climacell"
     "climate"
     "cloud"
+    "cloudflare"
     "comfoconnect"
     "command_line"
+    "compensation"
     "config"
     "configurator"
     "conversation"
+    "coronavirus"
     "counter"
     "cover"
+    "daikin"
+    "darksky"
+    "datadog"
     "deconz"
     "default_config"
     "demo"
+    "denonavr"
     "derivative"
     "device_automation"
     "device_sun_light_trigger"
     "device_tracker"
     "devolo_home_control"
+    "dexcom"
     "dhcp"
+    "dialogflow"
     "discovery"
     "dsmr"
+    "dte_energy_bridge"
+    "duckdns"
+    "dyson"
+    "eafm"
     "econet"
+    "efergy"
+    "emonitor"
     "emulated_hue"
+    "enphase_envoy"
     "esphome"
-    "fan"
+    "everlights"
+    "ezviz"
     "faa_delays"
+    "facebook"
+    "facebox"
+    "fail2ban"
+    "fan"
+    "feedreader"
     "ffmpeg"
+    "fido"
     "file"
     "filesize"
     "filter"
+    "firmata"
+    "flo"
+    "flume"
+    "flunearyou"
     "flux"
     "folder"
     "folder_watcher"
     "freebox"
+    "freedns"
+    "fritz"
     "fritzbox"
     "fritzbox_callmonitor"
     "frontend"
@@ -271,162 +357,332 @@ in with py.pkgs; buildPythonApplication rec {
     "generic_thermostat"
     "geo_json_events"
     "geo_location"
+    "geofency"
+    "glances"
+    "google"
+    "google_assistant"
+    "google_domains"
+    "google_pubsub"
+    "google_translate"
+    "google_travel_time"
+    "google_wifi"
+    "gpslogger"
+    "graphite"
     "group"
+    "guardian"
+    "harmony"
+    "hassio"
     "hddtemp"
     "history"
     "history_stats"
     "home_connect"
     "home_plus_control"
+    "homeassistant"
     "homekit"
     "homekit_controller"
-    "homeassistant"
     "homematic"
     "homematicip_cloud"
     "html5"
     "http"
     "hue"
+    "humidifier"
     "hyperion"
+    "ialarm"
     "iaqualink"
+    "icloud"
     "ifttt"
     "image"
     "image_processing"
+    "imap_email_content"
     "influxdb"
     "input_boolean"
     "input_datetime"
-    "input_text"
     "input_number"
     "input_select"
+    "input_text"
+    "insteon"
+    "integration"
     "intent"
     "intent_script"
+    "ios"
     "ipp"
+    "iqvia"
+    "islamic_prayer_times"
+    "jewish_calendar"
+    "kira"
     "kmtronic"
     "knx"
     "kodi"
+    "lastfm"
+    "lcn"
     "light"
     "litterrobot"
     "local_file"
     "local_ip"
+    "locative"
     "lock"
     "logbook"
     "logentries"
     "logger"
+    "london_air"
     "lovelace"
+    "luftdaten"
     "lutron_caseta"
+    "lyric"
+    "mailbox"
     "manual"
     "manual_mqtt"
     "mazda"
     "media_player"
     "media_source"
+    "meraki"
     "met"
+    "met_eireann"
+    "microsoft_face"
+    "microsoft_face_detect"
+    "microsoft_face_identify"
+    "mikrotik"
+    "min_max"
     "minecraft_server"
+    "minio"
     "mobile_app"
     "modbus"
+    "mold_indicator"
     "moon"
+    "motioneye"
     "mqtt"
     "mqtt_eventstream"
     "mqtt_json"
     "mqtt_room"
     "mqtt_statestream"
     "mullvad"
+    "mutesync"
+    "my"
+    "myq"
+    "mysensors"
+    "namecheapdns"
+    "neato"
+    "netatmo"
     "nexia"
+    "no_ip"
     "notify"
     "notion"
+    "nuki"
     "number"
+    "nws"
     "nx584"
     "omnilogic"
+    "onboarding"
     "ondilo_ico"
+    "openalpr_cloud"
+    "openalpr_local"
     "openerz"
+    "openhardwaremonitor"
+    "opentherm_gw"
+    "openuv"
+    "openweathermap"
+    "opnsense"
+    "ovo_energy"
+    "owntracks"
     "ozw"
     "panel_custom"
     "panel_iframe"
     "persistent_notification"
     "person"
+    "philips_js"
+    "pi_hole"
+    "picnic"
+    "ping"
     "plaato"
+    "plant"
+    "plex"
+    "plugwise"
+    "poolsense"
+    "profiler"
     "prometheus"
     "proximity"
     "push"
+    "pushbullet"
+    "pvpc_hourly_pricing"
     "python_script"
+    "rachio"
+    "radarr"
+    "rainmachine"
     "random"
+    "recollect_waste"
     "recorder"
+    "reddit"
+    "remote"
     "rest"
     "rest_command"
+    "ring"
+    "risco"
     "rituals_perfume_genie"
     "rmvtransport"
     "roku"
+    "roomba"
+    "roon"
     "rss_feed_template"
     "ruckus_unleashed"
     "safe_mode"
+    "samsungtv"
     "scene"
     "screenlogic"
     "script"
     "search"
+    "season"
+    "sensor"
+    "sentry"
+    "sharkiq"
     "shell_command"
+    "shelly"
     "shopping_list"
+    "sigfox"
+    "sighthound"
     "simplisafe"
     "simulated"
+    "slack"
     "sleepiq"
     "sma"
-    "smhi"
-    "sensor"
-    "slack"
+    "smappee"
     "smartthings"
     "smarttub"
+    "smhi"
     "smtp"
-    "smappee"
+    "snips"
     "solaredge"
+    "soma"
+    "somfy"
     "sonos"
+    "soundtouch"
+    "spaceapi"
+    "speedtestdotnet"
     "spotify"
     "sql"
+    "squeezebox"
     "ssdp"
+    "startca"
+    "statistics"
+    "statsd"
     "stream"
+    "stt"
     "subaru"
     "sun"
+    "surepetcare"
     "switch"
+    "switcher_kis"
     "system_health"
     "system_log"
+    "tado"
     "tag"
     "tasmota"
     "tcp"
+    "telegram"
+    "tellduslive"
     "template"
+    "tesla"
     "threshold"
+    "tile"
     "time_date"
     "timer"
     "tod"
+    "tomato"
+    "toon"
+    "tplink"
     "trace"
+    "transmission"
+    "trend"
     "tts"
+    "tuya"
+    "twentemilieu"
+    "twilio"
+    "twinkly"
+    "twitch"
+    "uk_transport"
+    "unifi"
+    "unifi_direct"
     "universal"
     "updater"
     "upnp"
     "uptime"
+    "usgs_earthquakes_feed"
+    "utility_meter"
+    "uvc"
     "vacuum"
+    "velbus"
+    "vera"
     "verisure"
+    "version"
+    "vesync"
+    "vizio"
+    "voicerss"
+    "volumio"
+    "vultr"
+    "wake_on_lan"
+    "water_heater"
+    "waze_travel_time"
     "weather"
     "webhook"
+    "webostv"
     "websocket_api"
     "wemo"
+    "wiffi"
+    "wilight"
     "wled"
     "workday"
     "worldclock"
+    "wsdot"
+    "wunderground"
+    "xiaomi"
+    "xiaomi_aqara"
+    "xiaomi_miio"
+    "yamaha"
+    "yandex_transport"
+    "yandextts"
     "yeelight"
     "zeroconf"
+    "zerproc"
     "zha"
+    "zodiac"
     "zone"
     "zwave"
     "zwave_js"
+  ] ++ lib.optionals (builtins.any (s: s == stdenv.hostPlatform.system) debugpy.meta.platforms) [
+    "debugpy"
   ];
 
   pytestFlagsArray = [
-    # limit amout of runners to reduce race conditions
-    "-n auto"
+    # parallelize test run
+    "--numprocesses auto"
+    # assign tests grouped by file to workers
+    "--dist loadfile"
     # retry racy tests that end in "RuntimeError: Event loop is closed"
     "--reruns 3"
     "--only-rerun RuntimeError"
-    # assign tests grouped by file to workers
-    "--dist loadfile"
-    # tests are located in tests/
-    "tests"
+    # enable full variable printing on error
+    "--showlocals"
     # screenlogic/test_config_flow.py: Tries to send out UDP broadcasts
     "--deselect tests/components/screenlogic/test_config_flow.py::test_form_cannot_connect"
+    # asuswrt/test_config_flow.py: Sandbox network limitations, fails with unexpected error
+    "--deselect tests/components/asuswrt/test_config_flow.py::test_on_connect_failed"
+    # shelly/test_config_flow.py: Tries to join multicast group
+    "--deselect tests/components/shelly/test_config_flow.py::test_form"
+    "--deselect tests/components/shelly/test_config_flow.py::test_title_without_name"
+    "--deselect tests/components/shelly/test_config_flow.py::test_form_auth"
+    "--deselect tests/components/shelly/test_config_flow.py::test_form_errors_test_connection"
+    "--deselect tests/components/shelly/test_config_flow.py::test_user_setup_ignored_device"
+    "--deselect tests/components/shelly/test_config_flow.py::test_form_auth_errors_test_connection"
+    "--deselect tests/components/shelly/test_config_flow.py::test_form_auth_errors_test_connection"
+    "--deselect tests/components/shelly/test_config_flow.py::test_form_auth_errors_test_connection"
+    "--deselect tests/components/shelly/test_config_flow.py::test_zeroconf"
+    "--deselect tests/components/shelly/test_config_flow.py::test_zeroconf_sleeping_device"
+    "--deselect tests/components/shelly/test_config_flow.py::test_zeroconf_sleeping_device_error"
+    "--deselect tests/components/shelly/test_config_flow.py::test_zeroconf_sleeping_device_error"
+    "--deselect tests/components/shelly/test_config_flow.py::test_zeroconf_require_auth"
+    # prometheus/test_init.py: Spurious AssertionError regarding humidifier_target_humidity_percent metric
+    "--deselect tests/components/prometheus/test_init.py::test_view"
+    # tests are located in tests/
+    "tests"
     # dynamically add packages required for component tests
   ] ++ map (component: "tests/components/" + component) componentTests;
 
@@ -451,6 +707,13 @@ in with py.pkgs; buildPythonApplication rec {
     "test_fetching_url_with_verify_ssl"
     # util/test_package.py: AssertionError on package.is_installed('homeassistant>=999.999.999')
     "test_check_package_version_does_not_match"
+    # homeassistant/util/thread.py:51: SystemError
+    "test_executor_shutdown_can_interrupt_threads"
+    # {'theme_color': '#03A9F4'} != {'theme_color': 'blue'}
+    "test_webhook_handle_get_config"
+    # onboarding tests rpi_power component, for which we are lacking rpi_bad_power library
+    "test_onboarding_core_sets_up_rpi_power"
+    "test_onboarding_core_no_rpi_power"
   ];
 
   preCheck = ''
@@ -459,6 +722,9 @@ in with py.pkgs; buildPythonApplication rec {
     # the tests require the existance of a media dir
     mkdir /build/media
 
+    # put ping binary into PATH, e.g. for wake_on_lan tests
+    export PATH=${inetutils}/bin:$PATH
+
     # error out when component test directory is missing, otherwise hidden by xdist execution :(
     for component in ${lib.concatStringsSep " " (map lib.escapeShellArg componentTests)}; do
       test -d "tests/components/$component" || {