diff -r c4f503f40caf -r 622e59b51640 src/eric7/DataViews/PyCoverageDialog.py --- 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)