src/eric7/DataViews/PyCoverageDialog.py

branch
server
changeset 10574
622e59b51640
parent 10439
21c28b0f9e41
child 10578
a5f3a7dba8bc
--- a/src/eric7/DataViews/PyCoverageDialog.py	Wed Feb 14 10:24:23 2024 +0100
+++ b/src/eric7/DataViews/PyCoverageDialog.py	Thu Feb 15 13:59:02 2024 +0100
@@ -25,6 +25,9 @@
 
 from eric7.EricWidgets import EricMessageBox
 from eric7.EricWidgets.EricApplication import ericApp
+from eric7.RemoteServerInterface.EricServerCoverageInterface import (
+    EricServerCoverageError,
+)
 from eric7.SystemUtilities import FileSystemUtilities
 
 from .Ui_PyCoverageDialog import Ui_PyCoverageDialog
@@ -57,7 +60,6 @@
         self.resultList.headerItem().setText(self.resultList.columnCount(), "")
 
         self.cancelled = False
-        self.path = "."
         self.reload = False
 
         self.excludeList = ["# *pragma[: ]*[nN][oO] *[cC][oO][vV][eE][rR]"]
@@ -77,6 +79,11 @@
         self.__menu.addAction(self.tr("Erase Coverage Info"), self.__erase)
         self.resultList.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
         self.resultList.customContextMenuRequested.connect(self.__showContextMenu)
+ 
+        # eric-ide server interface
+        self.__serverCoverageInterface = ericApp().getObject(
+            "EricServer"
+        ).getServiceInterface("Coverage")
 
     def __format_lines(self, lines):
         """
@@ -143,7 +150,7 @@
         @param coverage percent of coverage
         @type int
         @param excluded list of excluded lines
-        @type str
+        @type list of int
         @param missing list of lines without coverage
         @type str
         """
@@ -154,7 +161,7 @@
                 str(statements),
                 str(executed),
                 "{0:.0f}%".format(coverage),
-                excluded,
+                excluded and self.__format_lines(excluded) or "",
                 missing,
             ],
         )
@@ -192,20 +199,16 @@
             else "{0}.coverage".format(os.path.splitext(cfn)[0])
         )
 
+        # TODO: adapt this to remote server
         if isinstance(fn, list):
             files = fn
-            self.path = os.path.dirname(cfn)
-        elif os.path.isdir(fn):
+        elif os.path.isdir(fn) and not FileSystemUtilities.isRemoteFileName(self.cfn):
+            # This case is not yet supported
             files = FileSystemUtilities.direntries(fn, True, "*.py", False)
-            self.path = fn
         else:
             files = [fn]
-            self.path = os.path.dirname(cfn)
         files.sort()
 
-        cover = Coverage(data_file=self.cfn)
-        cover.load()
-
         # set the exclude pattern
         self.excludeCombo.clear()
         self.excludeCombo.addItems(self.excludeList)
@@ -217,7 +220,23 @@
         total_executed = 0
         total_exceptions = 0
 
-        cover.exclude(self.excludeList[0])
+        if FileSystemUtilities.isRemoteFileName(self.cfn):
+            ok, error = self.__serverCoverageInterface.loadCoverageData(
+                self.cfn, self.excludeList[0]
+            )
+            if not ok:
+                EricMessageBox.critical(
+                    self,
+                    self.tr("Load Coverage Data"),
+                    self.tr(
+                        "<p>The coverage data could not be loaded from file"
+                        " <b>{0}</b>.</p><p>Reason: {1}</p>"
+                    ).format(self.cfn, error),
+                )
+        else:
+            cover = Coverage(data_file=self.cfn)
+            cover.load()
+            cover.exclude(self.excludeList[0])
 
         try:
             # disable updates of the list for speed
@@ -231,18 +250,24 @@
                     return
 
                 try:
-                    statements, excluded, missing, readable = cover.analysis2(file)[1:]
-                    readableEx = excluded and self.__format_lines(excluded) or ""
+                    if FileSystemUtilities.isRemoteFileName(self.cfn):
+                        file, statements, excluded, missing, readable = (
+                            self.__serverCoverageInterface.analyzeFile(file)
+                        )
+                    else:
+                        statements, excluded, missing, readable = (
+                            cover.analysis2(file)[1:]
+                        )
                     n = len(statements)
                     m = n - len(missing)
                     pc = 100.0 * m / n if n > 0 else 100.0
                     self.__createResultItem(
-                        file, str(n), str(m), pc, readableEx, readable
+                        file, str(n), str(m), pc, excluded, readable
                     )
 
                     total_statements += n
                     total_executed += m
-                except CoverageException:
+                except (CoverageException, EricServerCoverageError):
                     total_exceptions += 1
 
                 self.checkProgress.setValue(progress)

eric ide

mercurial