PluginPipxInterface.py

changeset 1
d83409a59365
parent 0
aae19e6a65cd
child 2
26430067aa09
diff -r aae19e6a65cd -r d83409a59365 PluginPipxInterface.py
--- a/PluginPipxInterface.py	Mon Jun 24 14:07:05 2024 +0200
+++ b/PluginPipxInterface.py	Mon Jun 24 15:22:19 2024 +0200
@@ -0,0 +1,227 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the pipx Interface plug-in.
+"""
+
+import os
+import sysconfig
+
+from PyQt6.QtCore import QCoreApplication, QObject, QTranslator
+
+from eric7 import Preferences
+from eric7.EricWidgets.EricApplication import ericApp
+from eric7.SystemUtilities import OSUtilities
+
+# Start-Of-Header
+__header__ = {
+    "name": "pipx Interface",
+    "author": "Detlev Offenbach <detlev@die-offenbachs.de>",
+    "autoactivate": True,
+    "deactivateable": True,
+    "version": "10.0.0",
+    "className": "PluginPipxInterface",
+    "packageName": "PipxInterface",
+    "shortDescription": "Graphical interface to the 'pipx' command.",
+    "longDescription": (
+        "Plugin implementing widgets and dialogues to interact with the various pipx"
+        " commands and to start pipx managed applications from within the eric-ide."
+    ),
+    "needsRestart": False,
+    "pyqtApi": 2,
+}
+# End-Of-Header
+
+error = ""  # noqa: U200
+
+pipxInterfacePluginObject = None
+
+
+def exeDisplayData():
+    """
+    Module function to support the display of some executable info.
+
+    @return dictionary containing the data to query the presence of
+        the executable
+    @rtype dict
+    """
+    pipx = os.path.join(sysconfig.get_path("scripts"), "pipx")
+    if OSUtilities.isWindowsPlatform():
+        pipx += ".exe"
+
+    data = {
+        "programEntry": True,
+        "header": QCoreApplication.translate(
+            "PluginPipxInterface", "PyPI Application Management"
+        ), 
+        "exe": pipx,
+        "versionCommand": "--version",
+        "versionStartsWith": "",
+        "versionRe": None,
+        "versionPosition": -1,
+        "version": "",
+        "versionCleanup": None,
+        "exeModule": None,
+    }
+
+    return data
+
+
+def createPipxPage(
+    _configDlg,
+):
+    """
+    Module function to create the autocompletion configuration page.
+
+    @param _configDlg reference to the configuration dialog (unused)
+    @type ConfigurationWidget
+    @return reference to the configuration page
+    @rtype AutoCompletionRopePage
+    """
+    global pipxInterfacePluginObject
+    from PipxInterface.ConfigurationPage.PipxPage import PipxPage  # noqa: I101
+
+    page = PipxPage(pipxInterfacePluginObject)
+    return page
+
+
+def getConfigData():
+    """
+    Module function returning data as required by the configuration dialog.
+
+    @return dictionary containing the relevant data
+    @rtype dict
+    """
+    return {
+        "pipxPage": [
+            QCoreApplication.translate(
+                "PluginPipxInterface", "Python Application Management"
+            ),
+            os.path.join("PipxInterface", "icons", "pipx22"),
+            createPipxPage,
+            None,
+            None,
+        ],
+    }
+
+
+def prepareUninstall():
+    """
+    Module function to prepare for an un-installation.
+    """
+    Preferences.getSettings().remove(PluginPipxInterface.PreferencesKey)
+
+
+class PluginPipxInterface(QObject):
+    """
+    Class documentation goes here.
+    """
+
+    PreferencesKey = "Pipx"
+
+    def __init__(self, ui):
+        """
+        Constructor
+
+        @param ui reference to the user interface object
+        @type UI.UserInterface
+        """
+        super().__init__(ui)
+        self.__ui = ui
+        self.__initialize()
+
+        self.__defaults = {
+            # TODO: fill this dictionary with preferences default values
+        }
+
+        self.__translator = None
+        self.__loadTranslator()
+
+    def __initialize(self):
+        """
+        Private slot to (re)initialize the plugin.
+        """
+        self.__widget = None
+
+    def activate(self):
+        """
+        Public method to activate this plug-in.
+
+        @return tuple of None and activation status
+        @rtype bool
+        """
+        global error
+        error = ""  # clear previous error
+
+        return None, True
+
+    def deactivate(self):
+        """
+        Public method to deactivate this plug-in.
+        """
+        pass
+
+    def __loadTranslator(self):
+        """
+        Private method to load the translation file.
+        """
+        if self.__ui is not None:
+            loc = self.__ui.getLocale()
+            if loc and loc != "C":
+                locale_dir = os.path.join(
+                    os.path.dirname(__file__), "PipxInterface", "i18n"
+                )
+                translation = "pipx_{0}".format(loc)
+                translator = QTranslator(None)
+                loaded = translator.load(translation, locale_dir)
+                if loaded:
+                    self.__translator = translator
+                    ericApp().installTranslator(self.__translator)
+                else:
+                    print(
+                        "Warning: translation file '{0}' could not be"
+                        " loaded.".format(translation)
+                    )
+                    print("Using default.")
+
+    def getPreferences(self, key):
+        """
+        Public method to retrieve the various settings values.
+
+        @param key the key of the value to get
+        @type str
+        @return the requested setting value
+        @rtype Any
+        """
+        return None
+
+    def setPreferences(self, key, value):
+        """
+        Public method to store the various settings values.
+
+        @param key the key of the setting to be set
+        @type str
+        @param value the value to be set
+        @type Any
+        """
+        pass
+
+
+def installDependencies(pipInstall):
+    """
+    Function to install dependencies of this plug-in.
+
+    @param pipInstall function to be called with a list of package names.
+    @type function
+    """
+    try:
+        import pipx  # __IGNORE_WARNING__
+    except ImportError:
+        pipInstall(["pipx>=1.5.0"])
+
+
+#
+# eflag: noqa = M801, U200

eric ide

mercurial