docs: def tweetqueue(ctx, dry_run, config):
      """A command line tool for time-delaying your tweets."""
      ctx.obj = {}
      ctx.obj['DRYRUN'] = dry_run
  
      # If the subcommand is "config", bypass all setup code
      if ctx.invoked_subcommand == 'config':
          return
  
      # If the config file wasn't provided, attempt to load the default one.
      if config is None:
          user_home = os.path.expanduser("~")
          default_config = os.path.join(user_home, ".tweetqueue")
  
          if not os.path.isfile(default_config):
              click.echo("Default configuration was not found and none was provided.")
              click.echo("Run 'tweetqueue config' to create one.")
              ctx.exit(1)
  
          config = open(default_config, 'rb')
  
      try:
          ctx.obj['config'] = json.load(config)
      except Exception as e:
          click.echo("Unable to read configuration file.")
          click.echo("Are you sure it is valid JSON")
          click.echo("JSON Error: " + e.message)
          ctx.exit(1)
  
      # Verify that the config file has all required options
      required_config = [
          'API_KEY',
          'API_SECRET',
          'ACCESS_TOKEN',
          'ACCESS_TOKEN_SECRET',
          'DATABASE_LOCATION'
  
      ]
      if not all(key in ctx.obj['config'] for key in required_config):
          click.echo("Missing required value in config file.")
          ctx.exit(1)
  
      # Make a tweepy api object for the context
      auth = tweepy.OAuthHandler(
          ctx.obj['config']['API_KEY'],
          ctx.obj['config']['API_SECRET']
      )
      auth.set_access_token(
          ctx.obj['config']['ACCESS_TOKEN'],
          ctx.obj['config']['ACCESS_TOKEN_SECRET']
      )
      ctx.obj['TWEEPY_API'] = tweepy.API(auth)
  
  
      ctx.obj['TWEETLIST'] = TweetList(ctx.obj['config']['DATABASE_LOCATION'])