code: def _per_file_event_handler(self):
          
          file_event_handler = PatternMatchingEventHandler()
          file_event_handler.on_created = self._on_file_created
          file_event_handler.on_modified = self._on_file_modified
          file_event_handler.on_moved = self._on_file_moved
          file_event_handler._patterns = [
              os.path.join(self._watch_dir, os.path.normpath('*'))]
          # Ignore hidden files/folders and output.log because we stream it specially
          file_event_handler._ignore_patterns = [
              '*/.*',
              '*.tmp',
              os.path.join(self._run.dir, OUTPUT_FNAME)
          ]
          for glob in self._api.settings("ignore_globs"):
              file_event_handler._ignore_patterns.append(
                  os.path.join(self._run.dir, glob))
  
          return file_event_handler
docs: Create a Watchdog file event handler that does different things for every file