1import os.path 2import sys 3from _pydevd_bundle.pydevd_constants import Null 4 5 6#======================================================================================================================= 7# get_coverage_files 8#======================================================================================================================= 9def get_coverage_files(coverage_output_dir, number_of_files): 10 base_dir = coverage_output_dir 11 ret = [] 12 i = 0 13 while len(ret) < number_of_files: 14 while True: 15 f = os.path.join(base_dir, '.coverage.%s' % i) 16 i += 1 17 if not os.path.exists(f): 18 ret.append(f) 19 break #Break only inner for. 20 return ret 21 22 23#======================================================================================================================= 24# start_coverage_support 25#======================================================================================================================= 26def start_coverage_support(configuration): 27 return start_coverage_support_from_params( 28 configuration.coverage_output_dir, 29 configuration.coverage_output_file, 30 configuration.jobs, 31 configuration.coverage_include, 32 ) 33 34 35#======================================================================================================================= 36# start_coverage_support_from_params 37#======================================================================================================================= 38def start_coverage_support_from_params(coverage_output_dir, coverage_output_file, jobs, coverage_include): 39 coverage_files = [] 40 coverage_instance = Null() 41 if coverage_output_dir or coverage_output_file: 42 try: 43 import coverage #@UnresolvedImport 44 except: 45 sys.stderr.write('Error: coverage module could not be imported\n') 46 sys.stderr.write('Please make sure that the coverage module (http://nedbatchelder.com/code/coverage/)\n') 47 sys.stderr.write('is properly installed in your interpreter: %s\n' % (sys.executable,)) 48 49 import traceback;traceback.print_exc() 50 else: 51 if coverage_output_dir: 52 if not os.path.exists(coverage_output_dir): 53 sys.stderr.write('Error: directory for coverage output (%s) does not exist.\n' % (coverage_output_dir,)) 54 55 elif not os.path.isdir(coverage_output_dir): 56 sys.stderr.write('Error: expected (%s) to be a directory.\n' % (coverage_output_dir,)) 57 58 else: 59 n = jobs 60 if n <= 0: 61 n += 1 62 n += 1 #Add 1 more for the current process (which will do the initial import). 63 coverage_files = get_coverage_files(coverage_output_dir, n) 64 os.environ['COVERAGE_FILE'] = coverage_files.pop(0) 65 66 coverage_instance = coverage.coverage(source=[coverage_include]) 67 coverage_instance.start() 68 69 elif coverage_output_file: 70 #Client of parallel run. 71 os.environ['COVERAGE_FILE'] = coverage_output_file 72 coverage_instance = coverage.coverage(source=[coverage_include]) 73 coverage_instance.start() 74 75 return coverage_files, coverage_instance 76 77