docstr: Asks permission to issue a request to the exchange.
  The primary purpose is to avoid hitting rate limits.
  
  The application will pause if the maximum requests per minute
  permitted by the exchange is exceeded.
  
  Returns
  -------
  bool
docstr_tok: ["Asks","permission","to","issue","a","request","to","the","exchange",".","The","primary","purpose","is","to","avoid","hitting","rate","limits",".","The","application","will","pause","if","the","maximum","requests","per","minute","permitted","by","the","exchange","is","exceeded",".","Returns","--","--","--","-","bool"]
code: def ask_request(self):
      """
      Asks permission to issue a request to the exchange.
      The primary purpose is to avoid hitting rate limits.
  
      The application will pause if the maximum requests per minute
      permitted by the exchange is exceeded.
  
      Returns
      -------
      bool
  
      """
      now = pd.Timestamp.utcnow()
      if not self.request_cpt:
          self.request_cpt = dict()
          self.request_cpt[now] = 0
          return True
  
      cpt_date = list(self.request_cpt.keys())[0]
      cpt = self.request_cpt[cpt_date]
  
      if now > cpt_date + timedelta(minutes=1):
          self.request_cpt = dict()
          self.request_cpt[now] = 0
          return True
  
      if cpt >= self.max_requests_per_minute:
          delta = now - cpt_date
  
          sleep_period = 60 - delta.total_seconds()
          sleep(sleep_period)
  
          now = pd.Timestamp.utcnow()
          self.request_cpt = dict()
          self.request_cpt[now] = 0
          return True
      else:
          self.request_cpt[cpt_date] += 1
  
imports: import abc
  from abc import ABCMeta, abstractmethod, abstractproperty
  from datetime import timedelta
  from time import sleep
  import numpy
  import pandas
  from catalyst.constants import LOG_LEVEL
  from catalyst.data.data_portal import BASE_FIELDS
  from catalyst.exchange.exchange_bundle import ExchangeBundle
  from catalyst.exchange.exchange_errors import MismatchingQuoteCurrencies, SymbolNotFoundOnExchange, PricingDataNotLoadedError, NoDataAvailableOnExchange, NoValueForField, NoCandlesReceivedFromExchange, TickerNotFoundError, NotEnoughCashError
  from catalyst.exchange.utils.datetime_utils import get_delta, get_periods_range, get_periods, get_start_dt, get_frequency, get_candles_number_from_minutes
  from catalyst.exchange.utils.exchange_utils import get_exchange_symbols, resample_history_df, has_bundle, get_candles_df
  from logbook import Logger
label_desc: Use image node_id 6 for calling the Exchange obj's underlying member method code with example usage: obj.ask_request() and returns: True, True, True