ProjectFlask/FlaskConfigDialog.py

Wed, 21 Sep 2022 16:30:15 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 21 Sep 2022 16:30:15 +0200
branch
eric7
changeset 70
22e1d0f69668
parent 66
0d3168d0e310
child 72
4557829a4acf
permissions
-rw-r--r--

Reformatted source code with 'Black'.

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

# Copyright (c) 2020 - 2022 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