mirror of
				https://github.com/home-assistant/supervisor.git
				synced 2025-10-31 14:39:30 +00:00 
			
		
		
		
	 9ce9e10dfd
			
		
	
	9ce9e10dfd
	
	
	
		
			
			* Split add-on store logic * finish data model * Cleanup models * Cleanup imports * split up store addons * More cleanup * Go to stable * Fix layout * Cleanup interface * Fix restore/snapshot * Fix algo * Fix reload task * Fix typing / remove indirect add-on references * Fix version * Fix repository data * Fix addon repo * Fix api check * Fix API return * Fix model * Temp fix available * Fix lint * Fix install * Fix partial restore * Fix store restore * Fix ingress port * Fix API * Fix style
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Init file for Hass.io add-on data."""
 | |
| from copy import deepcopy
 | |
| import logging
 | |
| from typing import Any, Dict
 | |
| 
 | |
| from ..const import (
 | |
|     ATTR_IMAGE,
 | |
|     ATTR_OPTIONS,
 | |
|     ATTR_SYSTEM,
 | |
|     ATTR_USER,
 | |
|     ATTR_VERSION,
 | |
|     FILE_HASSIO_ADDONS,
 | |
| )
 | |
| from ..coresys import CoreSys, CoreSysAttributes
 | |
| from ..utils.json import JsonConfig
 | |
| from ..store.addon import AddonStore
 | |
| from .addon import Addon
 | |
| from .validate import SCHEMA_ADDONS_FILE
 | |
| 
 | |
| _LOGGER = logging.getLogger(__name__)
 | |
| 
 | |
| Config = Dict[str, Any]
 | |
| 
 | |
| 
 | |
| class AddonsData(JsonConfig, CoreSysAttributes):
 | |
|     """Hold data for installed Add-ons inside Hass.io."""
 | |
| 
 | |
|     def __init__(self, coresys: CoreSys):
 | |
|         """Initialize data holder."""
 | |
|         super().__init__(FILE_HASSIO_ADDONS, SCHEMA_ADDONS_FILE)
 | |
|         self.coresys: CoreSys = coresys
 | |
| 
 | |
|     @property
 | |
|     def user(self):
 | |
|         """Return local add-on user data."""
 | |
|         return self._data[ATTR_USER]
 | |
| 
 | |
|     @property
 | |
|     def system(self):
 | |
|         """Return local add-on data."""
 | |
|         return self._data[ATTR_SYSTEM]
 | |
| 
 | |
|     def install(self, addon: AddonStore) -> None:
 | |
|         """Set addon as installed."""
 | |
|         self.system[addon.slug] = deepcopy(addon.data)
 | |
|         self.user[addon.slug] = {
 | |
|             ATTR_OPTIONS: {},
 | |
|             ATTR_VERSION: addon.version,
 | |
|             ATTR_IMAGE: addon.image,
 | |
|         }
 | |
|         self.save_data()
 | |
| 
 | |
|     def uninstall(self, addon: Addon) -> None:
 | |
|         """Set add-on as uninstalled."""
 | |
|         self.system.pop(addon.slug, None)
 | |
|         self.user.pop(addon.slug, None)
 | |
|         self.save_data()
 | |
| 
 | |
|     def update(self, addon: AddonStore) -> None:
 | |
|         """Update version of add-on."""
 | |
|         self.system[addon.slug] = deepcopy(addon.data)
 | |
|         self.user[addon.slug].update({
 | |
|             ATTR_VERSION: addon.version,
 | |
|             ATTR_IMAGE: addon.image,
 | |
|         })
 | |
|         self.save_data()
 | |
| 
 | |
|     def restore(self, slug: str, user: Config, system: Config, image: str) -> None:
 | |
|         """Restore data to add-on."""
 | |
|         self.user[slug] = deepcopy(user)
 | |
|         self.system[slug] = deepcopy(system)
 | |
| 
 | |
|         self.user[slug][ATTR_IMAGE] = image
 | |
|         self.save_data()
 |