code: def _parse_singlefile(self, desired_type: Type[T], file_path: str, encoding: str, logger: Logger,
                            options: Dict[str, Dict[str, Any]]) -> T:
          
          opts = get_options_for_id(options, self.get_id_for_options())
  
          if self._streaming_mode:
  
              # We open the stream, and let the function parse from it
              file_stream = None
              try:
                  # Open the file with the appropriate encoding
                  file_stream = open(file_path, 'r', encoding=encoding)
  
                  # Apply the parsing function
                  if self.function_args is None:
                      return self._parser_func(desired_type, file_stream, logger, **opts)
                  else:
                      return self._parser_func(desired_type, file_stream, logger, **self.function_args, **opts)
  
              except TypeError as e:
                  raise CaughtTypeError.create(self._parser_func, e)
  
              finally:
                  if file_stream is not None:
                      # Close the File in any case
                      file_stream.close()
  
          else:
              # the parsing function will open the file itself
              if self.function_args is None:
                  return self._parser_func(desired_type, file_path, encoding, logger, **opts)
              else:
                  return self._parser_func(desired_type, file_path, encoding, logger, **self.function_args, **opts)
docs: Relies on the inner parsing function to parse the file.
          If _streaming_mode is True, the file will be opened and closed by this method. Otherwise the parsing function
          will be responsible to open and close.
  
          :param desired_type:
          :param file_path:
          :param encoding:
          :param options:
          :return: