code: def make_exchanges_info(cls, *args, **kwargs):
      return pd.DataFrame.from_records(
          [
              {"exchange": "nasdaq", "country_code": "US"},
              {"exchange": "non_us_exchange", "country_code": "CA"},
          ]
      )
  
imports: from nose_parameterized import parameterized
  import pandas
  import numpy
  from mock import patch
  from zipline.errors import UnsupportedOrderParameters
  from zipline.sources.requests_csv import mask_requests_args
  from zipline.utils import factory
  from zipline.testing import FetcherDataPortal
  from zipline.testing.fixtures import WithResponses, WithMakeAlgo, ZiplineTestCase
  from .resources.fetcher_inputs.fetcher_test_data import AAPL_CSV_DATA, AAPL_IBM_CSV_DATA, AAPL_MINUTE_CSV_DATA, CPIAUCSL_DATA, FETCHER_ALTERNATE_COLUMN_HEADER, FETCHER_UNIVERSE_DATA, FETCHER_UNIVERSE_DATA_TICKER_COLUMN, MULTI_SIGNAL_CSV_DATA, NON_ASSET_FETCHER_UNIVERSE_DATA, PALLADIUM_DATA, NFLX_DATA
label_desc: Use image node_id 2 for calling the FetcherTestCase obj's underlying member method code with example usage: obj.make_exchanges_info(cls) and returns: pd