def main(): parser = OptionParser(description=__doc__, usage="%prog [options] old_name new_name") parser.add_option( '-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") parser.add_option( '-d', '--dry-run', dest='dry_run', action="store_true", default=False, help="Don't commit the transactions") parser.add_option('-M', '--merge', dest='merge', action='store_true', default=False, help='Merge with an existing user.') options, args = parser.parse_args() if len(args) < 2: parser.error("Too few parameters: %s" % repr(args)) if len(args) > 2: parser.error("Too many parameters: %s" % repr(args)) config = options.config if config is None: config = get_default_config() root, closer = open_root(config) old_name, new_name = args rename_user(root, old_name, new_name, options.merge, sys.stdout) if options.dry_run: transaction.abort() else: transaction.commit()
def main(argv=sys.argv): logging.basicConfig() logging.getLogger('karl').setLevel(logging.INFO) parser = optparse.OptionParser(description=__doc__) parser.add_option('-C', '--config', dest='config', help='Path to configuration file (defaults to $CWD/etc/karl.ini)', metavar='FILE') parser.add_option('-c', '--communities', dest='communities', default='10', help='Number of communities to add (default 10)') parser.add_option('--dry-run', dest='dryrun', action='store_true', default=False, help="Don't actually commit the transaction") options, args = parser.parse_args(argv[1:]) if args: parser.error("Too many parameters: %s" % repr(args)) config = options.config if config is None: config = get_default_config() root, closer = open_root(config) try: add_sample_users(root) for i in range(int(options.communities)): add_sample_community(root, more_files=i==0) except: transaction.abort() raise else: if options.dryrun: transaction.abort() else: transaction.commit()
def main(argv=sys.argv[1:]): parser = optparse.OptionParser(description=__doc__, usage='%prog [options] message') parser.add_option( '-C', '--config', dest='config', help='Path to configuration file (defaults to $CWD/etc/karl.ini)', metavar='FILE') parser.add_option('-L', '--level', dest='level', help='Log level: debug, info, warn or error', default='info') options, args = parser.parse_args(argv) if not args: parser.error("No message given.") config = options.config if config is None: config = get_default_config() root, closer = open_root(config) func = getattr(logging.getLogger('karl'), options.level, None) if func is None: parser.error("Bad level: %s" % options.level) func(' '.join(args))
def main(): parser = OptionParser(description=__doc__) parser.add_option( '-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") parser.add_option('-d', '--dry-run', dest='dry_run', action="store_true", default=False, help="Don't commit the transactions") options, args = parser.parse_args() if args: parser.error("Too many parameters: %s" % repr(args)) config = options.config if config is None: config = get_default_config() root, closer = open_root(config) peopledir = find_peopledirectory(root) reindex_peopledirectory(peopledir) if options.dry_run: transaction.abort() else: transaction.commit()
def main(argv=sys.argv, root=None): parser = optparse.OptionParser(description=__doc__) parser.add_option('-C', '--config', dest='config', help='Path to configuration file (defaults to $CWD/etc/karl.ini)', metavar='FILE') parser.add_option('--assign-to', '-a', dest='assign_to', default='system', metavar='USER', help="Assign tags for missing users to USER (default: system)") parser.add_option('--dry-run', '-n', dest='dry_run', action='store_true', default=False, help="Don't actually commit any transaction") options, args = parser.parse_args(argv[1:]) logging.basicConfig() if root is None: config = options.config if config is None: config = get_default_config() root, closer = open_root(config) try: cleantags(root, options.assign_to) except: transaction.abort() raise else: if options.dry_run: print '*** aborting ***' transaction.abort() else: print '*** committing ***' transaction.commit()
def main(): parser = OptionParser(description=__doc__, usage="usage: %prog [options] username password") parser.add_option( "-C", "--config", dest="config", default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini", ) options, args = parser.parse_args() try: username, password = args except ValueError: parser.error('Too many or too few args (need "username password"))') config = options.config if config is None: config = get_default_config() root, closer = open_root(config) try: adduser(root, username, password) except: transaction.abort() raise else: transaction.commit()
def main(argv=sys.argv, root=None, peopleconf_func=peopleconf): parser = optparse.OptionParser(description=__doc__) parser.add_option('-C', '--config', dest='config', help='Path to configuration file (defaults to $CWD/etc/karl.ini)', metavar='FILE') parser.add_option('-f', '--force-reindex', dest='force_reindex', action='store_true', default=False, help="Reindex the people catalog unconditionally") parser.add_option('--dry-run', dest='dryrun', action='store_true', default=False, help="Don't actually commit the transaction") options, args = parser.parse_args(argv[1:]) if args: parser.error("Too many parameters: %s" % repr(args)) config = options.config if config is None: config = get_default_config() if root is None: root, closer = open_root(config) try: run_peopleconf(root, config, peopleconf_func, force_reindex=options.force_reindex) except: transaction.abort() raise else: if options.dryrun: transaction.abort() else: transaction.commit()
def archive_console(): """ A console script which archives a community to the local filesystem. Used for testing. """ usage = "usage: %prog [options] community destination" parser = OptionParser(usage, description=__doc__) parser.add_option('-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") options, args = parser.parse_args() if len(args) < 2: parser.error("Not enough arguments.") community_name = args.pop(0) path = args.pop(0) if args: parser.error("Too many parameters: %s" % repr(args)) if os.path.exists(path): parser.error("Folder already exists: %s" % path) config = options.config if config is None: config = get_default_config() root, closer = open_root(config) community = root['communities'].get(community_name) if not community: parser.error("No such community: %s" % community_name) realize_archive_to_fs(archive(community), os.path.abspath(path))
def main(): logging.basicConfig() log.setLevel(logging.INFO) parser = OptionParser(description=__doc__, ) parser.add_option( '-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") options, args = parser.parse_args() me = sys.argv[0] me = os.path.abspath(me) sandbox = os.path.dirname(os.path.dirname(me)) outfile_path = os.path.join(sandbox, 'var', 'usage_metadata.csv') config = options.config if config is None: config = get_default_config() root, closer = open_root(config) _export_metadata(root, outfile_path) log.info("All done.")
def main(argv=sys.argv): logging.basicConfig() log.setLevel(logging.INFO) parser = OptionParser( description="Generate some statistics about Karl usage", usage="%prog [options]", ) parser.add_option('-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") options, args = parser.parse_args() if len(args): parser.error("Command does not take arguments.") config = options.config if not config: config = get_default_config() root, closer = open_root(config) try: gen_stats(root) finally: transaction.abort()
def main(): parser = OptionParser(description=__doc__) parser.add_option('-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") parser.add_option('-d', '--dry-run', dest='dry_run', action="store_true", default=False, help="Don't commit the transactions") parser.add_option('-i', '--interval', dest='commit_interval', action="store", default=200, help="Commit every N transactions") parser.add_option('-p', '--path', dest='path', action="store", default=None, metavar='EXPR', help="Reindex only objects whose path matches a regular expression") options, args = parser.parse_args() if args: parser.error("Too many parameters: %s" % repr(args)) commit_interval = int(options.commit_interval) if options.path: path_re = re.compile(options.path) else: path_re = None config = options.config if config is None: config = get_default_config() root, closer = open_root(config) def output(msg): print msg reindex_catalog(root, path_re=path_re, commit_interval=commit_interval, dry_run=options.dry_run, output=output)
def main(): parser = OptionParser(description=__doc__, usage='usage: %prog [options]') parser.add_option('-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") options, args = parser.parse_args() try: group = args[0] except IndexError: parser.error('need "group" arg') config = options.config if config is None: config = get_default_config() root, closer = open_root(config) try: reset_passwords(root, group) except: transaction.abort() raise else: transaction.commit()
def worker(): """ Console script which connects to Redis and pops one unit of work off of either the copy queue or the remove queue and performs the required operation. If no work is queued for it to do, it will block, waiting for work. This command does not loop. Once one community is copied or removed, the command exits. The intent is that for looping behavior, this can be run from supervisor which will automatically restart the command after it exits. This insures that all connection caches, etc, are cleaned up on each iteration. """ logging.basicConfig(level=logging.INFO) usage = "usage: %prog [options]" parser = OptionParser(usage, description=__doc__) parser.add_option('-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") options, args = parser.parse_args() if args: parser.error("Too many arguments.") config = options.config if config is None: config = get_default_config() root, closer = open_root(config) registry = get_current_registry() queue = RedisArchiveQueue.from_settings(registry.settings) closer() log.info("Waiting for work.") operation, community = next(work_queue(queue, config)) log.info("Got work.") with persistent_log(community) as plog: try: if operation == queue.COPY_QUEUE_KEY: log.info("Copy to box: %s", community.title) copy_community_to_box(community) elif operation == queue.MOTHBALL_QUEUE_KEY: log.info("Mothball: %s", community.title) mothball_community(community) else: log.warn("unknown operation: %s", operation) transaction.commit() log.info('Finished job.') except: log.error('Error during archive.', exc_info=True) transaction.abort() # Save the exception status in its own transaction community.archive_status = 'exception' raise finally: # Persist log in its own transaction so that even if there is an # error we get a log community.archive_log = plog plog.save() transaction.commit()
def main(): parser = OptionParser(description=__doc__, usage='usage: %prog [options] username password') parser.add_option('-C', '--config', dest='config', default=None, help="Specify a paster config file. " "Defaults to$CWD/etc/karl.ini") parser.add_option('--clear', dest='clear', default=False, action='store_true', help="Clear any existing announcement. Default false.") parser.add_option('-n', '--dry-run', dest='dry_run', default=False, action='store_true', help="Don't actually commit any change.") parser.add_option('-v', '--verbose', dest='verbose', action='count', default='1', help="Show more information.") parser.add_option('-q', '--quiet', dest='verbose', action='store_const', const=0, help="Show no extra information.") options, args = parser.parse_args() if options.clear: if args: parser.error("No arguments allowed with '--clear'") func = clear_site_announce else: func = set_site_announce config = options.config if config is None: config = get_default_config() root, closer = open_root(config) try: previous, now = func(root, *args) except: transaction.abort() raise if options.verbose: print 'Before:', previous print 'After:', now if options.dry_run: transaction.abort() else: transaction.commit()
def main(args=sys.argv): if PGTextIndex is None: print >>sys.stderr, NO_PG_TEXT_INDEX sys.exit(1) parser = OptionParser(description=__doc__) parser.add_option('-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") parser.add_option('-D', '--dsn', dest='dsn', default=None, help="dsn to connect to postgresql database") parser.add_option('-n', '--database-name', dest='database_name', default=None, help="Name of database to connect to") parser.add_option('-d', '--dry-run', dest='dry_run', action="store_true", default=False, help="Don't commit the transactions") parser.add_option('-i', '--interval', dest='commit_interval', action="store", default=200, help="Commit every N transactions") options, args = parser.parse_args() if args: parser.error("Too many parameters: %s" % repr(args)) commit_interval = int(options.commit_interval) config = options.config if config is None: config = get_default_config() root, closer = open_root(config) def output(msg): print msg try: index = PGTextIndex( get_weighted_textrepr, options.dsn, # "dbname=karl user=karl host=localhost password=karl", database_name=options.database_name ) if options.dry_run: transaction.abort() else: transaction.commit() # reindex_catalog commits its own transactions catalog = root.catalog catalog['texts'] = index reindex_catalog(root, commit_interval=commit_interval, dry_run=options.dry_run, output=output) except: transaction.abort() raise
def main(argv=sys.argv): logging.basicConfig() log.setLevel(logging.INFO) parser = OptionParser( description="Move content to another folder", usage="%prog [options] content_path dest_folder", ) parser.add_option( '-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") parser.add_option('-d', '--dry-run', dest='dry_run', action="store_true", default=False, help="Don't commit the transaction") parser.add_option('-S', '--security-state', dest='security_state', default=None, help="Force workflow transition to given state. By " "default no transition is performed.") options, args = parser.parse_args() if len(args) != 2: parser.error("Source content and destination folder are required") config = options.config if not config: config = get_default_config() root, closer = open_root(config) try: move_content(root, args[0], args[1], options.security_state) except: transaction.abort() raise else: if options.dry_run: log.info("Aborting transaction.") transaction.abort() else: log.info("Committing transaction.") transaction.commit()
def work_queue(queue, config): """ A generator which represents the work queue, yields tuples of (operation, community) """ while True: operation, path = queue.get_work() root, closer = open_root(config) community = find_resource(root, path) # If a copy operation has been stopped since the community was enqueued # for copying, the community will have lost its archive_status and # should be skipped. if hasattr(community, 'archive_status'): yield operation, community
def work_queue(queue, config): """ A generator which represents the work queue, yields tuples of (operation, community) """ while True: operation, path = queue.get_work() root, closer = open_root(config) community = find_resource(root, path) # If a copy operation has been stopped since the community was enqueued # for copying, the community will have lost its archive_status and # should be skipped. if hasattr(community, 'archive_status'): yield operation, community
def main(argv=sys.argv, root=None): parser = optparse.OptionParser(description=__doc__) parser.add_option( '-C', '--config', dest='config', help='Path to configuration file (defaults to $CWD/etc/karl.ini)', metavar='FILE') parser.add_option( '--assign-to', '-a', dest='assign_to', default='system', metavar='USER', help="Assign tags for missing users to USER (default: system)") parser.add_option('--dry-run', '-n', dest='dry_run', action='store_true', default=False, help="Don't actually commit any transaction") options, args = parser.parse_args(argv[1:]) logging.basicConfig() if root is None: config = options.config if config is None: config = get_default_config() root, closer = open_root(config) try: cleantags(root, options.assign_to) except: transaction.abort() raise else: if options.dry_run: print '*** aborting ***' transaction.abort() else: print '*** committing ***' transaction.commit()
def main(): parser = OptionParser(description=__doc__, usage='usage: %prog [options] username password') parser.add_option( '-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") parser.add_option('--dry-run', '-n', dest='dry_run', action='store_true', default=False, help="Don't actually commit any transaction") path = '/' options, args = parser.parse_args() if args: path = args[0] config = options.config if config is None: config = get_default_config() root, closer = open_root(config) model = find_resource(root, path) def out(msg): sys.stderr.write(msg) sys.stderr.write('\n') sys.stderr.flush() try: reset_security_workflow(model, output=out) except: transaction.abort() raise else: if options.dry_run: print 'no transaction committed due to --dry-run' else: transaction.commit()
def main(argv=sys.argv): logging.basicConfig() logging.getLogger('karl').setLevel(logging.INFO) parser = optparse.OptionParser(description=__doc__) parser.add_option( '-C', '--config', dest='config', help='Path to configuration file (defaults to $CWD/etc/karl.ini)', metavar='FILE') parser.add_option('-c', '--communities', dest='communities', default='10', help='Number of communities to add (default 10)') parser.add_option('--dry-run', dest='dryrun', action='store_true', default=False, help="Don't actually commit the transaction") options, args = parser.parse_args(argv[1:]) if args: parser.error("Too many parameters: %s" % repr(args)) config = options.config if config is None: config = get_default_config() root, closer = open_root(config) try: add_sample_users(root) for i in range(int(options.communities)): add_sample_community(root, more_files=i == 0) except: transaction.abort() raise else: if options.dryrun: transaction.abort() else: transaction.commit()
def main(): parser = OptionParser(description=__doc__, usage='usage: %prog [options] username password') parser.add_option('-C', '--config', dest='config', default=None, help="Specify a paster config file. " "Defaults to$CWD/etc/karl.ini") parser.add_option('--clear', dest='clear', default=False, action='store_true', help="Clear any existing announcement. Default false.") parser.add_option('-n', '--dry-run', dest='dry_run', default=False, action='store_true', help="Don't actually commit any change.") parser.add_option('-v', '--verbose', dest='verbose', action='count', default='1', help="Show more information.") parser.add_option('-q', '--quiet', dest='verbose', action='store_const', const=0, help="Show no extra information.") options, args = parser.parse_args() if options.clear: if args: parser.error("No arguments allowed with '--clear'") func = clear_site_announce else: func = set_site_announce config = options.config if config is None: config = get_default_config() root, closer = open_root(config) try: previous, now = func(root, *args) except: transaction.abort() raise if options.verbose: print 'Before:', previous print 'After:', now if options.dry_run: transaction.abort() else: transaction.commit()
def main(argv=sys.argv): logging.basicConfig() log.setLevel(logging.INFO) parser = OptionParser( description="Move content to another folder", usage="%prog [options] content_path dest_folder", ) parser.add_option('-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") parser.add_option('-d', '--dry-run', dest='dry_run', action="store_true", default=False, help="Don't commit the transaction") parser.add_option('-S', '--security-state', dest='security_state', default=None, help="Force workflow transition to given state. By " "default no transition is performed.") options, args = parser.parse_args() if len(args) != 2: parser.error("Source content and destination folder are required") config = options.config if not config: config = get_default_config() root, closer = open_root(config) try: move_content(root, args[0], args[1], options.security_state) except: transaction.abort() raise else: if options.dry_run: log.info("Aborting transaction.") transaction.abort() else: log.info("Committing transaction.") transaction.commit()
def main(argv=sys.argv): config = None script = None if '-C' in argv: index = argv.index('-C') argv.pop(index) config = argv.pop(index) if len(argv) > 1: script = argv[1] if not config: config = get_default_config() root, closer = open_root(config) if script is None: cprt = ('Type "help" for more information. "root" is the karl ' 'root object.') banner = "Python %s on %s\n%s" % (sys.version, sys.platform, cprt) interact(banner, local={'root':root}) else: code = compile(open(script).read(), script, 'exec') exec code in {'root': root}
def main(argv=sys.argv): config = None script = None if '-C' in argv: index = argv.index('-C') argv.pop(index) config = argv.pop(index) if len(argv) > 1: script = argv[1] if not config: config = get_default_config() root, closer = open_root(config) if script is None: cprt = ('Type "help" for more information. "root" is the karl ' 'root object.') banner = "Python %s on %s\n%s" % (sys.version, sys.platform, cprt) interact(banner, local={'root': root}) else: code = compile(open(script).read(), script, 'exec') exec code in {'root': root}
def main(argv=sys.argv[1:]): _parse_options(argv) logging.basicConfig() log.setLevel(logging.DEBUG) root, closer = open_root(config) try: if check_link is not None: print _rewrite_link(root, '', check_link) else: scrub(root) fix_wiki_links(root) except: transaction.abort() raise else: if dry_run: transaction.abort() else: transaction.commit()
def main(argv=sys.argv[1:]): parser = optparse.OptionParser(description=__doc__, usage='%prog [options] message') parser.add_option('-C', '--config', dest='config', help='Path to configuration file (defaults to $CWD/etc/karl.ini)', metavar='FILE') parser.add_option('-L', '--level', dest='level', help='Log level: debug, info, warn or error', default='info') options, args = parser.parse_args(argv) if not args: parser.error("No message given.") config = options.config if config is None: config = get_default_config() root, closer = open_root(config) func = getattr(get_logger(), options.level, None) if func is None: parser.error("Bad level: %s" % options.level) func(' '.join(args))
def archive_console(): """ A console script which archives a community to the local filesystem. Used for testing. """ usage = "usage: %prog [options] community destination" parser = OptionParser(usage, description=__doc__) parser.add_option( '-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") options, args = parser.parse_args() if len(args) < 2: parser.error("Not enough arguments.") community_name = args.pop(0) path = args.pop(0) if args: parser.error("Too many parameters: %s" % repr(args)) if os.path.exists(path): parser.error("Folder already exists: %s" % path) config = options.config if config is None: config = get_default_config() root, closer = open_root(config) community = root['communities'].get(community_name) if not community: parser.error("No such community: %s" % community_name) realize_archive_to_fs(archive(community), os.path.abspath(path))
def main(): parser = OptionParser(description=__doc__, usage='usage: %prog [options] username password') parser.add_option('-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") options, args = parser.parse_args() try: username, password = args except ValueError: parser.error('Too many or too few args (need "username password"))') config = options.config if config is None: config = get_default_config() root, closer = open_root(config) try: adduser(root, username, password) except: transaction.abort() raise else: transaction.commit()
def main(): parser = OptionParser(description=__doc__, usage='usage: %prog [options] username password') parser.add_option('-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") parser.add_option('--dry-run', '-n', dest='dry_run', action='store_true', default=False, help="Don't actually commit any transaction") path = '/' options, args = parser.parse_args() if args: path = args[0] config = options.config if config is None: config = get_default_config() root, closer = open_root(config) model = find_resource(root, path) def out(msg): sys.stderr.write(msg) sys.stderr.write('\n') sys.stderr.flush() try: reset_security_workflow(model, output=out) except: transaction.abort() raise else: if options.dry_run: print 'no transaction committed due to --dry-run' else: transaction.commit()
def main(): parser = OptionParser(description=__doc__) parser.add_option('-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") parser.add_option('-d', '--dry-run', dest='dry_run', action="store_true", default=False, help="Don't commit the transactions") options, args = parser.parse_args() if args: parser.error("Too many parameters: %s" % repr(args)) config = options.config if config is None: config = get_default_config() root, closer = open_root(config) peopledir = find_peopledirectory(root) reindex_peopledirectory(peopledir) if options.dry_run: transaction.abort() else: transaction.commit()
if set_version < 0: raise Exception except: usage('Bad version number %s' % v) if latest and (set_version is not None): usage('Cannot use both --latest and --set-version together') if set_version and not package: usage('Not setting db version to %s (specify --package to ' 'specify which package to set the db version for)' % set_version) # hook gsm for good measure and max fwd compat getSiteManager.sethook(get_current_registry) root, closer = open_root(get_default_config()) managers = list(getUtilitiesFor(IEvolutionManager)) 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
def worker(): """ Console script which connects to Redis and pops one unit of work off of either the copy queue or the remove queue and performs the required operation. If no work is queued for it to do, it will block, waiting for work. This command does not loop. Once one community is copied or removed, the command exits. The intent is that for looping behavior, this can be run from supervisor which will automatically restart the command after it exits. This insures that all connection caches, etc, are cleaned up on each iteration. """ logging.basicConfig(level=logging.INFO) usage = "usage: %prog [options]" parser = OptionParser(usage, description=__doc__) parser.add_option( '-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") options, args = parser.parse_args() if args: parser.error("Too many arguments.") config = options.config if config is None: config = get_default_config() root, closer = open_root(config) registry = get_current_registry() queue = RedisArchiveQueue.from_settings(registry.settings) closer() log.info("Waiting for work.") operation, community = next(work_queue(queue, config)) log.info("Got work.") with persistent_log(community) as plog: try: if operation == queue.COPY_QUEUE_KEY: log.info("Copy to box: %s", community.title) copy_community_to_box(community) elif operation == queue.MOTHBALL_QUEUE_KEY: log.info("Mothball: %s", community.title) mothball_community(community) else: log.warn("unknown operation: %s", operation) transaction.commit() log.info('Finished job.') except: log.error('Error during archive.', exc_info=True) transaction.abort() # Save the exception status in its own transaction community.archive_status = 'exception' raise finally: # Persist log in its own transaction so that even if there is an # error we get a log community.archive_log = plog plog.save() transaction.commit()
def main(): parser = argparse.ArgumentParser( description="Add or remove KARL site-wide announcements", usage="%(prog)s command [options]") parser.add_argument('-C', '--config', dest="config", help="Specify a paster config file. Defaults to " "$CWD/etc/karl.ini", required=False, default=None) parser.add_argument('command', action='store', help='list, add, remove, clear-all, or clear-old', default='list') parser.add_argument('--text', action='store', dest='text', help='Text to add as a site announcement. Used only ' 'with the `add` command', required=False, default=None) parser.add_argument('--id', action='store', dest='id', type=int, help='ID (shown in `list` command) of announcement to ' 'remove. Used only with `remove` command.', required=False, default=None) parser.add_argument('--date', action='store', type=valid_date, help='Any site action added previous to this date ' '(YYYY/MM/DD) will be removed. Used only with ' 'the `clear-date` command.', dest='cleardate', required=False, default=None) parser.add_argument('-n', '--dry-run', action='store_true', default=False, help='Do everything except commit changes.', dest='dryrun', required=False) parser.add_argument('-v', '--verbose', action='store_true', default=False, help='Print more information to stdout', required=False, dest='verbose') args = parser.parse_args() # CONFIG/SITE-CONTEXT config = args.config if config is None: config = get_default_config() root, closer = open_root(config) # EXEC COMMANDS cmd = args.command.strip().lower() try: if cmd == 'list': do_list(args, root) elif cmd == 'add': do_add(args, root) elif cmd == 'remove': do_remove(args, root) elif cmd == 'clear-all': do_clearall(args, root) elif cmd == 'clear-date': do_cleardate(args, root) except Exception as ex: if args.verbose: print ex else: print "Aborting due to exception" transaction.abort() sys.exit(0) # COMMIT/ABORT if args.dryrun: if args.verbose: print "Dry-run, aborting commit to database." transaction.abort() else: if args.verbose: print "Committing to database." transaction.commit()
def setup(self): from karl.scripting import get_default_config from karl.scripting import open_root root, self.closer = open_root(get_default_config()) self.root = root._p_jar.root()
def main(argv=None): if argv is None: import sys argv = sys.argv parser = optparse.OptionParser( description=__doc__, formatter=HelpFormatter(), ) parser.add_option( '-C', '--config', dest='config', help='Path to configuration file (defaults to $CWD/etc/karl.ini)', metavar='FILE') parser.add_option('-f', '--force-reindex', dest='force_reindex', action='store_true', default=False, help="Reindex the people catalog unconditionally") parser.add_option('--dry-run', dest='dry_run', action='store_true', default=False, help="Don't actually commit the transaction") options, args = parser.parse_args(argv[1:]) if not args or args[0] not in ('dump', 'load'): parser.error("Must specify either 'dump' or 'load <filename>'" % repr(args)) kw = {} if args[0] == 'dump': if len(args) > 1: parser.error("Must specify either 'dump' or 'load <filename>'" % repr(args)) if options.force_reindex: parser.error("--force-reindex invalid for 'dump'") func = dump_peopleconf do_commit = False else: # 'load' if len(args) != 2: parser.error("Must specify either 'dump' or 'load <filename>'" % repr(args)) func = load_peopleconf kw['filename'] = args[1] if options.force_reindex: kw['force_reindex'] = True do_commit = not options.dry_run config = options.config if config is None: config = get_default_config() root, closer = open_root(config) func(root, **kw) if do_commit: transaction.commit()
def main(): parser = OptionParser(description=__doc__) parser.add_option( '-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") parser.add_option('-d', '--dry-run', dest='dry_run', action="store_true", default=False, help="Don't commit the transactions") parser.add_option('-i', '--interval', dest='commit_interval', action="store", default=200, help="Commit every N transactions") parser.add_option( '-p', '--path', dest='path', action="store", default=None, metavar='EXPR', help="Reindex only objects whose path matches a regular expression") parser.add_option('-n', '--index', dest='indexes', action="append", help="Reindex only the given index (can be repeated)") options, args = parser.parse_args() if args: parser.error("Too many parameters: %s" % repr(args)) commit_interval = int(options.commit_interval) if options.path: path_re = re.compile(options.path) else: path_re = None config = options.config if config is None: config = get_default_config() root, closer = open_root(config) def output(msg): print msg kw = {} if options.indexes: kw['indexes'] = options.indexes reindex_catalog(root, path_re=path_re, commit_interval=commit_interval, dry_run=options.dry_run, output=output, **kw)
def main(args=sys.argv): if PGTextIndex is None: print >> sys.stderr, NO_PG_TEXT_INDEX sys.exit(1) parser = OptionParser(description=__doc__) parser.add_option( '-C', '--config', dest='config', default=None, help="Specify a paster config file. Defaults to $CWD/etc/karl.ini") parser.add_option('-D', '--dsn', dest='dsn', default=None, help="dsn to connect to postgresql database") parser.add_option('-n', '--database-name', dest='database_name', default=None, help="Name of database to connect to") parser.add_option('-d', '--dry-run', dest='dry_run', action="store_true", default=False, help="Don't commit the transactions") parser.add_option('-i', '--interval', dest='commit_interval', action="store", default=200, help="Commit every N transactions") options, args = parser.parse_args() if args: parser.error("Too many parameters: %s" % repr(args)) commit_interval = int(options.commit_interval) config = options.config if config is None: config = get_default_config() root, closer = open_root(config) def output(msg): print msg try: index = PGTextIndex( get_weighted_textrepr, options. dsn, # "dbname=karl user=karl host=localhost password=karl", database_name=options.database_name) if options.dry_run: transaction.abort() else: transaction.commit() # reindex_catalog commits its own transactions catalog = root.catalog catalog['texts'] = index reindex_catalog(root, commit_interval=commit_interval, dry_run=options.dry_run, output=output) except: transaction.abort() raise
if set_version < 0: raise Exception except: usage('Bad version number %s' % v) if latest and (set_version is not None): usage('Cannot use both --latest and --set-version together') if set_version and not package: usage('Not setting db version to %s (specify --package to ' 'specify which package to set the db version for)' % set_version) # hook gsm for good measure and max fwd compat getSiteManager.sethook(get_current_registry) root, closer = open_root(get_default_config()) managers = list(getUtilitiesFor(IEvolutionManager)) 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
def main(): parser = argparse.ArgumentParser( description="Add or remove KARL site-wide announcements", usage="%(prog)s command [options]") parser.add_argument('-C', '--config', dest="config", help="Specify a paster config file. Defaults to " "$CWD/etc/karl.ini", required=False, default=None) parser.add_argument('command', action='store', help='list, add, remove, clear-all, or clear-old', default='list') parser.add_argument('--text', action='store', dest='text', help='Text to add as a site announcement. Used only ' 'with the `add` command', required=False, default=None) parser.add_argument('--id', action='store', dest='id', type=int, help='ID (shown in `list` command) of announcement to ' 'remove. Used only with `remove` command.', required=False, default=None) parser.add_argument('--date', action='store', type=valid_date, help='Any site action added previous to this date ' '(YYYY/MM/DD) will be removed. Used only with ' 'the `clear-date` command.', dest='cleardate', required=False, default=None) parser.add_argument('-n', '--dry-run', action='store_true', default=False, help='Do everything except commit changes.', dest='dryrun', required=False) parser.add_argument('-v', '--verbose', action='store_true', default=False, help='Print more information to stdout', required=False, dest='verbose') args = parser.parse_args() # CONFIG/SITE-CONTEXT config = args.config if config is None: config = get_default_config() root, closer = open_root(config) # EXEC COMMANDS cmd = args.command.strip().lower() try: if cmd == 'list': do_list(args, root) elif cmd == 'add': do_add(args, root) elif cmd == 'remove': do_remove(args, root) elif cmd == 'clear-all': do_clearall(args, root) elif cmd == 'clear-date': do_cleardate(args, root) except Exception as ex: if args.verbose: print ex else: print "Aborting due to exception" transaction.abort() sys.exit(0) # COMMIT/ABORT if args.dryrun: if args.verbose: print "Dry-run, aborting commit to database." transaction.abort() else: if args.verbose: print "Committing to database." transaction.commit()
def setup(self): from karl.scripting import get_default_config from karl.scripting import open_root root, self.closer = open_root(get_default_config()) self.root = root._p_jar.root()