code: def get_orderbook(self, asset, order_type="all", limit=None):
      ccxt_symbol = self.get_symbol(asset)
  
      order_book = self.api.fetch_order_book(ccxt_symbol, limit=limit)
  
      order_types = (
          ["bids", "asks"] if order_type == "all" else [order_type]
      )
      result = dict(
          last_traded=from_ms_timestamp(order_book["timestamp"])
      )
      for index, order_type in enumerate(order_types):
          result[order_type] = []
  
          if limit is not None and len(order_book[order_type]) > limit:
              order_book[order_type] = order_book[order_type][:limit]
  
          for entry in order_book[order_type]:
              result[order_type].append(
                  dict(rate=float(entry[0]), quantity=float(entry[1]))
              )
  
      return result
  
imports: import copy
  import json
  import os
  import re
  from collections import defaultdict
  import ccxt
  import pandas
  import six
  from ccxt import InvalidOrder, NetworkError, ExchangeError, RequestTimeout
  from logbook import Logger
  from six import string_types
  from catalyst.algorithm import MarketOrder
  from catalyst.assets._assets import TradingPair
  from catalyst.constants import LOG_LEVEL
  from catalyst.exchange.exchange import Exchange
  from catalyst.exchange.exchange_bundle import ExchangeBundle
  from catalyst.exchange.exchange_errors import InvalidHistoryFrequencyError, ExchangeSymbolsNotFound, ExchangeRequestError, InvalidOrderStyle, ExchangeNotFoundError, CreateOrderError, InvalidHistoryTimeframeError, UnsupportedHistoryFrequencyError
  from catalyst.exchange.exchange_execution import ExchangeLimitOrder
  from catalyst.exchange.utils.exchange_utils import mixin_market_params, get_exchange_folder, get_catalyst_symbol, get_exchange_auth
  from catalyst.exchange.utils.datetime_utils import from_ms_timestamp, get_epoch, get_periods_range
  from catalyst.finance.order import Order, ORDER_STATUS
  from catalyst.finance.transaction import Transaction
  from redo import retry
label_desc: Use image node_id 34 for calling the CCXT obj's underlying member method code with example usage: obj.get_orderbook(asset, order_type, limit) and returns: result