text: from datetime import datetime
  from binance_downloader.binance_api_v3 import BinanceAPIV3
  from binance_downloader.binance_utils import str_to_date
  from binance_downloader.manager import Manager
  import click
  
  @click.group()
  def cli():
      pass
  
  
  @cli.command(help='Get kline by symbol pair name')
  @click.argument('symbol')
  @click.option('--interval', default='1m', show_default=True, help='Binance Kline interval')
  @click.option('--start', required=True, help=' Start date string in UTC format')
  @click.option('--end', help='end date string in UTC format')
  @click.option('--limit', default=500, show_default=True, help='Default 500; max 1000.')
  @click.option('--klines-type', default='SPOT', show_default=True, help='Historical klines type: SPOT or FUTURES')
  def symbol(symbol, interval, start, end, limit, klines_type):
      start = str_to_date(start)
      end = str_to_date(end)
  
      api = BinanceAPIV3()
      binance = Manager(api, limit, symbol, start, end, interval, klines_type)
      binance.fetch_parallel()
      binance.write_to_csv()
  
  
  @cli.command(help='Get klines by quote asset name')
  @click.argument('quote')
  @click.option('--interval', default='1m', show_default=True, help='Binance Kline interval')
  @click.option('--start', required=True, help=' Start date string in UTC format')
  @click.option('--end', help='end date string in UTC format')
  @click.option('--limit', default=500, show_default=True, help='Default 500; max 1000.')
  @click.option('--klines-type', default='SPOT', show_default=True, help='Historical klines type: SPOT or FUTURES')
  def quote(quote, interval, start, end, limit, klines_type):
      start = str_to_date(start)
      end = str_to_date(end) if end else datetime.now().date()
  
      api = BinanceAPIV3()
      binance = Manager(
          api, limit, '', start, end, interval, klines_type)
      binance.fetch_klines_by_quote(quote)