ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py

changeset 27
b73e9af0d496
parent 26
5aac667c4f0f
child 29
a8817ea36587
diff -r 5aac667c4f0f -r b73e9af0d496 ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py
--- a/ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py	Mon Nov 23 18:11:28 2020 +0100
+++ b/ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py	Mon Nov 23 19:50:07 2020 +0100
@@ -68,7 +68,37 @@
             self.__configurePyBabel)
         self.actions.append(self.pybabelConfigAct)
         
-        # TODO: add action to install flask-babel
+        self.pybabelInstallAct = E5Action(
+            self.tr('Install flask-babel'),
+            self.tr('&Install flask-babel'),
+            0, 0,
+            self, 'flask_install_pybabel')
+        self.pybabelInstallAct.setStatusTip(self.tr(
+            'Installs the flask-babel extension into the configured'
+            ' environment'))
+        self.pybabelInstallAct.setWhatsThis(self.tr(
+            """<b>Install flask-babel</b>"""
+            """<p>Installs the flask-babel extension into the configured"""
+            """ environment using the pip interface.</p>"""
+        ))
+        self.pybabelInstallAct.triggered.connect(
+            self.__installFlaskBabel)
+        self.actions.append(self.pybabelInstallAct)
+        
+        self.pybabelAvailabilityAct = E5Action(
+            self.tr('Check flask-babel Availability'),
+            self.tr('&Check flask-babel Availability'),
+            0, 0,
+            self, 'flask_check_pybabel')
+        self.pybabelAvailabilityAct.setStatusTip(self.tr(
+            'Check the availability of the flask-babel extension'))
+        self.pybabelAvailabilityAct.setWhatsThis(self.tr(
+            """<b>Check flask-babel Availability</b>"""
+            """<p>Check the availability of the flask-babel extension.</p>"""
+        ))
+        self.pybabelAvailabilityAct.triggered.connect(
+            self.__checkAvailability)
+        self.actions.append(self.pybabelAvailabilityAct)
     
     def initMenu(self):
         """
@@ -81,6 +111,9 @@
         menu.setTearOffEnabled(True)
         
         menu.addAction(self.pybabelConfigAct)
+        menu.addSeparator()
+        menu.addAction(self.pybabelAvailabilityAct)
+        menu.addAction(self.pybabelInstallAct)
         
         return menu
     
@@ -171,7 +204,7 @@
         self.__project.setCapability("pybabel", available)
         
         self.pybabelConfigAct.setEnabled(available)
-        # TODO: disable install action, if flask-babel is available
+        self.pybabelInstallAct.setEnabled(not available)
     
     ##################################################################
     ## slots and methods below implement general functionality
@@ -303,6 +336,46 @@
             )
             return False
     
+    @pyqtSlot()
+    def __installFlaskBabel(self):
+        """
+        Private slot to install the flask-babel extension into the configured
+        environment.
+        """
+        language = self.__e5project.getProjectLanguage()
+        if language == "Python3":
+            venvName = self.__plugin.getPreferences(
+                "VirtualEnvironmentNamePy3")
+        else:
+            venvName = ""
+        if venvName:
+            interpreter = self.__project.getFullCommand("python")
+            pip = e5App().getObject("Pip")
+            pip.installPackages(["flask-babel"], interpreter=interpreter)
+            self.determineCapability()
+        else:
+            E5MessageBox.critical(
+                None,
+                self.tr("Install flask-babel"),
+                self.tr("The 'flask-babel' extension could not be installed"
+                        " because no virtual environment has been"
+                        " configured."))
+    
+    @pyqtSlot()
+    def __checkAvailability(self):
+        """
+        Private slot to check the availability of the 'flask-babel' extension.
+        """
+        self.determineCapability()
+        if self.__project.hasCapability("pybabel"):
+            msg = self.tr("The 'flask-babel' extension is installed.")
+        else:
+            msg = self.tr("The 'flask-babel' extension is not installed.")
+        E5MessageBox.information(
+            None,
+            self.tr("flask-babel Availability"),
+            msg)
+    
     def __getLocale(self, filename):
         """
         Private method to extract the locale out of a file name.

eric ide

mercurial