ProjectFlask/FlaskConfigDialog.py

Sun, 30 May 2021 17:33:37 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 30 May 2021 17:33:37 +0200
branch
eric7
changeset 64
0ee58185b8df
parent 61
fe1e8783a95f
child 66
0d3168d0e310
permissions
-rw-r--r--

Ported the plug-in to PyQt6 for eric7.

# -*- coding: utf-8 -*-

# Copyright (c) 2020 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing a dialog to configure project specific flask settings.
"""

from PyQt6.QtCore import pyqtSlot
from PyQt6.QtWidgets import QDialog

from EricWidgets.EricApplication import ericApp

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().__init__(parent)
        self.setupUi(self)
        
        self.newEnvironmentButton.setIcon(
            UI.PixmapCache.getIcon("virtualenvConfig"))
        
        self.__project = project
        
        self.__virtualEnvManager = ericApp().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
        )
        
        ericProject = ericApp().getObject("Project")
        dlg = FlaskVirtualenvConfigurationDialog(
            ericProject.getProjectPath(),
            ericProject.getProjectName(),
            self)
        if dlg.exec() == QDialog.DialogCode.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 venvDir  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()

eric ide

mercurial