class_docstr: A connector that wraps around existing RLlib observation preprocessors.
  
  This includes:
  - OneHotPreprocessor for Discrete and Multi-Discrete spaces.
  - GenericPixelPreprocessor and AtariRamPreprocessor for Atari spaces.
  - TupleFlatteningPreprocessor and DictFlatteningPreprocessor for flattening
    arbitrary nested input observations.
  - RepeatedValuesPreprocessor for padding observations from RLlib Repeated
    observation space.
code: def __init__(self, ctx: ConnectorContext):
      super().__init__(ctx)
  
      if hasattr(ctx.observation_space, "original_space"):
          # ctx.observation_space is the space this Policy deals with.
          # We need to preprocess data from the original observation space here.
          obs_space = ctx.observation_space.original_space
      else:
          obs_space = ctx.observation_space
  
      self._preprocessor = get_preprocessor(obs_space)(
          obs_space, ctx.config.get("model", {})
      )
  
file_path: ray/python/ray/rllib/connectors/agent/obs_preproc.py
imports: from typing import Any
  from ray.rllib.connectors.connector import AgentConnector, ConnectorContext
  from ray.rllib.connectors.registry import register_connector
  from ray.rllib.models.preprocessors import get_preprocessor, NoPreprocessor
  from ray.rllib.policy.sample_batch import SampleBatch
  from ray.rllib.utils.typing import AgentConnectorDataType
  from ray.util.annotations import PublicAPI
label_desc: Use image node_id 1 to create a new ObsPreprocessorConnector object from inherited base classes: AgentConnector with example: obj = ObsPreprocessorConnector(ctx)