- print 'loaded'
-
-def command_csvexport(engine_uri, directory='.'):
- import csv
- session = connect(engine_uri)
-
- for table_name in sorted(metadata.tables.keys()):
- print table_name
- table = metadata.tables[table_name]
-
- writer = csv.writer(open("%s/%s.csv" % (directory, table_name), 'wb'),
- lineterminator='\n')
- columns = [col.name for col in table.columns]
- writer.writerow(columns)
-
- primary_key = table.primary_key
- for row in session.query(table).order_by(*primary_key).all():
- csvs = []
- for col in columns:
- # Convert Pythony values to something more universal
- val = getattr(row, col)
- if val == None:
- val = ''
- elif val == True:
- val = '1'
- elif val == False:
- val = '0'
- else:
- val = unicode(val).encode('utf-8')
-
- csvs.append(val)
-
- writer.writerow(csvs)
-
-def command_lookup(engine_uri, name):
- # XXX don't require uri! somehow
- session = connect(engine_uri)
-
- results, exact = pokedex_lookup(session, name)
- if exact:
+ 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)
+ parser.add_option('-d', '--directory', dest='directory', default=None)
+ options, tables = parser.parse_args(list(args))
+
+ session = get_session(options)
+ print_csv_directory(options)
+
+ pokedex.db.load.dump(session, directory=options.directory,
+ tables=tables,
+ verbose=options.verbose)
+
+def command_load(*args):
+ parser = get_parser(verbose=True)
+ parser.add_option('-d', '--directory', dest='directory', default=None)
+ parser.add_option('-D', '--drop-tables', dest='drop_tables', default=False, action='store_true')
+ options, tables = parser.parse_args(list(args))
+
+ if not options.engine_uri:
+ print "WARNING: You're reloading the default database, but not the lookup index. They"
+ print " might get out of sync, and pokedex commands may not work correctly!"
+ print "To fix this, run `pokedex reindex` when this command finishes. Or, just use"
+ print "`pokedex setup` to do both at once."
+ print
+
+ session = get_session(options)
+ print_csv_directory(options)
+
+ pokedex.db.load.load(session, directory=options.directory,
+ drop_tables=options.drop_tables,
+ tables=tables,
+ verbose=options.verbose)
+
+def command_reindex(*args):
+ parser = get_parser(verbose=True)
+ options, _ = parser.parse_args(list(args))
+
+ session = get_session(options)
+ lookup = get_lookup(options, session=session, recreate=True)
+
+ print "Recreated lookup index."
+
+
+def command_setup(*args):
+ parser = get_parser(verbose=False)
+ options, _ = parser.parse_args(list(args))
+
+ options.directory = None
+
+ session = get_session(options)
+ print_csv_directory(options)
+ pokedex.db.load.load(session, directory=None, drop_tables=True,
+ verbose=options.verbose)
+
+ lookup = get_lookup(options, session=session, recreate=True)
+
+ print "Recreated lookup index."
+
+
+def command_status(*args):
+ parser = get_parser(verbose=True)
+ options, _ = parser.parse_args(list(args))
+ options.verbose = True
+ options.directory = None
+
+ session = get_session(options)
+ print_csv_directory(options)
+ lookup = get_lookup(options, recreate=False)
+
+
+### User-facing commands
+
+def command_lookup(*args):
+ parser = get_parser(verbose=False)
+ options, words = parser.parse_args(list(args))
+
+ name = u' '.join(words)
+
+ session = get_session(options)
+ lookup = get_lookup(options, session=session, recreate=False)
+
+ results = lookup.lookup(name)
+ if not results:
+ print "No matches."
+ elif results[0].exact: