Sat, 05 Dec 2020 17:18:17 +0100
Added the capability to create project specific virtual environments.
# -*- coding: utf-8 -*- # Copyright (c) 2020 Detlev Offenbach <detlev@die-offenbachs.de> # """ Module implementing a dialog to configure project specific flask settings. """ from PyQt5.QtCore import pyqtSlot from PyQt5.QtWidgets import QDialog from E5Gui.E5Application import e5App from .Ui_FlaskConfigDialog import Ui_FlaskConfigDialog import UI.PixmapCache import Preferences class FlaskConfigDialog(QDialog, Ui_FlaskConfigDialog): """ Class implementing a dialog to configure project specific flask settings. """ def __init__(self, configuration, project, parent=None): """ Constructor @param configuration current project specific configuration @type dict @param project reference to the flask project object @type Project @param parent reference to the parent widget @type QWidget """ super(FlaskConfigDialog, self).__init__(parent) self.setupUi(self) self.newEnvironmentButton.setIcon( UI.PixmapCache.getIcon("virtualenvConfig")) self.__project = project self.__virtualEnvManager = e5App().getObject("VirtualEnvManager") self.virtualEnvironmentComboBox.addItem("") self.virtualEnvironmentComboBox.addItems( sorted(self.__virtualEnvManager.getVirtualenvNames( noRemote=True, noConda=True )) ) if "virtual_environment_name" in configuration: self.virtualEnvironmentComboBox.setCurrentText( configuration["virtual_environment_name"]) self.flaskBabelBox.setChecked( configuration.get("flask_babel_override", False)) self.flaskBabelCheckBox.setChecked( configuration.get("flask_babel_available", False)) self.flaskMigrateBox.setChecked( configuration.get("flask_migrate_override", False)) self.flaskMigrateCheckBox.setChecked( configuration.get("flask_migrate_available", False)) msh = self.minimumSizeHint() self.resize(max(self.width(), msh.width()), msh.height()) def getConfiguration(self): """ Public method to get the entered configuration data. @return project specific configuration @rtype dict """ configuration = { "virtual_environment_name": self.virtualEnvironmentComboBox.currentText(), "flask_babel_override": self.flaskBabelBox.isChecked(), "flask_babel_available": self.flaskBabelCheckBox.isChecked(), "flask_migrate_override": self.flaskMigrateBox.isChecked(), "flask_migrate_available": self.flaskMigrateCheckBox.isChecked(), } return configuration @pyqtSlot() def on_newEnvironmentButton_clicked(self): """ Private slot to open a dialog for adding a new virtual environment. """ from .FlaskVirtualenvConfigurationDialog import ( FlaskVirtualenvConfigurationDialog ) e5Project = e5App().getObject("Project") dlg = FlaskVirtualenvConfigurationDialog( e5Project.getProjectPath(), e5Project.getProjectName(), self) if dlg.exec() == QDialog.Accepted: resultDict = dlg.getData() # now do the call from VirtualEnv.VirtualenvExecDialog import VirtualenvExecDialog dia = VirtualenvExecDialog( resultDict, self.__virtualEnvManager, self) dia.show() dia.start(resultDict["arguments"]) dia.exec() self.virtualEnvironmentComboBox.clear() self.virtualEnvironmentComboBox.addItem("") self.virtualEnvironmentComboBox.addItems( sorted(self.__virtualEnvManager.getVirtualenvNames( noRemote=True, noConda=True )) ) self.virtualEnvironmentComboBox.setCurrentText( resultDict["logicalName"]) self.__installFlask(resultDict["targetDirectory"]) def __installFlask(self, venvDir): """ Private method to install flask into the newly created environment. @param venvtDir directory containing the virtual environment @type str """ from PipInterface.PipDialog import PipDialog interpreter = self.__project.getFullCommand("python", venvDir) if Preferences.getPip("PipSearchIndex"): indexUrl = Preferences.getPip("PipSearchIndex") + "/simple" args = ["-m", "pip", "install", "--index-url", indexUrl] else: args = ["-m", "pip", "install"] args.append("flask") dia = PipDialog(self.tr('Install Flask'), self) res = dia.startProcess(interpreter, args) if res: dia.exec()