From b4e477c50bf0e0f5ac02d3869b395fc9d0190d9b Mon Sep 17 00:00:00 2001 From: Arrielle Opotowsky Date: Thu, 6 Oct 2022 11:14:43 -0500 Subject: [PATCH] Remove deprecated coveragerc file (#923) * Remove extra covrc file and update case.py to handle the active file * Fix _getCovRcFile to only make copy for cov.start * Add test * Release notes * Add PROJECT_ROOT variable in context.py * Address reviewer comment, sort of, with better if statement --- .coveragerc | 3 +++ armi/cases/case.py | 31 ++++++++++++++++++++++++++++--- armi/cases/tests/test_cases.py | 13 ++++++++++--- armi/context.py | 3 ++- armi/resources/coveragerc | 16 ---------------- doc/release/0.2.rst | 1 + 6 files changed, 44 insertions(+), 23 deletions(-) delete mode 100644 armi/resources/coveragerc diff --git a/.coveragerc b/.coveragerc index 902482ffc..56bf64677 100644 --- a/.coveragerc +++ b/.coveragerc @@ -6,6 +6,9 @@ omit = armi/utils/tests/test_gridGui.py venv/ source = armi +# change default .coverage file to something that doesn't have a dot +# because our Windows file server can't handle dots. :s +data_file = coverage_results.cov [coverage:run] parallel = true diff --git a/armi/cases/case.py b/armi/cases/case.py index dc5dc8c69..2e0dd4371 100644 --- a/armi/cases/case.py +++ b/armi/cases/case.py @@ -29,8 +29,10 @@ import glob import os import pathlib +import platform import pstats import re +import shutil import sys import textwrap import time @@ -380,7 +382,7 @@ def _startCoverage(self): cov = None if self.cs["coverage"]: cov = coverage.Coverage( - config_file=os.path.join(context.RES, "coveragerc"), debug=["dataio"] + config_file=Case._getCoverageRcFile(makeCopy=True), debug=["dataio"] ) if context.MPI_SIZE > 1: # interestingly, you cannot set the parallel flag in the constructor @@ -415,8 +417,7 @@ def _endCoverage(cov=None): # combine all the parallel coverage data files into one and make # the XML and HTML reports for the whole run. combinedCoverage = coverage.Coverage( - config_file=os.path.join(context.RES, "coveragerc"), - debug=["dataio"], + config_file=Case._getCoverageRcFile(), debug=["dataio"] ) combinedCoverage.config.parallel = True # combine does delete the files it merges @@ -425,6 +426,30 @@ def _endCoverage(cov=None): combinedCoverage.html_report() combinedCoverage.xml_report() + @staticmethod + def _getCoverageRcFile(makeCopy=False): + """Helper to provide the coverage configuration file according to the OS. + + Parameters + ---------- + makeCopy : bool (optional) + Whether or not to copy the coverage config file to an alternate file path + + Returns + ------- + covFile : str + path of coveragerc file + """ + covRcDir = os.path.abspath(context.PROJECT_ROOT) + covFile = os.path.join(covRcDir, ".coveragerc") + if platform.system() == "Windows": + covFileWin = os.path.join(covRcDir, "coveragerc") + if makeCopy == True: + # Make a copy of the file without the dot in the name + shutil.copy(covFile, covFileWin) + return covFileWin + return covFile + def _startProfiling(self): """Helper to the Case.run(): start the Python profiling, if the CaseSettings file says to. diff --git a/armi/cases/tests/test_cases.py b/armi/cases/tests/test_cases.py index cb80f443e..f17658b4b 100644 --- a/armi/cases/tests/test_cases.py +++ b/armi/cases/tests/test_cases.py @@ -19,11 +19,8 @@ import logging import os import platform -import sys import unittest -import coverage - from armi import cases from armi import context from armi import getApp @@ -124,6 +121,16 @@ def test_independentVariables(self): for name, val in vals.items(): self.assertEqual(newCase.independentVariables[name], val) + def test_getCoverageRcFile(self): + case = cases.Case(settings.Settings()) + covRcDir = os.path.abspath(context.PROJECT_ROOT) + # Don't actually copy the file, just check the file paths match + covRcFile = case._getCoverageRcFile(makeCopy=False) + if platform.system() == "Windows": + self.assertEqual(covRcFile, os.path.join(covRcDir, "coveragerc")) + else: + self.assertEqual(covRcFile, os.path.join(covRcDir, ".coveragerc")) + def test_startCoverage(self): with directoryChangers.TemporaryDirectoryChanger(): cs = settings.Settings(ARMI_RUN_PATH) diff --git a/armi/context.py b/armi/context.py index 98eb73394..c19f22ef2 100644 --- a/armi/context.py +++ b/armi/context.py @@ -87,8 +87,9 @@ def setMode(cls, mode): ROOT = os.path.abspath(os.path.dirname(__file__)) +PROJECT_ROOT = os.path.join(ROOT, "..") RES = os.path.join(ROOT, "resources") -DOC = os.path.abspath(os.path.join(ROOT, "..", "doc")) +DOC = os.path.abspath(os.path.join(PROJECT_ROOT, "doc")) USER = getpass.getuser() START_TIME = time.ctime() diff --git a/armi/resources/coveragerc b/armi/resources/coveragerc deleted file mode 100644 index 7b36c4722..000000000 --- a/armi/resources/coveragerc +++ /dev/null @@ -1,16 +0,0 @@ -# coveragerc to control coverage.py -[run] -branch = True -omit = - */tests/* - */site-packages/* -# change default .coverage file to something that doesn't have a dot -# because our Windows file server can't handle dots. :s -data_file = coverage_results.cov - -[report] -precision = 4 - -[paths] -source = - armi/ diff --git a/doc/release/0.2.rst b/doc/release/0.2.rst index 99418d59e..16a488a89 100644 --- a/doc/release/0.2.rst +++ b/doc/release/0.2.rst @@ -10,6 +10,7 @@ What's new in ARMI ------------------ #. TBD +#. Cleanup of stale ``coveragerc`` file (`PR#923 `_) #. Added writer style option to ``SettingsWriter`` and added it as arg to modify CLI (`PR#924 `_) Bug fixes