diff --git a/pavelib/quality.py b/pavelib/quality.py index 49d39871e8..ae74a107f9 100644 --- a/pavelib/quality.py +++ b/pavelib/quality.py @@ -198,6 +198,25 @@ def _count_pep8_violations(report_file): return num_lines +@task +@needs('pavelib.prereqs.install_python_prereqs') +def run_complexity(): + """ + Uses radon to examine cyclomatic complexity. + For additional details on radon, see http://radon.readthedocs.org/ + """ + system_string = 'cms/ lms/ common/ openedx/' + print "--> Calculating cyclomatic complexity of files..." + try: + sh( + "radon cc {system_string} --total-average".format( + system_string=system_string + ) + ) + except BuildFailure: + print "ERROR: Unable to calculate python-only code-complexity." + + @task @needs('pavelib.prereqs.install_python_prereqs') @cmdopts([ diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index 539b6259b7..9dfb926cbd 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -142,6 +142,7 @@ pep8==1.5.7 PyContracts==1.7.1 pylint==1.4.1 python-subunit==0.0.16 +radon==1.2 rednose==0.3 selenium==2.42.1 splinter==0.5.4 diff --git a/scripts/all-tests.sh b/scripts/all-tests.sh index d7dfbdd6b1..c55183293b 100755 --- a/scripts/all-tests.sh +++ b/scripts/all-tests.sh @@ -79,9 +79,10 @@ case "$TEST_SUITE" in # Run quality task. Pass in the 'fail-under' percentage to diff-quality paver run_quality -p 100 + mkdir -p reports + paver run_complexity > reports/code_complexity.log || echo "Unable to calculate code complexity. Ignoring error." # Need to create an empty test result so the post-build # action doesn't fail the build. - mkdir -p reports cat > reports/quality.xml <