Add stage flag (#1460)

* Add stage flag

* Add filter

* Remove filter

* Fix lint
This commit is contained in:
Pascal Vizeli 2020-01-28 17:58:29 +01:00 committed by GitHub
parent 0a8b1c2797
commit f253c797af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 49 additions and 19 deletions

2
API.md
View File

@ -457,6 +457,7 @@ Get all available addons.
"slug": "xy",
"description": "description",
"advanced": "bool",
"stage": "stable|experimental|deprecated",
"repository": "core|local|REP_ID",
"version": "LAST_VERSION",
"installed": "none|INSTALL_VERSION",
@ -496,6 +497,7 @@ Get all available addons.
"detached": "bool",
"available": "bool",
"advanced": "bool",
"stage": "stable|experimental|deprecated",
"arch": ["armhf", "aarch64", "i386", "amd64"],
"machine": "[raspberrypi2, tinker]",
"homeassistant": "null|min Home Assistant version",

View File

@ -49,6 +49,7 @@ from ..const import (
ATTR_SERVICES,
ATTR_SLUG,
ATTR_SNAPSHOT_EXCLUDE,
ATTR_STAGE,
ATTR_STARTUP,
ATTR_STDIN,
ATTR_TIMEOUT,
@ -60,9 +61,10 @@ from ..const import (
SECURITY_DEFAULT,
SECURITY_DISABLE,
SECURITY_PROFILE,
AddonStages,
)
from ..coresys import CoreSysAttributes
from .validate import RE_SERVICE, RE_VOLUME, validate_options, schema_ui_options
from .validate import RE_SERVICE, RE_VOLUME, schema_ui_options, validate_options
Data = Dict[str, Any]
@ -195,6 +197,11 @@ class AddonModel(CoreSysAttributes):
"""Return advanced mode of add-on."""
return self.data[ATTR_ADVANCED]
@property
def stage(self) -> AddonStages:
"""Return stage mode of add-on."""
return self.data[ATTR_STAGE]
@property
def services_role(self) -> Dict[str, str]:
"""Return dict of services with rights."""

View File

@ -65,6 +65,7 @@ from ..const import (
ATTR_SLUG,
ATTR_SNAPSHOT_EXCLUDE,
ATTR_SQUASH,
ATTR_STAGE,
ATTR_STARTUP,
ATTR_STATE,
ATTR_STDIN,
@ -87,6 +88,7 @@ from ..const import (
STARTUP_SERVICES,
STATE_STARTED,
STATE_STOPPED,
AddonStages,
)
from ..coresys import CoreSys
from ..discovery.validate import valid_discovery_service
@ -188,6 +190,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema(
vol.Required(ATTR_STARTUP): vol.All(_simple_startup, vol.In(STARTUP_ALL)),
vol.Required(ATTR_BOOT): vol.In([BOOT_AUTO, BOOT_MANUAL]),
vol.Optional(ATTR_ADVANCED, default=False): vol.Boolean(),
vol.Optional(ATTR_STAGE, default=AddonStages.STABLE): vol.Coerce(AddonStages),
vol.Optional(ATTR_PORTS): DOCKER_PORTS,
vol.Optional(ATTR_PORTS_DESCRIPTION): DOCKER_PORTS_DESCRIPTION,
vol.Optional(ATTR_WEBUI): vol.Match(

View File

@ -76,6 +76,7 @@ from ..const import (
ATTR_SERVICES,
ATTR_SLUG,
ATTR_SOURCE,
ATTR_STAGE,
ATTR_STATE,
ATTR_STDIN,
ATTR_UDEV,
@ -149,6 +150,7 @@ class APIAddons(CoreSysAttributes):
ATTR_SLUG: addon.slug,
ATTR_DESCRIPTON: addon.description,
ATTR_ADVANCED: addon.advanced,
ATTR_STAGE: addon.stage,
ATTR_VERSION: addon.latest_version,
ATTR_INSTALLED: addon.version if addon.is_installed else None,
ATTR_AVAILABLE: addon.available,
@ -193,6 +195,7 @@ class APIAddons(CoreSysAttributes):
ATTR_DESCRIPTON: addon.description,
ATTR_LONG_DESCRIPTION: addon.long_description,
ATTR_ADVANCED: addon.advanced,
ATTR_STAGE: addon.stage,
ATTR_AUTO_UPDATE: None,
ATTR_REPOSITORY: addon.repository,
ATTR_VERSION: None,

View File

@ -37,11 +37,12 @@ from ..const import (
ATTR_WAIT_BOOT,
CONTENT_TYPE_BINARY,
HASSIO_VERSION,
UpdateChannels,
)
from ..coresys import CoreSysAttributes
from ..exceptions import APIError
from ..utils.validate import validate_timezone
from ..validate import channels, log_level, repositories, wait_boot
from ..validate import log_level, repositories, wait_boot
from .utils import api_process, api_process_raw, api_validate
_LOGGER: logging.Logger = logging.getLogger(__name__)
@ -49,7 +50,7 @@ _LOGGER: logging.Logger = logging.getLogger(__name__)
# pylint: disable=no-value-for-parameter
SCHEMA_OPTIONS = vol.Schema(
{
vol.Optional(ATTR_CHANNEL): channels,
vol.Optional(ATTR_CHANNEL): vol.Coerce(UpdateChannels),
vol.Optional(ATTR_ADDONS_REPOSITORIES): repositories,
vol.Optional(ATTR_TIMEZONE): validate_timezone,
vol.Optional(ATTR_WAIT_BOOT): wait_boot,

View File

@ -11,7 +11,7 @@ from .addons import AddonManager
from .api import RestAPI
from .arch import CpuArch
from .auth import Auth
from .const import CHANNEL_DEV, SOCKET_DOCKER
from .const import SOCKET_DOCKER, UpdateChannels
from .core import HassIO
from .coresys import CoreSys
from .dbus import DBusManager
@ -142,7 +142,7 @@ def initialize_system_data(coresys: CoreSys):
# Check if ENV is in development mode
if bool(os.environ.get("SUPERVISOR_DEV", 0)):
_LOGGER.warning("SUPERVISOR_DEV is set")
coresys.updater.channel = CHANNEL_DEV
coresys.updater.channel = UpdateChannels.DEV
coresys.config.logging = "debug"
coresys.config.debug = True

View File

@ -1,6 +1,7 @@
"""Constants file for Hass.io."""
from pathlib import Path
from enum import Enum
from ipaddress import ip_network
from pathlib import Path
HASSIO_VERSION = "197"
@ -224,6 +225,7 @@ ATTR_VALUE = "value"
ATTR_SNAPSHOT_EXCLUDE = "snapshot_exclude"
ATTR_DOCUMENTATION = "documentation"
ATTR_ADVANCED = "advanced"
ATTR_STAGE = "stage"
PROVIDE_SERVICE = "provide"
NEED_SERVICE = "need"
@ -264,10 +266,6 @@ ARCH_I386 = "i386"
ARCH_ALL = [ARCH_ARMHF, ARCH_ARMV7, ARCH_AARCH64, ARCH_AMD64, ARCH_I386]
CHANNEL_STABLE = "stable"
CHANNEL_BETA = "beta"
CHANNEL_DEV = "dev"
REPOSITORY_CORE = "core"
REPOSITORY_LOCAL = "local"
@ -325,3 +323,19 @@ ROLE_ALL = [ROLE_DEFAULT, ROLE_HOMEASSISTANT, ROLE_BACKUP, ROLE_MANAGER, ROLE_AD
CHAN_ID = "chan_id"
CHAN_TYPE = "chan_type"
class AddonStages(str, Enum):
"""Stage types of add-on."""
STABLE = "stable"
EXPERIMENTAL = "experimental"
DEPRECATED = "deprecated"
class UpdateChannels(str, Enum):
"""Core supported update channels."""
STABLE = "stable"
BETA = "beta"
DEV = "dev"

View File

@ -6,7 +6,7 @@ from typing import TYPE_CHECKING, Optional
import aiohttp
from .config import CoreConfig
from .const import CHANNEL_DEV
from .const import UpdateChannels
from .docker import DockerAPI
from .misc.hardware import Hardware
from .misc.scheduler import Scheduler
@ -85,7 +85,7 @@ class CoreSys:
@property
def dev(self) -> bool:
"""Return True if we run dev mode."""
return self._updater.channel == CHANNEL_DEV
return self._updater.channel == UpdateChannels.DEV
@property
def timezone(self) -> str:

View File

@ -17,6 +17,7 @@ from .const import (
ATTR_HOMEASSISTANT,
FILE_HASSIO_UPDATER,
URL_HASSIO_VERSION,
UpdateChannels,
)
from .coresys import CoreSysAttributes
from .exceptions import HassioUpdaterError
@ -71,12 +72,12 @@ class Updater(JsonConfig, CoreSysAttributes):
return self._data.get(ATTR_DNS)
@property
def channel(self) -> str:
def channel(self) -> UpdateChannels:
"""Return upstream channel of Hass.io instance."""
return self._data[ATTR_CHANNEL]
@channel.setter
def channel(self, value: str):
def channel(self, value: UpdateChannels):
"""Set upstream mode."""
self._data[ATTR_CHANNEL] = value

View File

@ -32,9 +32,7 @@ from .const import (
ATTR_VERSION,
ATTR_WAIT_BOOT,
ATTR_WATCHDOG,
CHANNEL_BETA,
CHANNEL_DEV,
CHANNEL_STABLE,
UpdateChannels,
)
from .utils.validate import validate_timezone
@ -47,7 +45,6 @@ network_port = vol.All(vol.Coerce(int), vol.Range(min=1, max=65535))
wait_boot = vol.All(vol.Coerce(int), vol.Range(min=1, max=60))
docker_image = vol.Match(r"^[\w{}]+/[\-\w{}]+$")
alsa_device = vol.Maybe(vol.Match(r"\d+,\d+"))
channels = vol.In([CHANNEL_STABLE, CHANNEL_BETA, CHANNEL_DEV])
uuid_match = vol.Match(r"^[0-9a-f]{32}$")
sha256 = vol.Match(r"^[0-9a-f]{64}$")
token = vol.Match(r"^[0-9a-f]{32,256}$")
@ -122,7 +119,9 @@ SCHEMA_HASS_CONFIG = vol.Schema(
SCHEMA_UPDATER_CONFIG = vol.Schema(
{
vol.Optional(ATTR_CHANNEL, default=CHANNEL_STABLE): channels,
vol.Optional(ATTR_CHANNEL, default=UpdateChannels.STABLE): vol.Coerce(
UpdateChannels
),
vol.Optional(ATTR_HOMEASSISTANT): vol.Coerce(str),
vol.Optional(ATTR_HASSIO): vol.Coerce(str),
vol.Optional(ATTR_HASSOS): vol.Coerce(str),