ProjectFlask/FlaskConfigDialog.py

Mon, 28 Oct 2024 17:11:28 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 28 Oct 2024 17:11:28 +0100
branch
eric7
changeset 85
fcb5126077b1
parent 84
f39230b845e4
child 87
075f7667f69d
permissions
-rw-r--r--

- changed to the new style header
- ensured proper parent relationship of modal dialogs
- included compiled form files

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

# Copyright (c) 2020 - 2024 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 eric7 import Preferences
from eric7.EricWidgets.EricApplication import ericApp

try:
    from eric7.EricGui import EricPixmapCache
except ImportError:
    from UI import PixmapCache as EricPixmapCache

from .Ui_FlaskConfigDialog import Ui_FlaskConfigDialog


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(EricPixmapCache.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 eric7.VirtualEnv.VirtualenvExecDialog import VirtualenvExecDialog

        from .FlaskVirtualenvConfigurationDialog import (
            FlaskVirtualenvConfigurationDialog,
        )

        ericProject = ericApp().getObject("Project")
        dlg = FlaskVirtualenvConfigurationDialog(
            ericProject.getProjectPath(), ericProject.getProjectName(), parent=self
        )
        if dlg.exec() == QDialog.DialogCode.Accepted:
            resultDict = dlg.getData()

            # now do the call
            dia = VirtualenvExecDialog(
                resultDict, self.__virtualEnvManager, parent=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 eric7.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"), parent=self)
        res = dia.startProcess(interpreter, args)
        if res:
            dia.exec()

eric ide

mercurial