code: def run(self, messages):
          
          files = {}
          # TODO(albert): move this to AnalyticsProtocol
          if self.args.submit:
              files['submit'] = True
          for file in self.assignment.src:
              if not self.is_file(file):
                  # TODO(albert): add an error message
                  contents = ''
                  log.warning('File {} does not exist'.format(file))
              else:
                  contents = self.read_file(file)
                  log.info('Loaded contents of {} to send to server'.format(file))
              files[file] = contents
  
          messages['file_contents'] = files
docs: Find all source files and return their complete contents.
  
          Source files are considered to be files listed self.assignment.src.
          If a certain source filepath is not a valid file (e.g. does not exist
          or is not a file), then the contents associated with that filepath will
          be an empty string.
  
          RETURNS:
          dict; a mapping of source filepath -> contents as strings.