示例#1
0
def evolve(args, instance):
    print >> args.out, "=" * 78
    print >> args.out, "Instance: ", instance
    root, closer = args.get_root(instance)
    set_current_instance(instance)

    managers = list(getUtilitiesFor(IEvolutionManager))

    for pkg_name, factory in managers:
        __import__(pkg_name)
        pkg = sys.modules[pkg_name]
        VERSION = pkg.VERSION
        print >> args.out, 'Package %s' % pkg_name
        manager = factory(root, pkg_name, VERSION, 0)
        db_version = manager.get_db_version()
        print >> args.out, 'Code at software version %s' % VERSION
        print >> args.out, 'Database at version %s' % db_version
        if VERSION <= db_version:
            print >> args.out, 'Nothing to do'
        elif args.latest:
            evolve_to_latest(manager)
            ver = manager.get_db_version()
            print >> args.out, 'Evolved %s to %s' % (pkg_name, ver)
        else:
            print >> args.out, 'Not evolving (use --latest to do actual evolution)'
        print >> args.out, ''

    transaction.commit()
def run_evolve(*args):
    description = """\
    Run evolve script(s) to make changes to the database when the application is upgraded.  Example:
    'evolve development.ini'
    """
    usage = "usage: %prog config_uri"
    parser = optparse.OptionParser(
        usage=usage,
        description=textwrap.dedent(description)
        )
    options, args = parser.parse_args(sys.argv[1:])
    if not len(args) >= 1:
        print('You must provide at least one argument')
        return 2
    config_uri = args[0]
    env = bootstrap(config_uri)
    root = env['root']
    try:
        manager = ZODBEvolutionManager(root, evolve_packagename = 'madetomeasure.evolve',
                                       sw_version = VERSION,
                                       initial_db_version = 0)
        ver = manager.get_db_version()
        if ver < VERSION:
            evolve_to_latest(manager)
            print 'Evolved from %s to %s' % (ver, manager.get_db_version())
        else:
            print 'Already evolved to latest version'
    finally:
        env['closer']
示例#3
0
def main(*argv, **kwargs):
    config_file = sys.argv[-1]
    settings = get_appsettings(config_file)
    config = Configurator(settings=settings)
    manager = get_manager(config)
    if manager.get_db_version() >= manager.get_sw_version():
        sys.stdout.write('Your database is already up do date... ')
    else:
        sys.stdout.write('Your database need to be updated... ')
        evolve_to_latest(manager)
    sys.stdout.write('Done!\n')
示例#4
0
def main(*argv, **kwargs):
    logger = logging.getLogger()
    # logger.disabled = True
    config_file = sys.argv[-1]
    settings = get_appsettings(config_file)
    config = Configurator(settings=settings)
    manager = get_manager(config)
    if manager.get_db_version() >= manager.get_sw_version():
        sys.stdout.write("Your database is already up do date... ")
    else:
        sys.stdout.write("Your database need to be updated... ")
        evolve_to_latest(manager)
        manager.evolve_to_current()
    sys.stdout.write("Done!\n")
示例#5
0
 def evolve(self):
     if self.needs_upgrade:
         logger.info("Running evolve with package '%s'. Current version: %s - target version: %s",
                     self.name, self.db_version, self.sw_version)
         missing = self.check_requirements()
         if missing:
             msg = "Version requirements not met. The following are required:\n"
             for (name, ver) in missing.items():
                 msg += "%s: %s\n" % (name, ver)
             raise EvolverVersionError(msg)
         manager = self.get_manager()
         evolve_to_latest(manager)
     else:
         logger.debug("'%s' is already up to date.", self.name)
示例#6
0
def main(argv=sys.argv):
    worker = ScriptWorker('evolve')
    root = worker.root
    
    print 'Evolve site'
    print "\n"
    manager = ZODBEvolutionManager(root, evolve_packagename='voteit.core.evolve', sw_version=VERSION, initial_db_version=0)
    ver = manager.get_db_version()
    if ver < VERSION:
        evolve_to_latest(manager)
        print 'Evolved from %s to %s' % (ver, manager.get_db_version())
    else:
        print 'Already evolved to latest version'
    
    worker.shutdown()
示例#7
0
def evolve_database(root, sw_version, initial_db_version=0):
    from repoze.evolution import ZODBEvolutionManager, evolve_to_latest
    manager = ZODBEvolutionManager(
        root, evolve_packagename='pyGallerid.evolve',
        sw_version=sw_version,
        initial_db_version=initial_db_version
    )
    db_version = manager.get_db_version()
    sw_version = manager.get_sw_version()
    if db_version < sw_version:
        logger.info('Evolving database from %d to %d ...' \
                    % (db_version, sw_version))
    evolve_to_latest(manager)
    if db_version < sw_version:
        logger.info('Finished evolving of the database.')
示例#8
0
def main(argv=sys.argv):
    parser = create_karl_argparser(
        description='Bring database up to date with code.')
    parser.add_argument('--latest',
                        action='store_true',
                        help='Update to latest versions.')
    parser.add_argument('--force-version',
                        dest='force_version',
                        help='Force to run again.',
                        type=int)
    args = parser.parse_args(argv[1:])
    out = args.out

    env = args.bootstrap(args.config_uri)

    root = env['root']

    print >> out, "=" * 78

    managers = list(getUtilitiesFor(IEvolutionManager))

    for pkg_name, factory in managers:
        __import__(pkg_name)
        pkg = sys.modules[pkg_name]
        VERSION = pkg.VERSION
        print >> out, 'Package %s' % pkg_name
        manager = factory(root, pkg_name, VERSION, 0)
        if args.force_version:
            manager.set_db_version(args.force_version)
        db_version = manager.get_db_version()
        print >> out, 'Code at software version %s' % VERSION
        print >> out, 'Database at version %s' % db_version
        if VERSION <= db_version:
            print >> out, 'Nothing to do'
        elif args.latest:
            evolve_to_latest(manager)
            ver = manager.get_db_version()
            print >> out, 'Evolved %s to %s' % (pkg_name, ver)
        else:
            print >> out, 'Not evolving (use --latest to do actual evolution)'
        print >> out, ''

    transaction.commit()
示例#9
0
文件: evolve.py 项目: lslaz1/karl
def main(argv=sys.argv):
    parser = create_karl_argparser(
        description='Bring database up to date with code.'
        )
    parser.add_argument('--latest', action='store_true',
                        help='Update to latest versions.')
    parser.add_argument('--force-version', dest='force_version',
                        help='Force to run again.', type=int)
    args = parser.parse_args(argv[1:])
    out = args.out

    env = args.bootstrap(args.config_uri)

    root = env['root']

    print >> out, "=" * 78

    managers = list(getUtilitiesFor(IEvolutionManager))

    for pkg_name, factory in managers:
        __import__(pkg_name)
        pkg = sys.modules[pkg_name]
        VERSION = pkg.VERSION
        print >> out, 'Package %s' % pkg_name
        manager = factory(root, pkg_name, VERSION, 0)
        if args.force_version:
            manager.set_db_version(args.force_version)
        db_version = manager.get_db_version()
        print >> out, 'Code at software version %s' % VERSION
        print >> out, 'Database at version %s' % db_version
        if VERSION <= db_version:
            print >> out, 'Nothing to do'
        elif args.latest:
            evolve_to_latest(manager)
            ver = manager.get_db_version()
            print >> out, 'Evolved %s to %s' % (pkg_name, ver)
        else:
            print >> out, 'Not evolving (use --latest to do actual evolution)'
        print >> out, ''

    transaction.commit()
示例#10
0
    if package and package not in [x[0] for x in managers]:
        usage('No such package "%s"' % package)

    for pkg_name, factory in managers:
        if (package is None) or (pkg_name == package):
            __import__(pkg_name)
            pkg = sys.modules[pkg_name]
            VERSION = pkg.VERSION
            print 'Package %s' % pkg_name
            manager = factory(root, pkg_name, VERSION, 0)
            db_version = manager.get_db_version()
            print 'Code at software version %s' % VERSION
            print 'Database at version %s' % db_version
            if set_version is not None:
                manager._set_db_version(set_version)
                manager.transaction.commit()
                print 'Database version set to %s' % set_version
            else:
                if VERSION <= db_version:
                    print 'Nothing to do'
                elif latest:
                    evolve_to_latest(manager)
                    ver = manager.get_db_version()
                    print 'Evolved %s to %s' % (pkg_name, ver)
                else:
                    print 'Not evolving (use --latest to do actual evolution)'
            print ''

if __name__ == '__main__':
    main()
示例#11
0
def evolve_packages(
    registry,
    root,
    package=None,
    set_db_version=None,
    latest=False,
    mark_all_current=False,
    importer=importer,
    ):
    """ Evolve the package named ``package`` """
    # importer in kwarg list for testing purposes only

    if latest and (set_db_version is not None):
        raise ConflictingFlags('latest', 'set_db_version')

    if mark_all_current and (set_db_version is not None):
        raise ConflictingFlags('mark_all_current', 'set_db_version')

    if set_db_version and not package:
        raise NoPackageSpecified(
            'Not setting db version to %s ' % set_db_version
            )

    managers = list(registry.getUtilitiesFor(IEvolutionManager))

    if package and package not in [x[0] for x in managers]:
        raise NoSuchPackage(package)

    results = []

    for pkg_name, factory in managers:
        if (package is None) or (pkg_name == package):
            
            pkg = importer(pkg_name)

            sw_version = pkg.VERSION

            manager = factory(root, pkg_name, sw_version, 0)

            db_version = manager.get_db_version()

            result = {'package':pkg_name}
            result['sw_version'] = sw_version
            result['db_version'] = db_version

            if set_db_version is None:

                if latest:
                    # does its own commit
                    evolve_to_latest(manager)
                    new_version = manager.get_db_version()
                    result['new_version'] = new_version
                    result['message'] = 'Evolved %s to %s' % (
                        pkg_name, new_version)

                elif mark_all_current:
                    manager._set_db_version(sw_version)
                    transaction.commit()
                    result['new_version'] = sw_version
                    result['message'] = 'Evolved %s to %s' % (
                        pkg_name, sw_version)

                else:
                    result['new_version'] = db_version
                    result['message'] = 'Not evolving (latest not specified)'

            else:

                if set_db_version == db_version:
                    result['new_version'] = db_version
                    result['message'] = 'Nothing to do'

                else:
                    manager._set_db_version(set_db_version)
                    transaction.commit()
                    result['new_version'] = set_db_version
                    result['message'] = (
                        'Database version set to %s' % set_db_version
                        )

            results.append(result)

    return results
 def _callFUT(self, *args, **kw):
     from repoze.evolution import evolve_to_latest
     return evolve_to_latest(*args, **kw)
示例#13
0
        usage('No such package "%s"' % package)

    for pkg_name, factory in managers:
        if (package is None) or (pkg_name == package):
            __import__(pkg_name)
            pkg = sys.modules[pkg_name]
            VERSION = pkg.VERSION
            print 'Package %s' % pkg_name
            manager = factory(root, pkg_name, VERSION, 0)
            db_version = manager.get_db_version()
            print 'Code at software version %s' % VERSION
            print 'Database at version %s' % db_version
            if set_version is not None:
                manager._set_db_version(set_version)
                manager.transaction.commit()
                print 'Database version set to %s' % set_version
            else:
                if VERSION <= db_version:
                    print 'Nothing to do'
                elif latest:
                    evolve_to_latest(manager)
                    ver = manager.get_db_version()
                    print 'Evolved %s to %s' % (pkg_name, ver)
                else:
                    print 'Not evolving (use --latest to do actual evolution)'
            print ''


if __name__ == '__main__':
    main()
示例#14
0
 def _callFUT(self, *args, **kw):
     from repoze.evolution import evolve_to_latest
     return evolve_to_latest(*args, **kw)
示例#15
0
def evolve_packages(
    registry,
    root,
    package=None,
    set_db_version=None,
    latest=False,
    mark_all_current=False,
    importer=importer,
    ):
    """ Evolve the package named ``package`` """
    # importer in kwarg list for testing purposes only

    if latest and (set_db_version is not None):
        raise ConflictingFlags('latest', 'set_db_version')

    if mark_all_current and (set_db_version is not None):
        raise ConflictingFlags('mark_all_current', 'set_db_version')

    if set_db_version and not package:
        raise NoPackageSpecified(
            'Not setting db version to %s ' % set_db_version
            )

    managers = list(registry.getUtilitiesFor(IEvolutionManager))

    # XXX temporary hack to make substanced evolution happen before any other
    # evolution (must die if/when we add topological sorting of evolution steps
    # or packages)
    for i, (pkg_name, factory) in enumerate(list(managers)):
        if pkg_name == 'substanced.evolution':
            managers.pop(i)
            managers.insert(0, (pkg_name, factory))
            break

    if package and package not in [x[0] for x in managers]:
        raise NoSuchPackage(package)

    results = []

    for pkg_name, factory in managers:
        if (package is None) or (pkg_name == package):
            
            pkg = importer(pkg_name)

            sw_version = pkg.VERSION

            manager = factory(root, pkg_name, sw_version, 0)

            db_version = manager.get_db_version()

            result = {'package':pkg_name}
            result['sw_version'] = sw_version
            result['db_version'] = db_version

            if set_db_version is None:

                if latest:
                    # does its own commit
                    evolve_to_latest(manager)
                    new_version = manager.get_db_version()
                    result['new_version'] = new_version
                    result['message'] = 'Evolved %s to %s' % (
                        pkg_name, new_version)

                elif mark_all_current:
                    manager._set_db_version(sw_version)
                    transaction.commit()
                    result['new_version'] = sw_version
                    result['message'] = 'Evolved %s to %s' % (
                        pkg_name, sw_version)

                else:
                    result['new_version'] = db_version
                    result['message'] = 'Not evolving (latest not specified)'

            else:

                if set_db_version == db_version:
                    result['new_version'] = db_version
                    result['message'] = 'Nothing to do'

                else:
                    manager._set_db_version(set_db_version)
                    transaction.commit()
                    result['new_version'] = set_db_version
                    result['message'] = (
                        'Database version set to %s' % set_db_version
                        )

            results.append(result)

    return results