Started implementing project specific flask settings.

Tue, 01 Dec 2020 20:22:23 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 01 Dec 2020 20:22:23 +0100
changeset 47
144b67fd111a
parent 46
e700f73e1c6f
child 48
14d8d24e24da

Started implementing project specific flask settings.

PluginFlask.e4p file | annotate | diff | comparison | revisions
ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py file | annotate | diff | comparison | revisions
ProjectFlask/FlaskConfigDialog.py file | annotate | diff | comparison | revisions
ProjectFlask/FlaskConfigDialog.ui file | annotate | diff | comparison | revisions
ProjectFlask/FlaskMigrateExtension/MigrateConfigDialog.py file | annotate | diff | comparison | revisions
ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py file | annotate | diff | comparison | revisions
ProjectFlask/Project.py file | annotate | diff | comparison | revisions
--- a/PluginFlask.e4p	Tue Dec 01 19:38:47 2020 +0100
+++ b/PluginFlask.e4p	Tue Dec 01 20:22:23 2020 +0100
@@ -24,6 +24,7 @@
     <Source>ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py</Source>
     <Source>ProjectFlask/FlaskBabelExtension/__init__.py</Source>
     <Source>ProjectFlask/FlaskCommandDialog.py</Source>
+    <Source>ProjectFlask/FlaskConfigDialog.py</Source>
     <Source>ProjectFlask/FlaskMigrateExtension/FlaskMigrateDetector.py</Source>
     <Source>ProjectFlask/FlaskMigrateExtension/MigrateConfigDialog.py</Source>
     <Source>ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py</Source>
@@ -41,6 +42,7 @@
     <Form>ProjectFlask/ConfigurationPage/FlaskPage.ui</Form>
     <Form>ProjectFlask/FlaskBabelExtension/PyBabelConfigDialog.ui</Form>
     <Form>ProjectFlask/FlaskCommandDialog.ui</Form>
+    <Form>ProjectFlask/FlaskConfigDialog.ui</Form>
     <Form>ProjectFlask/FlaskMigrateExtension/MigrateConfigDialog.ui</Form>
     <Form>ProjectFlask/FlaskMigrateExtension/MigrateSummaryDialog.ui</Form>
     <Form>ProjectFlask/FormSelectionDialog.ui</Form>
--- a/ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py	Tue Dec 01 19:38:47 2020 +0100
+++ b/ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py	Tue Dec 01 20:22:23 2020 +0100
@@ -340,6 +340,7 @@
         Private slot to install the flask-babel extension into the configured
         environment.
         """
+        # TODO: get interpreter from self.__project
         language = self.__e5project.getProjectLanguage()
         if language == "Python3":
             venvName = self.__plugin.getPreferences(
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectFlask/FlaskConfigDialog.py	Tue Dec 01 20:22:23 2020 +0100
@@ -0,0 +1,58 @@
+# -*- 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
+
+
+class FlaskConfigDialog(QDialog, Ui_FlaskConfigDialog):
+    """
+    Class implementing a dialog to configure project specific flask settings.
+    """
+    def __init__(self, configuration, parent=None):
+        """
+        Constructor
+        
+        @param configuration current project specific configuration
+        @type dict
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super(FlaskConfigDialog, self).__init__(parent)
+        self.setupUi(self)
+        
+        self.virtualEnvironmentComboBox.addItem("")
+        self.virtualEnvironmentComboBox.addItems(
+            sorted(e5App().getObject("VirtualEnvManager").getVirtualenvNames(
+                noRemote=True, noConda=True
+            ))
+        )
+        
+        # TODO: set initial values based on configuration
+        
+        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(),
+        }
+        
+        return configuration
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectFlask/FlaskConfigDialog.ui	Tue Dec 01 20:22:23 2020 +0100
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FlaskConfigDialog</class>
+ <widget class="QDialog" name="FlaskConfigDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>500</width>
+    <height>171</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>flask Configuration</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <item>
+    <widget class="QGroupBox" name="groupBox_2">
+     <property name="title">
+      <string>Virtual Environment</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout">
+      <item>
+       <widget class="QComboBox" name="virtualEnvironmentComboBox">
+        <property name="toolTip">
+         <string>Select a project specific virtual environment</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>&lt;b&gt;Note:&lt;/b&gt; Leave this entry empty to use the virtual environment configured globally for all flask projects.</string>
+        </property>
+        <property name="wordWrap">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>FlaskConfigDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>227</x>
+     <y>229</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>249</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>FlaskConfigDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>295</x>
+     <y>235</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>249</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- a/ProjectFlask/FlaskMigrateExtension/MigrateConfigDialog.py	Tue Dec 01 19:38:47 2020 +0100
+++ b/ProjectFlask/FlaskMigrateExtension/MigrateConfigDialog.py	Tue Dec 01 20:22:23 2020 +0100
@@ -48,6 +48,9 @@
             self.migrationsDirectoryPicker.setText(
                 self.__e5project.getAbsoluteUniversalPath(
                     configuration["migrationsDirectory"]))
+        
+        msh = self.minimumSizeHint()
+        self.resize(max(self.width(), msh.width()), msh.height())
     
     def getConfiguration(self):
         """
--- a/ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py	Tue Dec 01 19:38:47 2020 +0100
+++ b/ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py	Tue Dec 01 20:22:23 2020 +0100
@@ -342,6 +342,7 @@
         Private slot to install the flask-migrate extension into the configured
         environment.
         """
+        # TODO: get interpreter from self.__project
         language = e5App().getObject("Project").getProjectLanguage()
         if language == "Python3":
             venvName = self.__plugin.getPreferences(
--- a/ProjectFlask/Project.py	Tue Dec 01 19:38:47 2020 +0100
+++ b/ProjectFlask/Project.py	Tue Dec 01 20:22:23 2020 +0100
@@ -205,6 +205,26 @@
         self.__pybabelProject.initActions()
         self.__migrateProject.initActions()
     
+        ######################################
+        ## configuration action below       ##
+        ######################################
+        
+        self.flaskConfigAct = E5Action(
+            self.tr('Configure Flask for Project'),
+            self.tr('Configure Flask for &Project'),
+            0, 0,
+            self, 'flask_config_for_project')
+        self.flaskConfigAct.setStatusTip(self.tr(
+            'Shows a dialog to edit the project specific flask configuration'))
+        self.flaskConfigAct.setWhatsThis(self.tr(
+            """<b>Configure Migrate</b>"""
+            """<p>Shows a dialog to edit the project specific flask"""
+            """ configuration.</p>"""
+        ))
+        self.flaskConfigAct.triggered.connect(
+            self.__configureFlaskForProject)
+        self.actions.append(self.flaskConfigAct)
+    
     def initMenu(self):
         """
         Public method to initialize the Flask menu.
@@ -220,6 +240,8 @@
         menu = QMenu(self.tr('&Flask'), self.__ui)
         menu.setTearOffEnabled(True)
         
+        menu.addAction(self.flaskConfigAct)
+        menu.addSeparator()
         menu.addAction(self.runServerAct)
         menu.addAction(self.runDevServerAct)
         menu.addAction(self.askForServerOptionsAct)
@@ -361,6 +383,7 @@
         @return path of the virtual environment
         @rtype str
         """
+        # TODO: use project specific override first, global setting second
         language = self.__e5project.getProjectLanguage()
         if language == "Python3":
             venvName = self.__plugin.getPreferences(
@@ -693,8 +716,14 @@
         Private slot to configure the project specific flask parameters.
         """
         # TODO: implement the flask project config dialog
-        # 1. check boxes to override flask-babel and flask-migrate
         # 2. support for project specific virtual environment
+        from .FlaskConfigDialog import FlaskConfigDialog
+        
+        config = self.getData("flask", "")
+        dlg = FlaskConfigDialog(config)
+        if dlg.exec() == QDialog.Accepted:
+            config = dlg.getConfiguration()
+            self.setData("flask", "", config)
     
     ##################################################################
     ## slot below implements documentation function

eric ide

mercurial