code: def create_general_options(config, action):
      # type: (dict, TransferAction) -> blobxfer.models.options.General
      
      conc = config['options']['concurrency']
      # split http proxy host into host:port
      proxy = None
      if blobxfer.util.is_not_empty(config['options']['proxy']['host']):
          tmp = config['options']['proxy']['host'].split(':')
          if len(tmp) != 2:
              raise ValueError('Proxy host is malformed: host should be ip:port')
          username = config['options']['proxy']['username']
          if blobxfer.util.is_none_or_empty(username):
              username = None
          password = config['options']['proxy']['password']
          if blobxfer.util.is_none_or_empty(password):
              password = None
          proxy = blobxfer.models.options.HttpProxy(
              host=tmp[0],
              port=int(tmp[1]),
              username=username,
              password=password,
          )
      return blobxfer.models.options.General(
          concurrency=blobxfer.models.options.Concurrency(
              crypto_processes=conc['crypto_processes'],
              disk_threads=conc['disk_threads'],
              md5_processes=conc['md5_processes'],
              transfer_threads=conc['transfer_threads'],
              action=action.value[0],
          ),
          log_file=config['options']['log_file'],
          progress_bar=config['options']['progress_bar'],
          resume_file=config['options']['resume_file'],
          # TODO deprecated timeout setting
          timeout=blobxfer.models.options.Timeout(
              connect=(
                  config['options']['timeout']['connect'] or
                  config['options']['timeout']['timeout']
              ),
              read=(
                  config['options']['timeout']['read'] or
                  config['options']['timeout']['timeout']
              ),
              max_retries=config['options']['timeout']['max_retries'],
          ),
          verbose=config['options']['verbose'],
          quiet=config['options']['quiet'],
          dry_run=config['options']['dry_run'],
          proxy=proxy,
      )
docs: Create a General Options object from configuration
      :param dict config: config dict
      :param TransferAction action: transfer action
      :rtype: blobxfer.models.options.General
      :return: general options object