mirror of
https://github.com/home-assistant/core.git
synced 2025-07-26 22:57:17 +00:00
Merge pull request #623 from balloob/lib-clean-on-upgrade
Lib clean on upgrade
This commit is contained in:
commit
0d74b628b0
@ -9,11 +9,12 @@ After bootstrapping you can add your own components or
|
|||||||
start by calling homeassistant.start_home_assistant(bus)
|
start by calling homeassistant.start_home_assistant(bus)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
from collections import defaultdict
|
||||||
import sys
|
|
||||||
import logging
|
import logging
|
||||||
import logging.handlers
|
import logging.handlers
|
||||||
from collections import defaultdict
|
import os
|
||||||
|
import shutil
|
||||||
|
import sys
|
||||||
|
|
||||||
import homeassistant.core as core
|
import homeassistant.core as core
|
||||||
import homeassistant.util.dt as date_util
|
import homeassistant.util.dt as date_util
|
||||||
@ -25,7 +26,7 @@ import homeassistant.components as core_components
|
|||||||
import homeassistant.components.group as group
|
import homeassistant.components.group as group
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
EVENT_COMPONENT_LOADED, CONF_LATITUDE, CONF_LONGITUDE,
|
__version__, EVENT_COMPONENT_LOADED, CONF_LATITUDE, CONF_LONGITUDE,
|
||||||
CONF_TEMPERATURE_UNIT, CONF_NAME, CONF_TIME_ZONE, CONF_CUSTOMIZE,
|
CONF_TEMPERATURE_UNIT, CONF_NAME, CONF_TIME_ZONE, CONF_CUSTOMIZE,
|
||||||
TEMP_CELCIUS, TEMP_FAHRENHEIT)
|
TEMP_CELCIUS, TEMP_FAHRENHEIT)
|
||||||
|
|
||||||
@ -168,6 +169,7 @@ def from_config_dict(config, hass=None, config_dir=None, enable_log=True,
|
|||||||
hass.config.config_dir = config_dir
|
hass.config.config_dir = config_dir
|
||||||
mount_local_lib_path(config_dir)
|
mount_local_lib_path(config_dir)
|
||||||
|
|
||||||
|
process_ha_config_upgrade(hass)
|
||||||
process_ha_core_config(hass, config.get(core.DOMAIN, {}))
|
process_ha_core_config(hass, config.get(core.DOMAIN, {}))
|
||||||
|
|
||||||
if enable_log:
|
if enable_log:
|
||||||
@ -281,6 +283,31 @@ def enable_logging(hass, verbose=False, daemon=False, log_rotate_days=None):
|
|||||||
'Unable to setup error log %s (access denied)', err_log_path)
|
'Unable to setup error log %s (access denied)', err_log_path)
|
||||||
|
|
||||||
|
|
||||||
|
def process_ha_config_upgrade(hass):
|
||||||
|
""" Upgrade config if necessary. """
|
||||||
|
version_path = hass.config.path('.HA_VERSION')
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(version_path, 'rt') as inp:
|
||||||
|
conf_version = inp.readline().strip()
|
||||||
|
except FileNotFoundError:
|
||||||
|
# Last version to not have this file
|
||||||
|
conf_version = '0.7.7'
|
||||||
|
|
||||||
|
if conf_version == __version__:
|
||||||
|
return
|
||||||
|
|
||||||
|
_LOGGER.info('Upgrading config directory from %s to %s', conf_version,
|
||||||
|
__version__)
|
||||||
|
|
||||||
|
lib_path = hass.config.path('lib')
|
||||||
|
if os.path.isdir(lib_path):
|
||||||
|
shutil.rmtree(lib_path)
|
||||||
|
|
||||||
|
with open(version_path, 'wt') as outp:
|
||||||
|
outp.write(__version__)
|
||||||
|
|
||||||
|
|
||||||
def process_ha_core_config(hass, config):
|
def process_ha_core_config(hass, config):
|
||||||
""" Processes the [homeassistant] section from the config. """
|
""" Processes the [homeassistant] section from the config. """
|
||||||
hac = hass.config
|
hac = hass.config
|
||||||
|
@ -10,8 +10,8 @@ from functools import partial
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
import homeassistant.bootstrap as bootstrap
|
||||||
from homeassistant.config import load_yaml_config_file
|
from homeassistant.config import load_yaml_config_file
|
||||||
from homeassistant.loader import get_component
|
|
||||||
from homeassistant.helpers import config_per_platform
|
from homeassistant.helpers import config_per_platform
|
||||||
|
|
||||||
from homeassistant.const import CONF_NAME
|
from homeassistant.const import CONF_NAME
|
||||||
@ -45,8 +45,8 @@ def setup(hass, config):
|
|||||||
|
|
||||||
for platform, p_config in config_per_platform(config, DOMAIN, _LOGGER):
|
for platform, p_config in config_per_platform(config, DOMAIN, _LOGGER):
|
||||||
# get platform
|
# get platform
|
||||||
notify_implementation = get_component(
|
notify_implementation = bootstrap.prepare_setup_platform(
|
||||||
'notify.{}'.format(platform))
|
hass, config, DOMAIN, platform)
|
||||||
|
|
||||||
if notify_implementation is None:
|
if notify_implementation is None:
|
||||||
_LOGGER.error("Unknown notification service specified.")
|
_LOGGER.error("Unknown notification service specified.")
|
||||||
|
@ -29,6 +29,7 @@ def install_package(package, upgrade=True, target=None):
|
|||||||
try:
|
try:
|
||||||
return 0 == subprocess.call(args)
|
return 0 == subprocess.call(args)
|
||||||
except subprocess.SubprocessError:
|
except subprocess.SubprocessError:
|
||||||
|
_LOGGER.exception('Unable to install pacakge %s', package)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,11 +5,13 @@ tests.test_bootstrap
|
|||||||
Tests bootstrap.
|
Tests bootstrap.
|
||||||
"""
|
"""
|
||||||
# pylint: disable=too-many-public-methods,protected-access
|
# pylint: disable=too-many-public-methods,protected-access
|
||||||
|
import os
|
||||||
import tempfile
|
import tempfile
|
||||||
import unittest
|
import unittest
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
from homeassistant import bootstrap
|
from homeassistant import core, bootstrap
|
||||||
|
from homeassistant.const import __version__
|
||||||
import homeassistant.util.dt as dt_util
|
import homeassistant.util.dt as dt_util
|
||||||
|
|
||||||
from tests.common import mock_detect_location_info
|
from tests.common import mock_detect_location_info
|
||||||
@ -39,3 +41,45 @@ class TestBootstrap(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertEqual(sorted(components),
|
self.assertEqual(sorted(components),
|
||||||
sorted(hass.config.components))
|
sorted(hass.config.components))
|
||||||
|
|
||||||
|
def test_remove_lib_on_upgrade(self):
|
||||||
|
with tempfile.TemporaryDirectory() as config_dir:
|
||||||
|
version_path = os.path.join(config_dir, '.HA_VERSION')
|
||||||
|
lib_dir = os.path.join(config_dir, 'lib')
|
||||||
|
check_file = os.path.join(lib_dir, 'check')
|
||||||
|
|
||||||
|
with open(version_path, 'wt') as outp:
|
||||||
|
outp.write('0.7.0')
|
||||||
|
|
||||||
|
os.mkdir(lib_dir)
|
||||||
|
|
||||||
|
with open(check_file, 'w'):
|
||||||
|
pass
|
||||||
|
|
||||||
|
hass = core.HomeAssistant()
|
||||||
|
hass.config.config_dir = config_dir
|
||||||
|
|
||||||
|
self.assertTrue(os.path.isfile(check_file))
|
||||||
|
bootstrap.process_ha_config_upgrade(hass)
|
||||||
|
self.assertFalse(os.path.isfile(check_file))
|
||||||
|
|
||||||
|
def test_not_remove_lib_if_not_upgrade(self):
|
||||||
|
with tempfile.TemporaryDirectory() as config_dir:
|
||||||
|
version_path = os.path.join(config_dir, '.HA_VERSION')
|
||||||
|
lib_dir = os.path.join(config_dir, 'lib')
|
||||||
|
check_file = os.path.join(lib_dir, 'check')
|
||||||
|
|
||||||
|
with open(version_path, 'wt') as outp:
|
||||||
|
outp.write(__version__)
|
||||||
|
|
||||||
|
os.mkdir(lib_dir)
|
||||||
|
|
||||||
|
with open(check_file, 'w'):
|
||||||
|
pass
|
||||||
|
|
||||||
|
hass = core.HomeAssistant()
|
||||||
|
hass.config.config_dir = config_dir
|
||||||
|
|
||||||
|
bootstrap.process_ha_config_upgrade(hass)
|
||||||
|
|
||||||
|
self.assertTrue(os.path.isfile(check_file))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user