66import anybadge
77import pytest
88from coverage import Coverage
9+ from coverage .exceptions import NoSource
910from interrogate import badge_gen
1011from interrogate .coverage import InterrogateCoverage
1112
@@ -30,10 +31,14 @@ def on_pre_build(config):
3031 else :
3132 log .info ("Using existing coverage data." )
3233
33- cov = Coverage ()
34- cov .load ()
35- cov_percent = int (cov .report (file = StringIO ()))
36- log .info (f"Test Coverage: { cov_percent } %, generating badge." )
34+ cov_percent = 0
35+ try :
36+ cov_percent = get_coverage_percentage ()
37+ except NoSource :
38+ # Source file is either deleted or moved, so we can't generate a badge, rerun the tests
39+ log .info ("Change in the source files, running pytest to collect." )
40+ pytest .main (["--cov" , "--cov-report=html" ])
41+ cov_percent = get_coverage_percentage ()
3742
3843 badge = anybadge .Badge (
3944 "coverage" ,
@@ -52,3 +57,13 @@ def on_pre_build(config):
5257 doc_cov = InterrogateCoverage (paths = ["src" ]).get_coverage ()
5358 log .info (f"Docs Coverage: { doc_cov .perc_covered } %, generating badge." )
5459 badge_gen .create ("docs" , doc_cov )
60+
61+
62+ def get_coverage_percentage ():
63+ """Return the coverage percentage from the .coverage file."""
64+ cov = Coverage ()
65+ cov .load ()
66+ cov_percent = cov .report (file = StringIO ())
67+ log .info (f"Test Coverage: { cov_percent } %, generating badge." )
68+
69+ return cov_percent
0 commit comments