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: Store a preprocessor with the checkpoint.
docstr_tok: ["Store","a","preprocessor","with","the","checkpoint","."]
code: def set_preprocessor(self, preprocessor: Preprocessor):
      """Store a preprocessor with the checkpoint."""
      self.update_metadata(
          {
              PREPROCESSOR_KEY: binary_to_hex(
                  ray_pickle.dumps(preprocessor)
              )
          }
      )
  
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 2 for calling the FrameworkCheckpoint obj's underlying member method code with example usage: obj.set_preprocessor(preprocessor) without return types