class_docstr: A checkpoint to preserve the functionality of legacy
  framework-specific checkpoints.
  
  Example:
  
      >>> import tempfile
      >>> checkpoint = FrameworkCheckpoint(tempfile.mkdtemp())
      >>> checkpoint.get_preprocessor() is None
      True
      >>> preprocessor = Preprocessor()
      >>> preprocessor._attr = 1234
      >>> checkpoint.set_preprocessor(preprocessor)
      >>> checkpoint.get_preprocessor()._attr
      1234
docstr: Return the preprocessor stored in the checkpoint.
  
  Returns:
      The preprocessor stored in the checkpoint, or ``None`` if no
      preprocessor was stored.
docstr_tok: ["Return","the","preprocessor","stored","in","the","checkpoint",".","Returns",":","The","preprocessor","stored","in","the","checkpoint",",","or","``","None","``","if","no","preprocessor","was","stored","."]
code: def get_preprocessor(self) -> Optional[Preprocessor]:
      """Return the preprocessor stored in the checkpoint.
  
      Returns:
          The preprocessor stored in the checkpoint, or ``None`` if no
          preprocessor was stored.
      """
      metadata = self.get_metadata()
      preprocessor_bytes = metadata.get(PREPROCESSOR_KEY)
      if preprocessor_bytes is None:
          return None
      return ray_pickle.loads(hex_to_binary(preprocessor_bytes))
  
file_path: ray/python/ray/train/_internal/framework_checkpoint.py
imports: from typing import Optional
  import ray.cloudpickle
  from ray._private.utils import binary_to_hex, hex_to_binary
  from ray.data.preprocessor import Preprocessor
  from ray.train._checkpoint import Checkpoint
label_desc: Use image node_id 1 for calling the FrameworkCheckpoint obj's underlying member method code with example usage: obj.get_preprocessor() and returns: ray_pickle, None