From: Aleš Mrázek Date: Mon, 13 Jan 2025 21:45:16 +0000 (+0100) Subject: datamodel: types: files: handle PermissionError X-Git-Tag: v6.0.10~4^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fenvironments%2Fdocs-develop-tls-vy3sei%2Fdeployments%2F6032;p=thirdparty%2Fknot-resolver.git datamodel: types: files: handle PermissionError --- diff --git a/python/knot_resolver/datamodel/types/files.py b/python/knot_resolver/datamodel/types/files.py index 2d22d075a..9e326999b 100644 --- a/python/knot_resolver/datamodel/types/files.py +++ b/python/knot_resolver/datamodel/types/files.py @@ -89,9 +89,12 @@ class Dir(UncheckedPath): def __init__( self, source_value: Any, parents: Tuple["UncheckedPath", ...] = tuple(), object_path: str = "/" ) -> None: - super().__init__(source_value, parents=parents, object_path=object_path) - if self.strict_validation and not self._value.is_dir(): - raise ValueError(f"path '{self._value}' does not point to an existing directory") + try: + super().__init__(source_value, parents=parents, object_path=object_path) + if self.strict_validation and not self._value.is_dir(): + raise ValueError(f"path '{self._value}' does not point to an existing directory") + except PermissionError as e: + raise ValueError(str(e)) from e class AbsoluteDir(Dir): @@ -118,11 +121,14 @@ class File(UncheckedPath): def __init__( self, source_value: Any, parents: Tuple["UncheckedPath", ...] = tuple(), object_path: str = "/" ) -> None: - super().__init__(source_value, parents=parents, object_path=object_path) - if self.strict_validation and not self._value.exists(): - raise ValueError(f"file '{self._value}' does not exist") - if self.strict_validation and not self._value.is_file(): - raise ValueError(f"path '{self._value}' is not a file") + try: + super().__init__(source_value, parents=parents, object_path=object_path) + if self.strict_validation and not self._value.exists(): + raise ValueError(f"file '{self._value}' does not exist") + if self.strict_validation and not self._value.is_file(): + raise ValueError(f"path '{self._value}' is not a file") + except PermissionError as e: + raise ValueError(str(e)) from e class FilePath(UncheckedPath): @@ -135,13 +141,15 @@ class FilePath(UncheckedPath): def __init__( self, source_value: Any, parents: Tuple["UncheckedPath", ...] = tuple(), object_path: str = "/" ) -> None: - super().__init__(source_value, parents=parents, object_path=object_path) - p = self._value.parent - if self.strict_validation and (not p.exists() or not p.is_dir()): - raise ValueError(f"path '{self._value}' does not point inside an existing directory") - - if self.strict_validation and self._value.is_dir(): - raise ValueError(f"path '{self._value}' points to a directory when we expected a file") + try: + super().__init__(source_value, parents=parents, object_path=object_path) + p = self._value.parent + if self.strict_validation and (not p.exists() or not p.is_dir()): + raise ValueError(f"path '{self._value}' does not point inside an existing directory") + if self.strict_validation and self._value.is_dir(): + raise ValueError(f"path '{self._value}' points to a directory when we expected a file") + except PermissionError as e: + raise ValueError(str(e)) from e class _PermissionMode(Flag):