From f7ed1c801c25be629d646068306282958898019f Mon Sep 17 00:00:00 2001 From: Andrew Senetar Date: Mon, 9 May 2022 01:15:25 -0500 Subject: [PATCH] Add type hinting to desktop.py --- core/app.py | 2 +- hscommon/desktop.py | 32 +++++++++++++++++++------------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/core/app.py b/core/app.py index 3ca97823..bc2ff4e9 100644 --- a/core/app.py +++ b/core/app.py @@ -134,7 +134,7 @@ class DupeGuru(Broadcaster): logging.debug("Debug mode enabled") Broadcaster.__init__(self) self.view = view - self.appdata = desktop.special_folder_path(desktop.SpecialFolder.APPDATA, appname=self.NAME, portable=portable) + self.appdata = desktop.special_folder_path(desktop.SpecialFolder.APPDATA, portable=portable) if not op.exists(self.appdata): os.makedirs(self.appdata) self.app_mode = AppMode.STANDARD diff --git a/hscommon/desktop.py b/hscommon/desktop.py index 01b2b7c0..09cbdc7d 100644 --- a/hscommon/desktop.py +++ b/hscommon/desktop.py @@ -6,31 +6,33 @@ # which should be included with this package. The terms are also available at # http://www.gnu.org/licenses/gpl-3.0.html +from enum import Enum +from os import PathLike import os.path as op import logging -class SpecialFolder: +class SpecialFolder(Enum): APPDATA = 1 CACHE = 2 -def open_url(url): +def open_url(url: str) -> None: """Open ``url`` with the default browser.""" _open_url(url) -def open_path(path): +def open_path(path: PathLike) -> None: """Open ``path`` with its associated application.""" _open_path(str(path)) -def reveal_path(path): +def reveal_path(path: PathLike) -> None: """Open the folder containing ``path`` with the default file browser.""" _reveal_path(str(path)) -def special_folder_path(special_folder, appname=None, portable=False): +def special_folder_path(special_folder: SpecialFolder, portable: bool = False) -> str: """Returns the path of ``special_folder``. ``special_folder`` is a SpecialFolder.* const. The result is the special folder for the current @@ -38,7 +40,7 @@ def special_folder_path(special_folder, appname=None, portable=False): You can override the application name with ``appname``. This argument is ingored under Qt. """ - return _special_folder_path(special_folder, appname, portable=portable) + return _special_folder_path(special_folder, portable=portable) try: @@ -49,14 +51,14 @@ try: from hscommon.plat import ISWINDOWS, ISOSX import subprocess - def _open_url(url): + def _open_url(url: str) -> None: QDesktopServices.openUrl(QUrl(url)) - def _open_path(path): + def _open_path(path: str) -> None: url = QUrl.fromLocalFile(str(path)) QDesktopServices.openUrl(url) - def _reveal_path(path): + def _reveal_path(path: str) -> None: if ISWINDOWS: subprocess.run(["explorer", "/select,", op.abspath(path)]) elif ISOSX: @@ -64,7 +66,7 @@ try: else: _open_path(op.dirname(str(path))) - def _special_folder_path(special_folder, appname=None, portable=False): + def _special_folder_path(special_folder: SpecialFolder, portable: bool = False) -> str: if special_folder == SpecialFolder.CACHE: if ISWINDOWS and portable: folder = op.join(executable_folder(), "cache") @@ -79,13 +81,17 @@ except ImportError: # weird situation. Let's just have dummy fallbacks. logging.warning("Can't setup desktop functions!") - def _open_path(path): + def _open_url(url: str) -> None: # Dummy for tests pass - def _reveal_path(path): + def _open_path(path: str) -> None: # Dummy for tests pass - def _special_folder_path(special_folder, appname=None, portable=False): + def _reveal_path(path: str) -> None: + # Dummy for tests + pass + + def _special_folder_path(special_folder: SpecialFolder, portable: bool = False) -> str: return "/tmp"