docstr: Fetching price history window from the exchange.
  
  Parameters
  ----------
  exchange_name: Exchange
  assets: list[TradingPair]
  end_dt: datetime
  bar_count: int
  frequency: str
  field: str
  data_frequency: str
  ffill: bool
  
  Returns
  -------
  DataFrame
docstr_tok: ["Fetching","price","history","window","from","the","exchange",".","Parameters","--","--","--","--","--","exchange_name",":","Exchange","assets",":","list","[","TradingPair","]","end_dt",":","datetime","bar_count",":","int","frequency",":","str","field",":","str","data_frequency",":","str","ffill",":","bool","Returns","--","--","--","-","DataFrame"]
code: def get_exchange_history_window(
      self,
      exchange_name,
      assets,
      end_dt,
      bar_count,
      frequency,
      field,
      data_frequency,
      ffill=True,
  ):
      """
      Fetching price history window from the exchange.
  
      Parameters
      ----------
      exchange_name: Exchange
      assets: list[TradingPair]
      end_dt: datetime
      bar_count: int
      frequency: str
      field: str
      data_frequency: str
      ffill: bool
  
      Returns
      -------
      DataFrame
  
      """
      exchange = self.exchanges[exchange_name]
  
      df = exchange.get_history_window(
          assets,
          end_dt,
          bar_count,
          frequency,
          field,
          data_frequency,
          False,
      )
      return df
  
imports: import abc
  import datetime
  import numpy
  import pandas
  from catalyst.assets._assets import TradingPair
  from catalyst.constants import LOG_LEVEL, AUTO_INGEST
  from catalyst.data.data_portal import DataPortal
  from catalyst.exchange.exchange_bundle import ExchangeBundle
  from catalyst.exchange.exchange_errors import ExchangeRequestError, PricingDataNotLoadedError
  from catalyst.exchange.utils.exchange_utils import resample_history_df, group_assets_by_exchange
  from catalyst.exchange.utils.datetime_utils import get_frequency, get_start_dt
  from logbook import Logger
  from redo import retry
label_desc: Use image node_id 2 for calling the DataPortalExchangeLive obj's underlying member method code with example usage: obj.get_exchange_history_window(exchange_name, assets, end_dt, bar_count, frequency, field, data_frequency, ffill) and returns: df