docs: def process_bucket_set(account_info, buckets):
      """Process a collection of buckets.
  
      For each bucket fetch location, versioning and size and
      then kickoff processing strategy based on size.
      """
      region_clients = {}
      log = logging.getLogger('salactus.bucket-set')
      log.info("processing account %s", account_info)
      session = get_session(account_info)
      client = session.client('s3', config=s3config)
  
      for b in buckets:
          bid = bucket_id(account_info, b)
          with bucket_ops(bid):
              info = {'name': b}
              error = None
  
              try:
                  location = client.get_bucket_location(
                      Bucket=b).get('LocationConstraint')
              except Exception as e:
                  error = e
                  location = None
  
              if location is None:
                  region = "us-east-1"
              elif location == 'EU':
                  region = "eu-west-1"
              else:
                  region = location
  
              if (account_info.get('regions', ()) and
                      region not in account_info.get('regions', ())):
                  continue
  
              info['region'] = region
              if region not in region_clients:
                  region_clients.setdefault(region, {})
                  region_clients[region]['s3'] = s3 = session.client(
                      's3', region_name=region, config=s3config)
                  region_clients[region]['cloudwatch'] = cw = session.client(
                      'cloudwatch', region_name=region, config=s3config)
              else:
                  s3 = region_clients[region]['s3']
                  cw = region_clients[region]['cloudwatch']
  
              try:
                  info['keycount'] = bucket_key_count(cw, info)
              except Exception:
                  raise
              else:
                  connection.hset('bucket-sizes', bid, info['keycount'])
  
              if error:
                  raise error
  
              connection.hset('bucket-regions', bid, region)
  
              versioning = s3.get_bucket_versioning(Bucket=b)
              info['versioned'] = (
                  versioning and versioning.get('Status', '')
                  in ('Enabled', 'Suspended') or False)
              connection.hset('bucket-versions', bid, int(info['versioned']))
  
              log.info("processing bucket %s", info)
              connection.hset('bucket-starts', bid, time.time())
              dispatch_object_source(s3, account_info, bid, info)