def run (args): """Removes all Mygrate data (cancels mygrate init).""" cmds.init.require_init() path = repo.repopath() + '/.mygrate' print "Removing everything under %s." % path utils.shell ('rm -rf %s' % path) print "Mygrate repo successfully removed. Use mygrate init to reinitialize it."
def config(): path = os.path.join (repo.repopath(), PATH_CONF_MAIN) try: config = ConfigObj(path) return config except IOError: return False return False
def revisions(): path = os.path.join (repo.repopath(), PATH_REV_MAIN) try: config = ConfigObj(path) return config except IOError: return False return False
def latest_number(): """Returns greates migration number available.""" config = cmds.init.config() MIGRATION_DIR = config["migrations_dir"] MIGRATION_DIR = os.path.join (repo.repopath(), MIGRATION_DIR) migration_numbers = [int(file[0:3]) for file in os.listdir (MIGRATION_DIR)] if not len (migration_numbers): return 0 return max (migration_numbers)
def add(number, sqlUp, sqlDown, message): """Adds a new migration.""" config = cmds.init.config() MIGRATION_DIR = config["migrations_dir"] MIGRATION_DIR = os.path.join (repo.repopath(), MIGRATION_DIR) PATH = MIGRATION_DIR + "/%s-%s.conf" numberWithZeros = str(number).zfill(3) messageAlias = message.lower().replace (' ', '_').replace ('.', '').replace ('`', '').replace ("\n", '').replace(':', '')[0:16] revision = ConfigObj (PATH % (numberWithZeros, messageAlias)) revision["number"] = number revision["message"] = message revision["up"] = sqlUp revision["down"] = sqlDown revision["author"] = current_user() revision["date"] = str(datetime.datetime.today()) revision.write()
def __init__ (self, number): """Create a new migration""" config = cmds.init.config() MIGRATION_DIR = config["migrations_dir"] MIGRATION_DIR = os.path.join (repo.repopath(), MIGRATION_DIR) self.number = '' self.message = '' self.sqlUp = '' self.sqlDown = '' self.filename = '' self.author = '' self.date = '' self.state_to_rollback = db.dump.restore_point() numberWithZeros = str(number).zfill(3) filename = [file for file in os.listdir (MIGRATION_DIR) if file.startswith(numberWithZeros)][0] self.__from_file (MIGRATION_DIR + os.sep + filename)
#!/usr/bin/env python import cmds.init import db.dump import sys import cPickle import repo.migration import os.path import repo HISTORY_PATH = ".mygrate/store/history" HISTORY_PATH = os.path.join (repo.repopath(), HISTORY_PATH) def load(): return History() def refresh(): History().get_fresh_from_migrations().save() class History: def __init__ (self): self.History = { } try: self.History = cPickle.load(open(HISTORY_PATH)) current_history = self.History self.get_fresh_from_migrations() if current_history != self.History: self.save() except: pass
#!/usr/bin/env python import cmds.init import db.dump import sys import os.path import repo REV_PATH = ".mygrate/store/%s.sql" REV_PATH = os.path.join (repo.repopath(), REV_PATH) def set_current(number): revisions = cmds.init.revisions() revisions["current"] = number revisions.write() def current(): return latest_number() def latest_number(): """Returns number of latest revision.""" revisions = cmds.init.revisions() return int(revisions["current"]) def latest(): """Returns latest state of SQL saved or empty string if there are no revisions yet.""" current = latest_number() if current <= 0: return '' return open (REV_PATH % current).read()