From 795f384d6944f7cd34866fc003a854cdb2730930 Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Thu, 11 Jan 2024 11:24:48 +0100 Subject: [PATCH] Visualize internal errors. --- doc/DocCov/index.rst | 11 ++++++----- sphinx_reports/CodeCoverage.py | 10 ++++++++-- sphinx_reports/DocCoverage.py | 13 +++++++++++-- sphinx_reports/static/sphinx-reports.css | 2 +- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/doc/DocCov/index.rst b/doc/DocCov/index.rst index ed207499..80a5028e 100644 --- a/doc/DocCov/index.rst +++ b/doc/DocCov/index.rst @@ -53,11 +53,12 @@ See the :ref:`overview page ` on how to setup and enable the Sphinx extens "directory": "../myPackage", "fail_below": 80, "levels": { - 30: {"class": "report-cov-below30", "desc": "almost undocumented"}, - 50: {"class": "report-cov-below50", "desc": "poorly documented"}, - 80: {"class": "report-cov-below80", "desc": "roughly documented"}, - 90: {"class": "report-cov-below90", "desc": "well documented"}, - 100: {"class": "report-cov-below100", "desc": "excellent documented"}, + 30: {"class": "report-cov-below30", "desc": "almost undocumented"}, + 50: {"class": "report-cov-below50", "desc": "poorly documented"}, + 80: {"class": "report-cov-below80", "desc": "roughly documented"}, + 90: {"class": "report-cov-below90", "desc": "well documented"}, + 100: {"class": "report-cov-below100", "desc": "excellent documented"}, + "error": {"class": "report-cov-error", "desc": "internal errord"}, }, } } diff --git a/sphinx_reports/CodeCoverage.py b/sphinx_reports/CodeCoverage.py index 782ec970..abca1a78 100644 --- a/sphinx_reports/CodeCoverage.py +++ b/sphinx_reports/CodeCoverage.py @@ -126,6 +126,12 @@ def _CheckConfiguration(self) -> None: except KeyError as ex: raise ReportExtensionError(f"conf.py: {ReportDomain.name}_{self.configPrefix}_packages:{self._packageID}.levels: Configuration is missing.") from ex + if 100 not in packageConfiguration["levels"]: + raise ReportExtensionError(f"conf.py: {ReportDomain.name}_{self.configPrefix}_packages:{self._packageID}.levels[100]: Configuration is missing.") + + if "error" not in packageConfiguration["levels"]: + raise ReportExtensionError(f"conf.py: {ReportDomain.name}_{self.configPrefix}_packages:{self._packageID}.levels[error]: Configuration is missing.") + self._levels = {} for level, levelConfig in levels.items(): try: @@ -151,11 +157,11 @@ def _CheckConfiguration(self) -> None: self._levels[level] = {"class": cssClass, "desc": description} def _ConvertToColor(self, currentLevel: float, configKey: str) -> str: - if currentLevel == -1.0: + if currentLevel < 0.0: return self._levels["error"][configKey] for levelLimit, levelConfig in self._levels.items(): - if (currentLevel * 100) < levelLimit: + if isinstance(levelLimit, int) and (currentLevel * 100) < levelLimit: return levelConfig[configKey] return self._levels[100][configKey] diff --git a/sphinx_reports/DocCoverage.py b/sphinx_reports/DocCoverage.py index 8f9cb632..6eee9d72 100644 --- a/sphinx_reports/DocCoverage.py +++ b/sphinx_reports/DocCoverage.py @@ -32,7 +32,7 @@ **Report documentation coverage as Sphinx documentation page(s).** """ from pathlib import Path -from typing import Dict, Tuple, Any, List, Iterable, Mapping, Generator, TypedDict +from typing import Dict, Tuple, Any, List, Iterable, Mapping, Generator, TypedDict, Union from docutils import nodes from pyTooling.Decorators import export @@ -75,7 +75,7 @@ class DocCoverage(BaseDirective): _packageName: str _directory: Path _failBelow: float - _levels: Dict[int, Dict[str, str]] + _levels: Dict[Union[int, str], Dict[str, str]] _coverage: PackageCoverage def _CheckOptions(self) -> None: @@ -126,6 +126,12 @@ def _CheckConfiguration(self) -> None: except KeyError as ex: raise ReportExtensionError(f"conf.py: {ReportDomain.name}_{self.configPrefix}_packages:{self._packageID}.levels: Configuration is missing.") from ex + if 100 not in packageConfiguration["levels"]: + raise ReportExtensionError(f"conf.py: {ReportDomain.name}_{self.configPrefix}_packages:{self._packageID}.levels[100]: Configuration is missing.") + + if "error" not in packageConfiguration["levels"]: + raise ReportExtensionError(f"conf.py: {ReportDomain.name}_{self.configPrefix}_packages:{self._packageID}.levels[error]: Configuration is missing.") + self._levels = {} for level, levelConfig in levels.items(): try: @@ -151,6 +157,9 @@ def _CheckConfiguration(self) -> None: self._levels[level] = {"class": cssClass, "desc": description} def _ConvertToColor(self, currentLevel: float, configKey: str) -> str: + if currentLevel < 0.0: + return self._levels["error"][configKey] + for levelLimit, levelConfig in self._levels.items(): if isinstance(levelLimit, int) and (currentLevel * 100) < levelLimit: return levelConfig[configKey] diff --git a/sphinx_reports/static/sphinx-reports.css b/sphinx_reports/static/sphinx-reports.css index 2692fc50..02468d35 100644 --- a/sphinx_reports/static/sphinx-reports.css +++ b/sphinx_reports/static/sphinx-reports.css @@ -31,7 +31,7 @@ } /* internal error */ .report-cov-error{ - background: rgba(255, 0, 0, .2); + background: rgba(255, 0, 0, .4); } .report-dep-summary-row {