diff --git a/supervisor/addons/__init__.py b/supervisor/addons/__init__.py index 7518f4dcf..8413f1ef7 100644 --- a/supervisor/addons/__init__.py +++ b/supervisor/addons/__init__.py @@ -155,7 +155,7 @@ class AddonManager(CoreSysAttributes): await addon.instance.install(store.version, store.image) except DockerAPIError: self.data.uninstall(addon) - raise AddonsError() from None + raise AddonsError() else: self.local[slug] = addon @@ -175,7 +175,7 @@ class AddonManager(CoreSysAttributes): try: await addon.instance.remove() except DockerAPIError: - raise AddonsError() from None + raise AddonsError() await addon.remove_data() @@ -246,7 +246,7 @@ class AddonManager(CoreSysAttributes): with suppress(DockerAPIError): await addon.instance.cleanup() except DockerAPIError: - raise AddonsError() from None + raise AddonsError() else: self.data.update(store) _LOGGER.info("Add-on '%s' successfully updated", slug) @@ -284,7 +284,7 @@ class AddonManager(CoreSysAttributes): await addon.instance.remove() await addon.instance.install(addon.version) except DockerAPIError: - raise AddonsError() from None + raise AddonsError() else: self.data.update(store) _LOGGER.info("Add-on '%s' successfully rebuilt", slug) diff --git a/supervisor/addons/addon.py b/supervisor/addons/addon.py index bf36430d1..00b2d9690 100644 --- a/supervisor/addons/addon.py +++ b/supervisor/addons/addon.py @@ -489,14 +489,14 @@ class Addon(AddonModel): try: await self.instance.run() except DockerAPIError: - raise AddonsError() from None + raise AddonsError() async def stop(self) -> None: """Stop add-on.""" try: return await self.instance.stop() except DockerAPIError: - raise AddonsError() from None + raise AddonsError() async def restart(self) -> None: """Restart add-on.""" @@ -516,7 +516,7 @@ class Addon(AddonModel): try: return await self.instance.stats() except DockerAPIError: - raise AddonsError() from None + raise AddonsError() async def write_stdin(self, data) -> None: """Write data to add-on stdin. @@ -530,7 +530,7 @@ class Addon(AddonModel): try: return await self.instance.write_stdin(data) except DockerAPIError: - raise AddonsError() from None + raise AddonsError() async def snapshot(self, tar_file: tarfile.TarFile) -> None: """Snapshot state of an add-on.""" @@ -542,7 +542,7 @@ class Addon(AddonModel): try: await self.instance.export_image(temp_path.joinpath("image.tar")) except DockerAPIError: - raise AddonsError() from None + raise AddonsError() data = { ATTR_USER: self.persist, @@ -556,7 +556,7 @@ class Addon(AddonModel): write_json_file(temp_path.joinpath("addon.json"), data) except JsonFileError: _LOGGER.error("Can't save meta for %s", self.slug) - raise AddonsError() from None + raise AddonsError() # Store AppArmor Profile if self.sys_host.apparmor.exists(self.slug): @@ -565,7 +565,7 @@ class Addon(AddonModel): self.sys_host.apparmor.backup_profile(self.slug, profile) except HostAppArmorError: _LOGGER.error("Can't backup AppArmor profile") - raise AddonsError() from None + raise AddonsError() # write into tarfile def _write_tarfile(): @@ -588,7 +588,7 @@ class Addon(AddonModel): await self.sys_run_in_executor(_write_tarfile) except (tarfile.TarError, OSError) as err: _LOGGER.error("Can't write tarfile %s: %s", tar_file, err) - raise AddonsError() from None + raise AddonsError() _LOGGER.info("Finish snapshot for addon %s", self.slug) @@ -605,13 +605,13 @@ class Addon(AddonModel): await self.sys_run_in_executor(_extract_tarfile) except tarfile.TarError as err: _LOGGER.error("Can't read tarfile %s: %s", tar_file, err) - raise AddonsError() from None + raise AddonsError() # Read snapshot data try: data = read_json_file(Path(temp, "addon.json")) except JsonFileError: - raise AddonsError() from None + raise AddonsError() # Validate try: @@ -622,7 +622,7 @@ class Addon(AddonModel): self.slug, humanize_error(data, err), ) - raise AddonsError() from None + raise AddonsError() # If available if not self._available(data[ATTR_SYSTEM]): @@ -669,7 +669,7 @@ class Addon(AddonModel): await self.sys_run_in_executor(_restore_data) except shutil.Error as err: _LOGGER.error("Can't restore origin data: %s", err) - raise AddonsError() from None + raise AddonsError() # Restore AppArmor profile_file = Path(temp, "apparmor.txt") @@ -680,7 +680,7 @@ class Addon(AddonModel): _LOGGER.error( "Can't restore AppArmor profile for add-on %s", self.slug ) - raise AddonsError() from None + raise AddonsError() # Run add-on if data[ATTR_STATE] == STATE_STARTED: diff --git a/supervisor/addons/validate.py b/supervisor/addons/validate.py index e022897b4..0ae589027 100644 --- a/supervisor/addons/validate.py +++ b/supervisor/addons/validate.py @@ -362,7 +362,7 @@ def validate_options(coresys: CoreSys, raw_schema: Dict[str, Any]): # normal value options[key] = _single_validate(coresys, typ, value, key) except (IndexError, KeyError): - raise vol.Invalid(f"Type error for {key}") from None + raise vol.Invalid(f"Type error for {key}") _check_missing_options(raw_schema, options, "root") return options diff --git a/supervisor/api/ingress.py b/supervisor/api/ingress.py index c828b50a3..fc8f84d36 100644 --- a/supervisor/api/ingress.py +++ b/supervisor/api/ingress.py @@ -104,7 +104,7 @@ class APIIngress(CoreSysAttributes): except aiohttp.ClientError as err: _LOGGER.error("Ingress error: %s", err) - raise HTTPBadGateway() from None + raise HTTPBadGateway() async def _handle_websocket( self, request: web.Request, addon: Addon, path: str diff --git a/supervisor/api/utils.py b/supervisor/api/utils.py index f44966107..063164358 100644 --- a/supervisor/api/utils.py +++ b/supervisor/api/utils.py @@ -120,7 +120,7 @@ async def api_validate( try: data_validated = schema(data) except vol.Invalid as ex: - raise APIError(humanize_error(data, ex)) from None + raise APIError(humanize_error(data, ex)) if not origin: return data_validated diff --git a/supervisor/discovery/__init__.py b/supervisor/discovery/__init__.py index 060b90528..cc2dca688 100644 --- a/supervisor/discovery/__init__.py +++ b/supervisor/discovery/__init__.py @@ -79,7 +79,7 @@ class Discovery(CoreSysAttributes, JsonConfig): config = valid_discovery_config(service, config) except vol.Invalid as err: _LOGGER.error("Invalid discovery %s config", humanize_error(config, err)) - raise DiscoveryError() from None + raise DiscoveryError() # Create message message = Message(addon.slug, service, config) diff --git a/supervisor/docker/__init__.py b/supervisor/docker/__init__.py index dfc5b59ca..06fabbe9d 100644 --- a/supervisor/docker/__init__.py +++ b/supervisor/docker/__init__.py @@ -130,7 +130,7 @@ class DockerAPI: ) except docker.errors.DockerException as err: _LOGGER.error("Can't create container from %s: %s", name, err) - raise DockerAPIError() from None + raise DockerAPIError() # Attach network if not network_mode: @@ -148,7 +148,7 @@ class DockerAPI: container.start() except docker.errors.DockerException as err: _LOGGER.error("Can't start %s: %s", name, err) - raise DockerAPIError() from None + raise DockerAPIError() # Update metadata with suppress(docker.errors.DockerException): @@ -186,7 +186,7 @@ class DockerAPI: except docker.errors.DockerException as err: _LOGGER.error("Can't execute command: %s", err) - raise DockerAPIError() from None + raise DockerAPIError() finally: # cleanup container diff --git a/supervisor/docker/addon.py b/supervisor/docker/addon.py index 939764b42..df8580ad8 100644 --- a/supervisor/docker/addon.py +++ b/supervisor/docker/addon.py @@ -398,7 +398,7 @@ class DockerAddon(DockerInterface): except docker.errors.DockerException as err: _LOGGER.error("Can't build %s:%s: %s", self.image, tag, err) - raise DockerAPIError() from None + raise DockerAPIError() _LOGGER.info("Build %s:%s done", self.image, tag) @@ -416,7 +416,7 @@ class DockerAddon(DockerInterface): image = self.sys_docker.api.get_image(f"{self.image}:{self.version}") except docker.errors.DockerException as err: _LOGGER.error("Can't fetch image %s: %s", self.image, err) - raise DockerAPIError() from None + raise DockerAPIError() _LOGGER.info("Export image %s to %s", self.image, tar_file) try: @@ -425,7 +425,7 @@ class DockerAddon(DockerInterface): write_tar.write(chunk) except (OSError, requests.exceptions.ReadTimeout) as err: _LOGGER.error("Can't write tar file %s: %s", tar_file, err) - raise DockerAPIError() from None + raise DockerAPIError() _LOGGER.info("Export image %s done", self.image) @@ -446,7 +446,7 @@ class DockerAddon(DockerInterface): docker_image = self.sys_docker.images.get(f"{self.image}:{self.version}") except (docker.errors.DockerException, OSError) as err: _LOGGER.error("Can't import image %s: %s", self.image, err) - raise DockerAPIError() from None + raise DockerAPIError() self._meta = docker_image.attrs _LOGGER.info("Import image %s and version %s", tar_file, self.version) @@ -465,7 +465,7 @@ class DockerAddon(DockerInterface): Need run inside executor. """ if not self._is_running(): - raise DockerAPIError() from None + raise DockerAPIError() try: # Load needed docker objects @@ -473,7 +473,7 @@ class DockerAddon(DockerInterface): socket = container.attach_socket(params={"stdin": 1, "stream": 1}) except docker.errors.DockerException as err: _LOGGER.error("Can't attach to %s stdin: %s", self.name, err) - raise DockerAPIError() from None + raise DockerAPIError() try: # Write to stdin @@ -482,7 +482,7 @@ class DockerAddon(DockerInterface): socket.close() except OSError as err: _LOGGER.error("Can't write to %s stdin: %s", self.name, err) - raise DockerAPIError() from None + raise DockerAPIError() def _stop(self, remove_container=True) -> None: """Stop/remove Docker container. diff --git a/supervisor/docker/interface.py b/supervisor/docker/interface.py index 0a7711ed0..85da16e90 100644 --- a/supervisor/docker/interface.py +++ b/supervisor/docker/interface.py @@ -106,7 +106,7 @@ class DockerInterface(CoreSysAttributes): "Available space in /data is: %s GiB", free_space, ) - raise DockerAPIError() from None + raise DockerAPIError() else: self._meta = docker_image.attrs @@ -162,7 +162,7 @@ class DockerInterface(CoreSysAttributes): # Successfull? if not self._meta: - raise DockerAPIError() from None + raise DockerAPIError() _LOGGER.info("Attach to %s with version %s", self.image, self.version) @process_lock @@ -190,7 +190,7 @@ class DockerInterface(CoreSysAttributes): try: docker_container = self.sys_docker.containers.get(self.name) except docker.errors.DockerException: - raise DockerAPIError() from None + raise DockerAPIError() if docker_container.status == "running": _LOGGER.info("Stop %s application", self.name) @@ -215,14 +215,14 @@ class DockerInterface(CoreSysAttributes): try: docker_container = self.sys_docker.containers.get(self.name) except docker.errors.DockerException: - raise DockerAPIError() from None + raise DockerAPIError() _LOGGER.info("Start %s", self.name) try: docker_container.start() except docker.errors.DockerException as err: _LOGGER.error("Can't start %s: %s", self.name, err) - raise DockerAPIError() from None + raise DockerAPIError() @process_lock def remove(self) -> Awaitable[None]: @@ -251,7 +251,7 @@ class DockerInterface(CoreSysAttributes): except docker.errors.DockerException as err: _LOGGER.warning("Can't remove image %s: %s", self.image, err) - raise DockerAPIError() from None + raise DockerAPIError() self._meta = None @@ -320,7 +320,7 @@ class DockerInterface(CoreSysAttributes): origin = self.sys_docker.images.get(f"{self.image}:{self.version}") except docker.errors.DockerException: _LOGGER.warning("Can't find %s for cleanup", self.image) - raise DockerAPIError() from None + raise DockerAPIError() # Cleanup Current for image in self.sys_docker.images.list(name=self.image): @@ -353,14 +353,14 @@ class DockerInterface(CoreSysAttributes): try: container = self.sys_docker.containers.get(self.name) except docker.errors.DockerException: - raise DockerAPIError() from None + raise DockerAPIError() _LOGGER.info("Restart %s", self.image) try: container.restart(timeout=self.timeout) except docker.errors.DockerException as err: _LOGGER.warning("Can't restart %s: %s", self.image, err) - raise DockerAPIError() from None + raise DockerAPIError() @process_lock def execute_command(self, command: str) -> Awaitable[CommandReturn]: @@ -386,14 +386,14 @@ class DockerInterface(CoreSysAttributes): try: docker_container = self.sys_docker.containers.get(self.name) except docker.errors.DockerException: - raise DockerAPIError() from None + raise DockerAPIError() try: stats = docker_container.stats(stream=False) return DockerStats(stats) except docker.errors.DockerException as err: _LOGGER.error("Can't read stats from %s: %s", self.name, err) - raise DockerAPIError() from None + raise DockerAPIError() def is_fails(self) -> Awaitable[bool]: """Return True if Docker is failing state. diff --git a/supervisor/docker/network.py b/supervisor/docker/network.py index fc4e98df9..dc683c714 100644 --- a/supervisor/docker/network.py +++ b/supervisor/docker/network.py @@ -105,7 +105,7 @@ class DockerNetwork: self.network.connect(container, aliases=alias, ipv4_address=ipv4_address) except docker.errors.APIError as err: _LOGGER.error("Can't link container to hassio-net: %s", err) - raise DockerAPIError() from None + raise DockerAPIError() self.network.reload() @@ -125,7 +125,7 @@ class DockerNetwork: except docker.errors.APIError as err: _LOGGER.warning("Can't disconnect container from default: %s", err) - raise DockerAPIError() from None + raise DockerAPIError() def stale_cleanup(self, container_name: str): """Remove force a container from Network. diff --git a/supervisor/docker/supervisor.py b/supervisor/docker/supervisor.py index d1f110c6e..88ff24977 100644 --- a/supervisor/docker/supervisor.py +++ b/supervisor/docker/supervisor.py @@ -39,7 +39,7 @@ class DockerSupervisor(DockerInterface, CoreSysAttributes): try: docker_container = self.sys_docker.containers.get(self.name) except docker.errors.DockerException: - raise DockerAPIError() from None + raise DockerAPIError() self._meta = docker_container.attrs _LOGGER.info( @@ -76,7 +76,7 @@ class DockerSupervisor(DockerInterface, CoreSysAttributes): docker_container.image.tag(self.image, tag="latest") except docker.errors.DockerException as err: _LOGGER.error("Can't retag supervisor version: %s", err) - raise DockerAPIError() from None + raise DockerAPIError() def update_start_tag(self, image: str, version: str) -> Awaitable[None]: """Update start tag to new version.""" @@ -103,4 +103,4 @@ class DockerSupervisor(DockerInterface, CoreSysAttributes): except docker.errors.DockerException as err: _LOGGER.error("Can't fix start tag: %s", err) - raise DockerAPIError() from None + raise DockerAPIError() diff --git a/supervisor/hassos.py b/supervisor/hassos.py index ee3bb2c95..0f11cd0d2 100644 --- a/supervisor/hassos.py +++ b/supervisor/hassos.py @@ -142,7 +142,7 @@ class HassOS(CoreSysAttributes): except DBusError: _LOGGER.error("Rauc communication error") - raise HassOSUpdateError() from None + raise HassOSUpdateError() finally: int_ota.unlink() diff --git a/supervisor/homeassistant.py b/supervisor/homeassistant.py index 2cc080519..6826f72f4 100644 --- a/supervisor/homeassistant.py +++ b/supervisor/homeassistant.py @@ -344,7 +344,7 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): ) except DockerAPIError: _LOGGER.warning("Update Home Assistant image fails") - raise HomeAssistantUpdateError() from None + raise HomeAssistantUpdateError() else: self.version = self.instance.version self.image = self.sys_updater.image_homeassistant @@ -393,7 +393,7 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): try: await self.instance.run() except DockerAPIError: - raise HomeAssistantError() from None + raise HomeAssistantError() await self._block_till_run(self.version) @@ -409,7 +409,7 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): try: await self.instance.start() except DockerAPIError: - raise HomeAssistantError() from None + raise HomeAssistantError() await self._block_till_run(self.version) # No Instance/Container found, extended start @@ -425,7 +425,7 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): try: return await self.instance.stop(remove_container=False) except DockerAPIError: - raise HomeAssistantError() from None + raise HomeAssistantError() @process_lock async def restart(self) -> None: @@ -433,7 +433,7 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): try: await self.instance.restart() except DockerAPIError: - raise HomeAssistantError() from None + raise HomeAssistantError() await self._block_till_run(self.version) @@ -459,7 +459,7 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): try: return await self.instance.stats() except DockerAPIError: - raise HomeAssistantError() from None + raise HomeAssistantError() def is_running(self) -> Awaitable[bool]: """Return True if Docker container is running. diff --git a/supervisor/host/apparmor.py b/supervisor/host/apparmor.py index 87248cf69..bb7422920 100644 --- a/supervisor/host/apparmor.py +++ b/supervisor/host/apparmor.py @@ -76,7 +76,7 @@ class AppArmorControl(CoreSysAttributes): shutil.copyfile(profile_file, dest_profile) except OSError as err: _LOGGER.error("Can't copy %s: %s", profile_file, err) - raise HostAppArmorError() from None + raise HostAppArmorError() # Load profiles _LOGGER.info("Add or Update AppArmor profile: %s", profile_name) diff --git a/supervisor/host/info.py b/supervisor/host/info.py index 26569b213..9aebbe7e8 100644 --- a/supervisor/host/info.py +++ b/supervisor/host/info.py @@ -96,4 +96,4 @@ class InfoCenter(CoreSysAttributes): _LOGGER.warning("Can't update host system information!") except DBusNotConnectedError: _LOGGER.error("No hostname D-Bus connection available") - raise HostNotSupportedError() from None + raise HostNotSupportedError() diff --git a/supervisor/host/network.py b/supervisor/host/network.py index 020b10d8b..f51cc655a 100644 --- a/supervisor/host/network.py +++ b/supervisor/host/network.py @@ -36,4 +36,4 @@ class NetworkManager(CoreSysAttributes): _LOGGER.warning("Can't update host DNS system information!") except DBusNotConnectedError: _LOGGER.error("No hostname D-Bus connection available") - raise HostNotSupportedError() from None + raise HostNotSupportedError() diff --git a/supervisor/host/sound.py b/supervisor/host/sound.py index c4097f287..6a779ced4 100644 --- a/supervisor/host/sound.py +++ b/supervisor/host/sound.py @@ -117,10 +117,10 @@ class SoundControl(CoreSysAttributes): except PulseIndexError: _LOGGER.error("Can't find %s stream %s", source, name) - raise PulseAudioError() from None + raise PulseAudioError() except PulseError as err: _LOGGER.error("Can't set %s as stream: %s", name, err) - raise PulseAudioError() from None + raise PulseAudioError() # Run and Reload data await self.sys_run_in_executor(_set_default) @@ -151,10 +151,10 @@ class SoundControl(CoreSysAttributes): _LOGGER.error( "Can't find %s stream %d (App: %s)", stream_type, index, application ) - raise PulseAudioError() from None + raise PulseAudioError() except PulseError as err: _LOGGER.error("Can't set %d volume: %s", index, err) - raise PulseAudioError() from None + raise PulseAudioError() # Run and Reload data await self.sys_run_in_executor(_set_volume) @@ -185,10 +185,10 @@ class SoundControl(CoreSysAttributes): _LOGGER.error( "Can't find %s stream %d (App: %s)", stream_type, index, application ) - raise PulseAudioError() from None + raise PulseAudioError() except PulseError as err: _LOGGER.error("Can't set %d volume: %s", index, err) - raise PulseAudioError() from None + raise PulseAudioError() # Run and Reload data await self.sys_run_in_executor(_set_mute) @@ -205,12 +205,12 @@ class SoundControl(CoreSysAttributes): except PulseIndexError: _LOGGER.error("Can't find %s profile %s", card_name, profile_name) - raise PulseAudioError() from None + raise PulseAudioError() except PulseError as err: _LOGGER.error( "Can't activate %s profile %s: %s", card_name, profile_name, err ) - raise PulseAudioError() from None + raise PulseAudioError() # Run and Reload data await self.sys_run_in_executor(_activate_profile) @@ -331,7 +331,7 @@ class SoundControl(CoreSysAttributes): except PulseOperationFailed as err: _LOGGER.error("Error while processing pulse update: %s", err) - raise PulseAudioError() from None + raise PulseAudioError() except PulseError as err: _LOGGER.debug("Can't update PulseAudio data: %s", err) diff --git a/supervisor/plugins/audio.py b/supervisor/plugins/audio.py index 6e2e298eb..ab333486a 100644 --- a/supervisor/plugins/audio.py +++ b/supervisor/plugins/audio.py @@ -156,7 +156,7 @@ class Audio(JsonConfig, CoreSysAttributes): await self.instance.update(version, image=self.sys_updater.image_audio) except DockerAPIError: _LOGGER.error("Audio update fails") - raise AudioUpdateError() from None + raise AudioUpdateError() else: self.version = version self.image = self.sys_updater.image_audio @@ -176,7 +176,7 @@ class Audio(JsonConfig, CoreSysAttributes): await self.instance.restart() except DockerAPIError: _LOGGER.error("Can't start Audio plugin") - raise AudioError() from None + raise AudioError() async def start(self) -> None: """Run CoreDNS.""" @@ -185,7 +185,7 @@ class Audio(JsonConfig, CoreSysAttributes): await self.instance.run() except DockerAPIError: _LOGGER.error("Can't start Audio plugin") - raise AudioError() from None + raise AudioError() async def stop(self) -> None: """Stop CoreDNS.""" @@ -194,7 +194,7 @@ class Audio(JsonConfig, CoreSysAttributes): await self.instance.stop() except DockerAPIError: _LOGGER.error("Can't stop Audio plugin") - raise AudioError() from None + raise AudioError() def logs(self) -> Awaitable[bytes]: """Get CoreDNS docker logs. @@ -208,7 +208,7 @@ class Audio(JsonConfig, CoreSysAttributes): try: return await self.instance.stats() except DockerAPIError: - raise AudioError() from None + raise AudioError() def is_running(self) -> Awaitable[bool]: """Return True if Docker container is running. diff --git a/supervisor/plugins/cli.py b/supervisor/plugins/cli.py index a26e0ee94..dc1d23e7c 100644 --- a/supervisor/plugins/cli.py +++ b/supervisor/plugins/cli.py @@ -134,7 +134,7 @@ class HaCli(CoreSysAttributes, JsonConfig): ) except DockerAPIError: _LOGGER.error("HA cli update fails") - raise CliUpdateError() from None + raise CliUpdateError() else: self.version = version self.image = self.sys_updater.image_cli @@ -159,7 +159,7 @@ class HaCli(CoreSysAttributes, JsonConfig): await self.instance.run() except DockerAPIError: _LOGGER.error("Can't start cli plugin") - raise CliError() from None + raise CliError() async def stop(self) -> None: """Stop cli.""" @@ -168,14 +168,14 @@ class HaCli(CoreSysAttributes, JsonConfig): await self.instance.stop() except DockerAPIError: _LOGGER.error("Can't stop cli plugin") - raise CliError() from None + raise CliError() async def stats(self) -> DockerStats: """Return stats of cli.""" try: return await self.instance.stats() except DockerAPIError: - raise CliError() from None + raise CliError() def is_running(self) -> Awaitable[bool]: """Return True if Docker container is running. diff --git a/supervisor/plugins/dns.py b/supervisor/plugins/dns.py index ecd8b1342..6718513b5 100644 --- a/supervisor/plugins/dns.py +++ b/supervisor/plugins/dns.py @@ -207,7 +207,7 @@ class CoreDNS(JsonConfig, CoreSysAttributes): await self.instance.update(version, image=self.sys_updater.image_dns) except DockerAPIError: _LOGGER.error("CoreDNS update fails") - raise CoreDNSUpdateError() from None + raise CoreDNSUpdateError() else: self.version = version self.image = self.sys_updater.image_dns @@ -240,7 +240,7 @@ class CoreDNS(JsonConfig, CoreSysAttributes): await self.instance.run() except DockerAPIError: _LOGGER.error("Can't start CoreDNS plugin") - raise CoreDNSError() from None + raise CoreDNSError() async def stop(self) -> None: """Stop CoreDNS.""" @@ -249,7 +249,7 @@ class CoreDNS(JsonConfig, CoreSysAttributes): await self.instance.stop() except DockerAPIError: _LOGGER.error("Can't stop CoreDNS plugin") - raise CoreDNSError() from None + raise CoreDNSError() async def reset(self) -> None: """Reset DNS and hosts.""" @@ -316,7 +316,7 @@ class CoreDNS(JsonConfig, CoreSysAttributes): self.corefile.write_text(data) except OSError as err: _LOGGER.error("Can't update corefile: %s", err) - raise CoreDNSError() from None + raise CoreDNSError() def _init_hosts(self) -> None: """Import hosts entry.""" @@ -340,7 +340,7 @@ class CoreDNS(JsonConfig, CoreSysAttributes): hosts.write(f"{entry.ip_address!s} {' '.join(entry.names)}\n") except OSError as err: _LOGGER.error("Can't write hosts file: %s", err) - raise CoreDNSError() from None + raise CoreDNSError() def add_host(self, ipv4: IPv4Address, names: List[str], write: bool = True) -> None: """Add a new host entry.""" @@ -404,7 +404,7 @@ class CoreDNS(JsonConfig, CoreSysAttributes): try: return await self.instance.stats() except DockerAPIError: - raise CoreDNSError() from None + raise CoreDNSError() def is_running(self) -> Awaitable[bool]: """Return True if Docker container is running. diff --git a/supervisor/plugins/multicast.py b/supervisor/plugins/multicast.py index c02974679..d8cf416d4 100644 --- a/supervisor/plugins/multicast.py +++ b/supervisor/plugins/multicast.py @@ -129,7 +129,7 @@ class Multicast(JsonConfig, CoreSysAttributes): await self.instance.update(version, image=self.sys_updater.image_multicast) except DockerAPIError: _LOGGER.error("Multicast update fails") - raise MulticastUpdateError() from None + raise MulticastUpdateError() else: self.version = version self.image = self.sys_updater.image_multicast @@ -181,7 +181,7 @@ class Multicast(JsonConfig, CoreSysAttributes): try: return await self.instance.stats() except DockerAPIError: - raise MulticastError() from None + raise MulticastError() def is_running(self) -> Awaitable[bool]: """Return True if Docker container is running. diff --git a/supervisor/snapshots/snapshot.py b/supervisor/snapshots/snapshot.py index 5f46db977..721af02ea 100644 --- a/supervisor/snapshots/snapshot.py +++ b/supervisor/snapshots/snapshot.py @@ -277,7 +277,7 @@ class Snapshot(CoreSysAttributes): _LOGGER.error( "Invalid data for %s: %s", self.tarfile, humanize_error(self._data, err) ) - raise ValueError("Invalid config") from None + raise ValueError("Invalid config") # new snapshot, build it def _create_snapshot(): diff --git a/supervisor/supervisor.py b/supervisor/supervisor.py index 02cd7ce9d..cd387d0aa 100644 --- a/supervisor/supervisor.py +++ b/supervisor/supervisor.py @@ -87,7 +87,7 @@ class Supervisor(CoreSysAttributes): except (aiohttp.ClientError, asyncio.TimeoutError) as err: _LOGGER.warning("Can't fetch AppArmor profile: %s", err) - raise SupervisorError() from None + raise SupervisorError() with TemporaryDirectory(dir=self.sys_config.path_tmp) as tmp_dir: profile_file = Path(tmp_dir, "apparmor.txt") @@ -95,7 +95,7 @@ class Supervisor(CoreSysAttributes): profile_file.write_text(data) except OSError as err: _LOGGER.error("Can't write temporary profile: %s", err) - raise SupervisorError() from None + raise SupervisorError() try: await self.sys_host.apparmor.load_profile( @@ -103,7 +103,7 @@ class Supervisor(CoreSysAttributes): ) except HostAppArmorError: _LOGGER.error("Can't update AppArmor profile!") - raise SupervisorError() from None + raise SupervisorError() async def update(self, version: Optional[str] = None) -> None: """Update Home Assistant version.""" @@ -123,7 +123,7 @@ class Supervisor(CoreSysAttributes): ) except DockerAPIError: _LOGGER.error("Update of Supervisor fails!") - raise SupervisorUpdateError() from None + raise SupervisorUpdateError() else: self.sys_config.version = version self.sys_config.save_data() @@ -149,7 +149,7 @@ class Supervisor(CoreSysAttributes): try: return await self.instance.stats() except DockerAPIError: - raise SupervisorError() from None + raise SupervisorError() async def repair(self): """Repair local Supervisor data.""" diff --git a/supervisor/updater.py b/supervisor/updater.py index 0904dc164..d92ef0c68 100644 --- a/supervisor/updater.py +++ b/supervisor/updater.py @@ -158,16 +158,16 @@ class Updater(JsonConfig, CoreSysAttributes): except (aiohttp.ClientError, asyncio.TimeoutError) as err: _LOGGER.warning("Can't fetch versions from %s: %s", url, err) - raise HassioUpdaterError() from None + raise HassioUpdaterError() except json.JSONDecodeError as err: _LOGGER.warning("Can't parse versions from %s: %s", url, err) - raise HassioUpdaterError() from None + raise HassioUpdaterError() # data valid? if not data or data.get(ATTR_CHANNEL) != self.channel: _LOGGER.warning("Invalid data from %s", url) - raise HassioUpdaterError() from None + raise HassioUpdaterError() try: # Update supervisor version @@ -196,7 +196,7 @@ class Updater(JsonConfig, CoreSysAttributes): except KeyError as err: _LOGGER.warning("Can't process version data: %s", err) - raise HassioUpdaterError() from None + raise HassioUpdaterError() else: self.save_data() diff --git a/supervisor/utils/gdbus.py b/supervisor/utils/gdbus.py index 04b788433..6c68c8788 100644 --- a/supervisor/utils/gdbus.py +++ b/supervisor/utils/gdbus.py @@ -89,7 +89,7 @@ class DBus: except ET.ParseError as err: _LOGGER.error("Can't parse introspect data: %s", err) _LOGGER.debug("Introspect %s on %s", self.bus_name, self.object_path) - raise DBusParseError() from None + raise DBusParseError() # Read available methods for interface in xml.findall("./interface"): @@ -137,7 +137,7 @@ class DBus: except json.JSONDecodeError as err: _LOGGER.error("Can't parse '%s': %s", json_raw, err) _LOGGER.debug("GVariant data: '%s'", raw) - raise DBusParseError() from None + raise DBusParseError() @staticmethod def gvariant_args(args: List[Any]) -> str: @@ -179,7 +179,7 @@ class DBus: return (await self.call_dbus(DBUS_METHOD_GETALL, interface))[0] except IndexError: _LOGGER.error("No attributes returned for %s", interface) - raise DBusFatalError from None + raise DBusFatalError async def _send(self, command: List[str]) -> str: """Send command over dbus.""" @@ -196,7 +196,7 @@ class DBus: data, error = await proc.communicate() except OSError as err: _LOGGER.error("DBus fatal error: %s", err) - raise DBusFatalError() from None + raise DBusFatalError() # Success? if proc.returncode == 0: @@ -301,7 +301,7 @@ class DBusSignalWrapper: try: data = await self._proc.stdout.readline() except asyncio.TimeoutError: - raise StopAsyncIteration() from None + raise StopAsyncIteration() # Program close if not data: @@ -322,4 +322,4 @@ class DBusSignalWrapper: try: return self.dbus.parse_gvariant(data) except DBusParseError: - raise StopAsyncIteration() from None + raise StopAsyncIteration() diff --git a/supervisor/utils/json.py b/supervisor/utils/json.py index e69d612c2..8c6d50587 100644 --- a/supervisor/utils/json.py +++ b/supervisor/utils/json.py @@ -20,7 +20,7 @@ def write_json_file(jsonfile: Path, data: Any) -> None: jsonfile.write_text(json.dumps(data, indent=2)) except (OSError, ValueError, TypeError) as err: _LOGGER.error("Can't write %s: %s", jsonfile, err) - raise JsonFileError() from None + raise JsonFileError() def read_json_file(jsonfile: Path) -> Any: @@ -29,7 +29,7 @@ def read_json_file(jsonfile: Path) -> Any: return json.loads(jsonfile.read_text()) except (OSError, ValueError, TypeError, UnicodeDecodeError) as err: _LOGGER.error("Can't read json from %s: %s", jsonfile, err) - raise JsonFileError() from None + raise JsonFileError() class JsonConfig: diff --git a/supervisor/utils/validate.py b/supervisor/utils/validate.py index 886ab65c0..3c5b08365 100644 --- a/supervisor/utils/validate.py +++ b/supervisor/utils/validate.py @@ -24,6 +24,6 @@ def validate_timezone(timezone): raise vol.Invalid( "Invalid time zone passed in. Valid options can be found here: " "http://en.wikipedia.org/wiki/List_of_tz_database_time_zones" - ) from None + ) return timezone