Example #1
0
def schema_files(logger, schema_dir):
  task = listdir(schema_dir).fmap(matching_schema_files)
  msgs = lambda files: ([
           "no local schema migrations found" if len(files)==0 else (
             "total local schema migrations: %d" % len(files)
           )
         ])
  return logresult_info(msgs,logger,task)
Example #2
0
def db_current_version(logger, dbcmd, table="_version_" ):
  
  sql = (
    """
    SELECT version FROM `%s` WHERE id = (SELECT MAX(id) FROM `%s` WHERE revert=0);
    """
  ) % (table, table)

  task = (tempfile(sql) >> db_getvalue(dbcmd,'version')) >> (
           reject_unless(NoValueFoundError('version'))
         )
  msgs = lambda v: ["database version: %s" % v]
  return logresult_info(msgs, logger, task)
Example #3
0
def schema_version_undo_files(logger, dbcmd, schema_dir, table="_version_"):
  matcher = flip(applyf)(matching_schema_undo_files_for_version)
  versiontask = db_current_version(logger, dbcmd, table)
  listtask = schema_undo_files(logger, schema_dir)
  task = Task.all([ versiontask, listtask ]).fmap( matcher )
  msgs = lambda files: ([
           "no undo migrations found, add new schema migration file(s) to revert changes" if len(files)==0 else (
             "undo migration found: %s" % files[0] if len(files)==1 else (
               "undo migrations found: %d\n%s" % (len(files), "\n".join(files))
             )
           )
         ])
  return logresult_info(msgs,logger,task)
Example #4
0
def check(logger, dbcmd, schema_dir, table="_version_" ):
  matcher = flip(applyf)(split_schema_files_at_version)
  snd = lambda (_,x): x
  
  task = Task.all([
           db_current_version(logger,dbcmd,table),
           schema_files(logger,schema_dir)
         ]).fmap( matcher )
  
  msgs = lambda (previous,pending): (
           [ "no schema migrations applied" if len(previous) == 0 else (
               "schema migrations applied: %d\nlatest: %s" % (
                 len(previous), previous[-1] )
             ),
             "no pending schema migrations found" if len(pending) == 0 else (
              "pending schema migrations found: %d\n%s" % (
                len(pending), "\n".join([os.path.basename(f) for f in pending])  )
             )
           ]
         )

  return logtask("Checking current state", logger, 
           logresult_info(msgs, logger, task).fmap(snd)
         )