ProjectDjango/Project.py

changeset 110
da5ee5012004
parent 108
e6b5b87decc1
child 113
9b7adb12b409
--- a/ProjectDjango/Project.py	Sat Nov 04 15:22:22 2017 +0100
+++ b/ProjectDjango/Project.py	Sun Nov 12 14:56:13 2017 +0100
@@ -97,6 +97,9 @@
     Class implementing the Django project support.
     """
     RecentApplicationsKey = "Django/RecentApplications"
+##    RecentTestLabelsKey = "Django/RecentTestLabels"
+##    RecentTestTagsKey = "Django/RecentTestTags"
+##    RecentTestExcludeTagsKey = "Django/RecentTestExcludeTags"
     
     def __init__(self, plugin, parent=None):
         """
@@ -119,6 +122,13 @@
         
         self.__recentApplications = []
         self.__loadRecentApplications()
+        
+        self.__recentTestData = {
+            "RecentTestLabels": [],
+            "RecentTestTags": [],
+            "RecentTestExcludeTags": [],
+        }
+        self.__loadRecentTestData()
     
     def initActions(self):
         """
@@ -1559,6 +1569,64 @@
                 self.__recentApplications[:maxRecentApps]
         self.__saveRecentApplications()
     
+    def __loadRecentTestData(self):
+        """
+        Private method to load the recently used test data lists.
+        """
+        self.__recentTestData = {
+            "RecentTestLabels": [],
+            "RecentTestTags": [],
+            "RecentTestExcludeTags": [],
+        }
+        Preferences.Prefs.rsettings.sync()
+        maxRecentTestData = self.__plugin.getPreferences(
+            "RecentNumberTestData")
+        for key in self.__recentTestData:
+            recent = Preferences.Prefs.rsettings.value("Django/" + key)
+            if recent is not None:
+                self.__recentTestData[key] = recent[:maxRecentTestData]
+    
+    def __saveRecentTestData(self):
+        """
+        Private method to save the list of recently used test data.
+        """
+        for key in self.__recentTestData:
+            Preferences.Prefs.rsettings.setValue("Django/" + key,
+                                                 self.__recentTestData[key])
+        Preferences.Prefs.rsettings.sync()
+    
+    def getRecentTestData(self, key):
+        """
+        Public method to get the list of recent test data.
+        
+        @param key key (name) of the test data to get
+        @type str
+        @return list of recent test data entries
+        @rtype list of str
+        """
+        self.__loadRecentTestData()
+        return self.__recentTestData[key]
+    
+    def setMostRecentTestData(self, key, data):
+        """
+        Public method to set the most recently used test data entry.
+        
+        @param key key (name) of the test data to set
+        @type str
+        @param data test data entry to be set
+        @type str
+        """
+        if data in self.__recentTestData[key]:
+            self.__recentTestData[key].remove(data)
+        self.__recentTestData[key].insert(0, data)
+        
+        maxRecentTestData = self.__plugin.getPreferences(
+            "RecentNumberTestData")
+        if len(self.__recentTestData[key]) > maxRecentTestData:
+            self.__recentTestData[key] = \
+                self.__recentTestData[key][:maxRecentTestData]
+        self.__saveRecentTestData()
+    
     def getProjectPath(self):
         """
         Public method to get the path of the eric6 project.
@@ -1877,8 +1945,9 @@
         if self.__currentSite is None:
             raise DjangoNoSiteSelectedException
         else:
-            return os.path.join(self.__e5project.getProjectPath(),
+            path = os.path.join(self.__e5project.getProjectPath(),
                                 self.__currentSite)
+            return path
     
     def __setCurrentSite(self, site):
         """
@@ -2688,6 +2757,12 @@
             except DjangoNoSiteSelectedException:
                 return
             
+            from .DjangoTestDataDialog import DjangoTestDataDialog
+            dlg = DjangoTestDataDialog(self, self.__ui)
+            if dlg.exec_() == QDialog.Accepted:
+                labels, pattern, tags, excludeTags, keep, reverse = \
+                    dlg.getData()
+                
             args = Utilities.parseOptionString(consoleCmd)
             args[0] = Utilities.getExecutablePath(args[0])
             args.append(self.__getPythonExecutable())
@@ -2695,7 +2770,20 @@
                 args.append("-Wall")
             args.append("manage.py")
             args.append("test")
-            args += self.__getApplications()
+            if pattern:
+                args.append("--pattern")
+                args.append(pattern)
+            for tag in tags:
+                args.append("--tag")
+                args.append(tag)
+            for tag in excludeTags:
+                args.append("--exclude-tag")
+                args.append(tag)
+            if keep:
+                args.append("--keepdb")
+            if reverse:
+                args.append("--reverse")
+            args.extend(labels)
             
             self.__adjustWorkingDirectory(args, wd)
             started, pid = QProcess.startDetached(args[0], args[1:], wd)

eric ide

mercurial