CondaInterface/CondaPackagesWidget.py

branch
conda
changeset 6728
ba077788a882
parent 6724
ca89c7d94c94
child 6731
c70eaa492741
--- a/CondaInterface/CondaPackagesWidget.py	Mon Feb 11 19:33:12 2019 +0100
+++ b/CondaInterface/CondaPackagesWidget.py	Mon Feb 11 19:57:53 2019 +0100
@@ -14,9 +14,9 @@
 from PyQt5.QtCore import pyqtSlot, Qt
 from PyQt5.QtGui import QCursor
 from PyQt5.QtWidgets import QWidget, QToolButton, QMenu, QTreeWidgetItem, \
-    QApplication
+    QApplication, QLineEdit
 
-from E5Gui import E5MessageBox
+from E5Gui import E5FileDialog, E5MessageBox, E5TextInputDialog
 from E5Gui.E5Application import e5App
 
 from .Ui_CondaPackagesWidget import Ui_CondaPackagesWidget
@@ -100,19 +100,16 @@
         
         self.__cleanMenu = QMenu(self.tr("Clean"), self)
         self.__cleanMenu.addAction(
-            self.tr("All"), lambda: self.__cleanMenuAction("all"))
+            self.tr("All"), lambda: self.__conda.cleanConda("all"))
         self.__cleanMenu.addAction(
-            self.tr("Cache"), lambda: self.__cleanMenuAction("index-cache"))
+            self.tr("Cache"), lambda: self.__conda.cleanConda("index-cache"))
         self.__cleanMenu.addAction(
             self.tr("Lock Files"),
-            lambda: self.__cleanMenuAction("lock"))
-        self.__cleanMenu.addAction(
-            self.tr("Packages"), lambda: self.__cleanMenuAction("packages"))
+            lambda: self.__conda.cleanConda("lock"))
         self.__cleanMenu.addAction(
-            self.tr("Tarballs"), lambda: self.__cleanMenuAction("tarballs"))
+            self.tr("Packages"), lambda: self.__conda.cleanConda("packages"))
         self.__cleanMenu.addAction(
-            self.tr("Temporary Files"),
-            lambda: self.__cleanMenuAction("temp_files"))
+            self.tr("Tarballs"), lambda: self.__conda.cleanConda("tarballs"))
         
         self.__condaMenu.addAction(
             self.tr("About Conda..."), self.__aboutConda)
@@ -123,17 +120,20 @@
         self.__envActs.append(self.__condaMenu.addAction(
             self.tr("Install Packages"), self.__installPackages))
         self.__envActs.append(self.__condaMenu.addAction(
-            self.tr("Install Local Packages"), self.__installLocalPackage))
-        self.__envActs.append(self.__condaMenu.addAction(
             self.tr("Install Requirements"), self.__installRequirements))
         self.__condaMenu.addSeparator()
         self.__envActs.append(self.__condaMenu.addAction(
             self.tr("Generate Requirements"), self.__generateRequirements))
         self.__condaMenu.addSeparator()
+        self.__condaMenu.addAction(
+            self.tr("Create Environment from Requirements"),
+            self.__createEnvironment)
         self.__envActs.append(self.__condaMenu.addAction(
             self.tr("Clone Environment"), self.__cloneEnvironment))
+        self.__deleteEnvAct = self.__condaMenu.addAction(
+            self.tr("Delete Environment"), self.__deleteEnvironment)
         self.__condaMenu.addSeparator()
-        self.__envActs.append(self.__condaMenu.addMenu(self.__cleanMenu))
+        self.__condaMenu.addMenu(self.__cleanMenu)
         self.__condaMenu.addSeparator()
         self.__condaMenu.addAction(
             self.tr("Edit User Configuration..."),
@@ -509,14 +509,15 @@
         enable = selectedEnvironment not in [""]
         for act in self.__envActs:
             act.setEnabled(enable)
+        
+        self.__deleteEnvAct.setEnabled(
+            selectedEnvironment not in ["", self.__conda.RootName])
     
     @pyqtSlot()
     def __aboutConda(self):
         """
-        Private slot to
+        Private slot to show some information about the conda installation.
         """
-        # TODO: implement this menu function
-        # conda info --all
         infoDict = self.__conda.getCondaInformation()
         
         from .CondaInfoDialog import CondaInfoDialog
@@ -526,55 +527,106 @@
     @pyqtSlot()
     def __installPackages(self):
         """
-        Private slot to
+        Private slot to install packages.
         """
-        # TODO: implement this menu function
-        # conda install ...
-    
-    @pyqtSlot()
-    def __installLocalPackage(self):
-        """
-        Private slot to
-        """
-        # TODO: implement this menu function
-        # conda install --use-local
+        prefix = self.environmentsComboBox.itemData(
+            self.environmentsComboBox.currentIndex())
+        if prefix:
+            ok, packageSpecs = E5TextInputDialog.getText(
+                self,
+                self.tr("Install Packages"),
+                self.tr("Package Specifications (separated by whitespace):"),
+                QLineEdit.Normal,
+                minimumWidth=600)
+            if ok and packageSpecs.strip():
+                packages = [p.strip() for p in packageSpecs.split()]
+                ok = self.__conda.installPackages(packages, prefix=prefix)
+                if ok:
+                    self.on_refreshButton_clicked()
     
     @pyqtSlot()
     def __installRequirements(self):
         """
-        Private slot to
+        Private slot to install packages from requirements files.
         """
-        # TODO: implement this menu function
-        # conda install --file FILE1 --file FILE2 ...
+        prefix = self.environmentsComboBox.itemData(
+            self.environmentsComboBox.currentIndex())
+        if prefix:
+            requirements = E5FileDialog.getOpenFileNames(
+                self,
+                self.tr("Install Packages"),
+                "",
+                self.tr("Text Files (*.txt);;All Files (*)"))
+            if requirements:
+                args = []
+                for requirement in requirements:
+                    args.extend(["--file", requirement])
+                ok = self.__conda.installPackages(args, prefix=prefix)
+                if ok:
+                    self.on_refreshButton_clicked()
     
     @pyqtSlot()
     def __generateRequirements(self):
         """
-        Private slot to
+        Private slot to generate a requirements file.
         """
-        # TODO: implement this menu function
-        # conda list --export
+        prefix = self.environmentsComboBox.itemData(
+            self.environmentsComboBox.currentIndex())
+        if prefix:
+            env = self.environmentsComboBox.currentText()
+            
+            from .CondaExportDialog import CondaExportDialog
+            
+            self.__requirementsDialog = CondaExportDialog(
+                self.__conda, env, prefix)
+            self.__requirementsDialog.show()
+            QApplication.processEvents()
+            self.__requirementsDialog.start()
     
     @pyqtSlot()
     def __cloneEnvironment(self):
         """
-        Private slot to
-        """
-        # TODO: implement this menu function
-        # conda create --clone ENV
-    
-    def __cleanMenuAction(self, cleanAction):
-        """
-        Private method to
+        Private slot to clone a conda environment.
         """
-        # TODO: implement this menu function
-        # conda clean
-        #   --all                   (act = 'all')
-        #   --index-cache           (act = 'index-cache')
-        #   --lock                  (act = 'lock')
-        #   --packages              (act = 'packages')
-        #   --tarballs              (act = 'tarballs')
-        #   -c prefix1 prefix2 ...  (act = 'temp_files')
+        prefix = self.environmentsComboBox.itemData(
+            self.environmentsComboBox.currentIndex())
+        if prefix:
+            ok, envName = E5TextInputDialog.getText(
+                self,
+                self.tr("Clone Environment"),
+                self.tr("Enter name for the cloned environment:"),
+                QLineEdit.Normal)
+            if ok and envName.strip():
+                args = [
+                    "--name",
+                    envName.strip(),
+                    "--clone",
+                    prefix,
+                ]
+                self.__conda.createCondaEnvironment(args)
+        # TODO: add code to register the cloned env with the virt env manager
+    
+    @pyqtSlot()
+    def __createEnvironment(self):
+        """
+        Private slot to create a conda environment from a requirements file.
+        """
+        # TODO: implement this
+    
+    @pyqtSlot()
+    def __deleteEnvironment(self):
+        """
+        Private slot to delete a conda environment.
+        """
+        envName = self.environmentsComboBox.currentText()
+        ok = E5MessageBox.yesNo(
+            self,
+            self.tr("Delete Environment"),
+            self.tr("""<p>Shal the environment <b>{0}</b> really be"""
+                    """ deleted?</p>""").format(envName)
+        )
+        if ok:
+            self.__conda.removeCondaEnvironment(name=envName)
     
     @pyqtSlot()
     def __editUserConfiguration(self):

eric ide

mercurial