+ parser.add_option('-e', '--engine', dest='engine_uri', default=os.environ.get('POKEDEX_DB_ENGINE', None))
+ parser.add_option('-i', '--index', dest='index_dir', default=os.environ.get('POKEDEX_INDEX_DIR', None))
+ parser.add_option('-q', '--quiet', dest='verbose', default=verbose, action='store_false')
+ parser.add_option('-v', '--verbose', dest='verbose', default=verbose, action='store_true')
+ return parser
+
+def get_session(options):
+ """Given a parsed options object, connects to the database and returns a
+ session.
+ """
+
+ engine_uri = options.engine_uri
+ got_from = None
+ if engine_uri:
+ got_from = 'command line'
+ else:
+ engine_uri = os.environ.get('POKEDEX_DB_ENGINE', None)
+ if engine_uri:
+ got_from = 'environment'
+ else:
+ got_from = 'default setting'
+
+ session = pokedex.db.connect(engine_uri)
+
+ if options.verbose:
+ print "Connected to database {engine} (from {got_from})" \
+ .format(engine=session.bind.url, got_from=got_from)
+
+ return session
+
+def get_lookup(options, session=None, recreate=False):
+ """Given a parsed options object, opens the whoosh index and returns a
+ PokedexLookup object.
+
+ Unlike `get_session`, this function can actually do population as a side
+ effect! This is fallout from how PokedexLookup works.
+ """
+ # TODO fix the above
+
+ if recreate and not session:
+ raise ValueError("get_lookup() needs an explicit session to regen the index")
+
+ index_dir = options.index_dir
+ got_from = None
+ if index_dir:
+ got_from = 'command line'
+ else:
+ index_dir = os.environ.get('POKEDEX_INDEX_DIR', None)
+ if index_dir:
+ got_from = 'environment'
+ else:
+ index_dir = pkg_resources.resource_filename('pokedex',
+ 'data/whoosh-index')
+ got_from = 'default setting'
+
+ if options.verbose:
+ print "Opened lookup index {index_dir} (from {got_from})" \
+ .format(index_dir=index_dir, got_from=got_from)
+
+ lookup = pokedex.lookup.PokedexLookup(index_dir, session=session,
+ recreate=recreate)
+
+ return lookup
+
+def print_csv_directory(options):
+ """Just prints the csv directory we're about to use."""
+
+ if not options.verbose:
+ return
+
+ if options.directory:
+ csvdir = options.directory
+ got_from = 'command line'
+ else:
+ # This is the same as the db.load default
+ csvdir = pkg_resources.resource_filename('pokedex', 'data/csv')
+ got_from = 'default setting'
+
+ print "Using CSV directory {csvdir} (from {got_from})" \
+ .format(csvdir=csvdir, got_from=got_from)
+
+
+### Plumbing commands
+
+def command_dump(*args):
+ parser = get_parser(verbose=True)