From 31bd500222ada996243ed35760de10d05f5e168e Mon Sep 17 00:00:00 2001 From: Jan Bouwhuis Date: Tue, 10 Oct 2023 14:02:32 +0200 Subject: [PATCH] Make get_channel available as generic helper (#101721) * Make get_channel available as generic helper * Follow up comment --- homeassistant/components/sentry/__init__.py | 15 ++----------- homeassistant/core.py | 25 ++++++++++++++++++++- tests/components/sentry/test_init.py | 16 +------------ tests/test_core.py | 16 +++++++++++++ 4 files changed, 43 insertions(+), 29 deletions(-) diff --git a/homeassistant/components/sentry/__init__.py b/homeassistant/components/sentry/__init__.py index 8815986d368..5e4fb80688d 100644 --- a/homeassistant/components/sentry/__init__.py +++ b/homeassistant/components/sentry/__init__.py @@ -15,7 +15,7 @@ from homeassistant.const import ( EVENT_HOMEASSISTANT_STARTED, __version__ as current_version, ) -from homeassistant.core import HomeAssistant +from homeassistant.core import HomeAssistant, get_release_channel from homeassistant.helpers import config_validation as cv, entity_platform, instance_id from homeassistant.helpers.event import async_call_later from homeassistant.helpers.system_info import async_get_system_info @@ -67,7 +67,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ) # Additional/extra data collection - channel = get_channel(current_version) + channel = get_release_channel() huuid = await instance_id.async_get(hass) system_info = await async_get_system_info(hass) custom_components = await async_get_custom_components(hass) @@ -110,17 +110,6 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: return True -def get_channel(version: str) -> str: - """Find channel based on version number.""" - if "dev0" in version: - return "dev" - if "dev" in version: - return "nightly" - if "b" in version: - return "beta" - return "stable" - - def process_before_send( hass: HomeAssistant, options: MappingProxyType[str, Any], diff --git a/homeassistant/core.py b/homeassistant/core.py index a50d43c1344..2cc79e5bbb4 100644 --- a/homeassistant/core.py +++ b/homeassistant/core.py @@ -28,7 +28,17 @@ import re import threading import time from time import monotonic -from typing import TYPE_CHECKING, Any, Generic, ParamSpec, Self, TypeVar, cast, overload +from typing import ( + TYPE_CHECKING, + Any, + Generic, + Literal, + ParamSpec, + Self, + TypeVar, + cast, + overload, +) from urllib.parse import urlparse import voluptuous as vol @@ -222,6 +232,19 @@ def async_get_hass() -> HomeAssistant: return _hass.hass +@callback +def get_release_channel() -> Literal["beta", "dev", "nightly", "stable"]: + """Find release channel based on version number.""" + version = __version__ + if "dev0" in version: + return "dev" + if "dev" in version: + return "nightly" + if "b" in version: + return "beta" + return "stable" + + @enum.unique class HassJobType(enum.Enum): """Represent a job type.""" diff --git a/tests/components/sentry/test_init.py b/tests/components/sentry/test_init.py index 25b77922878..73f6a7cfd09 100644 --- a/tests/components/sentry/test_init.py +++ b/tests/components/sentry/test_init.py @@ -4,7 +4,7 @@ from unittest.mock import Mock, patch import pytest -from homeassistant.components.sentry import get_channel, process_before_send +from homeassistant.components.sentry import process_before_send from homeassistant.components.sentry.const import ( CONF_DSN, CONF_ENVIRONMENT, @@ -103,20 +103,6 @@ async def test_setup_entry_with_tracing(hass: HomeAssistant) -> None: assert call_args["traces_sample_rate"] == 0.5 -@pytest.mark.parametrize( - ("version", "channel"), - [ - ("0.115.0.dev20200815", "nightly"), - ("0.115.0", "stable"), - ("0.115.0b4", "beta"), - ("0.115.0dev0", "dev"), - ], -) -async def test_get_channel(version: str, channel: str) -> None: - """Test if channel detection works from Home Assistant version number.""" - assert get_channel(version) == channel - - async def test_process_before_send(hass: HomeAssistant) -> None: """Test regular use of the Sentry process before sending function.""" hass.config.components.add("puppies") diff --git a/tests/test_core.py b/tests/test_core.py index 7cafadb638c..ed6823d2bd1 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -43,6 +43,7 @@ from homeassistant.core import ( State, SupportsResponse, callback, + get_release_channel, ) from homeassistant.exceptions import ( HomeAssistantError, @@ -2481,3 +2482,18 @@ async def test_validate_state(hass: HomeAssistant) -> None: assert ha.validate_state("test") == "test" with pytest.raises(InvalidStateError): ha.validate_state("t" * 256) + + +@pytest.mark.parametrize( + ("version", "release_channel"), + [ + ("0.115.0.dev20200815", "nightly"), + ("0.115.0", "stable"), + ("0.115.0b4", "beta"), + ("0.115.0dev0", "dev"), + ], +) +async def test_get_release_channel(version: str, release_channel: str) -> None: + """Test if release channel detection works from Home Assistant version number.""" + with patch("homeassistant.core.__version__", f"{version}"): + assert get_release_channel() == release_channel