Source code for anuket.scripts.upgradedb

# -*- coding: utf-8 -*-
""" Script for upgrading the Anuket database with Alembic."""
import argparse
import os
import sys
from datetime import date

from alembic.command import upgrade
from pyramid.paster import get_appsettings

from anuket.lib.alembic_utils import get_alembic_settings


def main(argv=None):
    """ Main entry point for the `upgradedb` script."""
    if argv is None:  # pragma: no cover
        argv = sys.argv
    command = UpgradeDBCommand(argv)
    return command.run()


[docs]class UpgradeDBCommand(object): """ Upgrade the database using the configuration from the .ini file passed as a positional argument. """ description = 'Upgrade the database' usage = '%(prog)s config_uri' epilog = 'example: %(prog)s development.ini' parser = argparse.ArgumentParser( description=description, usage=usage, epilog=epilog) parser.add_argument('config_uri', nargs='?', help='the application config file') parser.add_argument('-f', '--force', action='store_true', help='force the upgrade even if there is no available database backup') def __init__(self, argv): """ Get arguments from the ``argparse`` parser.""" self.args = self.parser.parse_args(argv[1:])
[docs] def run(self): """ Run the ``upgrade_db`` method or display the parser help message if the `config_uri` argument is missing. :return: ``upgrade_db`` method or 2 (missing argument error) """ if not self.args.config_uri: self.parser.print_help() return 2 else: return self.upgrade_db()
[docs] def upgrade_db(self): """ Upgrade the database to the head revision with Alembic. :return: 0 (OK) or 1 (abnormal termination error) """ config_uri = self.args.config_uri force = self.args.force settings = get_appsettings(config_uri) name = settings['anuket.brand_name'] directory = settings['anuket.backup_directory'] today = date.today().isoformat() filename = '{0}-{1}.sql.bz2'.format(name, today) path = os.path.join(directory, filename) # check if there is a database backup isfile = os.path.isfile(path) if not isfile and not force: print("There is no up to date backup for the database. " "Please use the backup script before upgrading!") return 1 # upgrade the database alembic_cfg = get_alembic_settings(config_uri) upgrade(alembic_cfg, 'head') print("Database upgrade done.") return 0

Project Versions