def report(self, morfs=None):
units = None<EOL>if hasattr(self, '<STR_LIT>'):<EOL><INDENT>self.find_code_units(morfs)<EOL><DEDENT>else:<EOL><INDENT>units = self.find_file_reporters(morfs)<EOL><DEDENT>if units is None:<EOL><INDENT>if hasattr(self, '<STR_LIT>'):<EOL><INDENT>units = self.code_units<EOL><DEDENT>else:<EOL><INDENT>units = self.file_reporters<EOL><DEDENT><DEDENT>for cu in units:<EOL><INDENT>try:<EOL><INDENT>analyzed = self.coverage._analyze(cu)  <EOL>self.parse_file(cu, analyzed)<EOL><DEDENT>except NoSource:<EOL><INDENT>if not self.config.ignore_errors:<EOL><INDENT>log.warning('<STR_LIT>', cu.filename)<EOL><DEDENT><DEDENT>except NotPython:<EOL><INDENT>if cu.should_be_python() and not self.config.ignore_errors:<EOL><INDENT>log.warning('<STR_LIT>', cu.filename)<EOL><DEDENT><DEDENT>except KeyError:<EOL><INDENT>cov3x = __version__[<NUM_LIT:0>] < <NUM_LIT:4><EOL>cov40 = __version__[<NUM_LIT:0>] == <NUM_LIT:4> and __version__[<NUM_LIT:1>] < <NUM_LIT:1><EOL>if cov3x or cov40:<EOL><INDENT>raise CoverallsException(<EOL>'<STR_LIT>'<EOL>'<STR_LIT>'<EOL>'<STR_LIT>'<EOL>)<EOL><DEDENT>raise<EOL><DEDENT><DEDENT>return self.source_files<EOL>
Generate a part of json report for coveralls

`morfs` is a list of modules or filenames.
`outfile` is a file object to write the json to.