@gen.engine
def RunOnce(callback):
 dry_run = options.options.dry_run
 client_store = ObjectStore.GetInstance(logs_util.UserAnalyticsLogsPaths.SOURCE_LOGS_BUCKET)
 if options.options.user:
  users = [options.options.user]
 else:
  users = (yield gen.Task(logs_util.ListClientLogUsers, client_store))
 examined = 0
 for u in users:
  if ((options.options.start_user is not None) and (u < options.options.start_user)):
   continue
  if ((options.options.max_users is not None) and (examined > options.options.max_users)):
   break
  examined += 1
  (yield gen.Task(HandleOneUser, client_store, u))
 if dry_run:
  logging.warning('dry_run=True: will not upload processed logs files or update registry')
 callback()

@ gen . engine def RunOnce ( callback ) : dry_run = options . options . dry_run client_store = ObjectStore . GetInstance ( logs_util . UserAnalyticsLogsPaths . SOURCE_LOGS_BUCKET ) if options . options . user : users = [ options . options . user ] else : users = ( yield gen . Task ( logs_util . ListClientLogUsers , client_store ) ) examined = 0 for u in users : if ( ( options . options . start_user is not None ) and ( u < options . options . start_user ) ) : continue if ( ( options . options . max_users is not None ) and ( examined > options . options . max_users ) ) : break examined += 1 ( yield gen . Task ( HandleOneUser , client_store , u ) ) if dry_run : logging . warning ( 'dry_run=True: will not upload processed logs files or update registry' ) callback ( )
find last successful run .