mirror of
https://github.com/veekun/pokedex.git
synced 2024-08-20 18:16:34 +00:00
Factor out logic for finding the default db/index. #180
Note: `if not x:` has changed to `if x is not None:`, changing the semantics slightly. Shouldn't be a big issue.
This commit is contained in:
parent
5e52bef91a
commit
ffc30bff8f
5 changed files with 74 additions and 58 deletions
|
@ -1,13 +1,13 @@
|
||||||
# encoding: utf8
|
# encoding: utf8
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
import os
|
import os
|
||||||
import pkg_resources
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import pokedex.db
|
import pokedex.db
|
||||||
import pokedex.db.load
|
import pokedex.db.load
|
||||||
import pokedex.db.tables
|
import pokedex.db.tables
|
||||||
import pokedex.lookup
|
import pokedex.lookup
|
||||||
|
from pokedex import defaults
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if len(sys.argv) <= 1:
|
if len(sys.argv) <= 1:
|
||||||
|
@ -35,8 +35,8 @@ def get_parser(verbose=True):
|
||||||
`verbose` is whether or not the options should be verbose by default.
|
`verbose` is whether or not the options should be verbose by default.
|
||||||
"""
|
"""
|
||||||
parser = OptionParser()
|
parser = OptionParser()
|
||||||
parser.add_option('-e', '--engine', dest='engine_uri', default=os.environ.get('POKEDEX_DB_ENGINE', None))
|
parser.add_option('-e', '--engine', dest='engine_uri', default=None)
|
||||||
parser.add_option('-i', '--index', dest='index_dir', default=os.environ.get('POKEDEX_INDEX_DIR', None))
|
parser.add_option('-i', '--index', dest='index_dir', default=None)
|
||||||
parser.add_option('-q', '--quiet', dest='verbose', default=verbose, action='store_false')
|
parser.add_option('-q', '--quiet', dest='verbose', default=verbose, action='store_false')
|
||||||
parser.add_option('-v', '--verbose', dest='verbose', default=verbose, action='store_true')
|
parser.add_option('-v', '--verbose', dest='verbose', default=verbose, action='store_true')
|
||||||
return parser
|
return parser
|
||||||
|
@ -46,19 +46,11 @@ def get_session(options):
|
||||||
session.
|
session.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# WARNING: This logic duplicates that in db.connect(), because there's no
|
|
||||||
# other reliable way to tell where the engine actually came from. Keep it
|
|
||||||
# up to date!
|
|
||||||
engine_uri = options.engine_uri
|
engine_uri = options.engine_uri
|
||||||
got_from = None
|
|
||||||
if engine_uri:
|
|
||||||
got_from = 'command line'
|
got_from = 'command line'
|
||||||
else:
|
|
||||||
engine_uri = os.environ.get('POKEDEX_DB_ENGINE', None)
|
if engine_uri is None:
|
||||||
if engine_uri:
|
engine_uri, got_from = defaults.get_default_db_uri_with_origin()
|
||||||
got_from = 'environment'
|
|
||||||
else:
|
|
||||||
got_from = 'default setting'
|
|
||||||
|
|
||||||
session = pokedex.db.connect(engine_uri)
|
session = pokedex.db.connect(engine_uri)
|
||||||
|
|
||||||
|
@ -73,24 +65,14 @@ def get_lookup(options, session=None, recreate=False):
|
||||||
PokedexLookup object.
|
PokedexLookup object.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# WARNING: This logic duplicates that in PokedexLookup, because there's no
|
|
||||||
# other reliable way to tell where the engine actually came from. Keep it
|
|
||||||
# up to date!
|
|
||||||
if recreate and not session:
|
if recreate and not session:
|
||||||
raise ValueError("get_lookup() needs an explicit session to regen the index")
|
raise ValueError("get_lookup() needs an explicit session to regen the index")
|
||||||
|
|
||||||
index_dir = options.index_dir
|
index_dir = options.index_dir
|
||||||
got_from = None
|
|
||||||
if index_dir:
|
|
||||||
got_from = 'command line'
|
got_from = 'command line'
|
||||||
else:
|
|
||||||
index_dir = os.environ.get('POKEDEX_INDEX_DIR', None)
|
if index_dir is None:
|
||||||
if index_dir:
|
index_dir, got_from = defaults.get_default_index_dir_with_origin()
|
||||||
got_from = 'environment'
|
|
||||||
else:
|
|
||||||
index_dir = pkg_resources.resource_filename('pokedex',
|
|
||||||
'data/whoosh-index')
|
|
||||||
got_from = 'default setting'
|
|
||||||
|
|
||||||
if options.verbose:
|
if options.verbose:
|
||||||
print "Opened lookup index {index_dir} (from {got_from})" \
|
print "Opened lookup index {index_dir} (from {got_from})" \
|
||||||
|
@ -109,13 +91,11 @@ def get_csv_directory(options):
|
||||||
if not options.verbose:
|
if not options.verbose:
|
||||||
return
|
return
|
||||||
|
|
||||||
if options.directory:
|
|
||||||
csvdir = options.directory
|
csvdir = options.directory
|
||||||
got_from = 'command line'
|
got_from = 'command line'
|
||||||
else:
|
|
||||||
# This is the same as the db.load default
|
if csvdir is None:
|
||||||
csvdir = pkg_resources.resource_filename('pokedex', 'data/csv')
|
csvdir, got_from = defaults.get_default_csv_dir_with_origin()
|
||||||
got_from = 'default setting'
|
|
||||||
|
|
||||||
print "Using CSV directory {csvdir} (from {got_from})" \
|
print "Using CSV directory {csvdir} (from {got_from})" \
|
||||||
.format(csvdir=csvdir, got_from=got_from)
|
.format(csvdir=csvdir, got_from=got_from)
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
import os
|
|
||||||
import pkg_resources
|
|
||||||
|
|
||||||
from sqlalchemy import MetaData, Table, create_engine, orm
|
from sqlalchemy import MetaData, Table, create_engine, orm
|
||||||
|
|
||||||
|
from ..defaults import get_default_db_uri
|
||||||
from .tables import metadata
|
from .tables import metadata
|
||||||
|
|
||||||
|
|
||||||
def connect(uri=None, session_args={}, engine_args={}):
|
def connect(uri=None, session_args={}, engine_args={}):
|
||||||
"""Connects to the requested URI. Returns a session object.
|
"""Connects to the requested URI. Returns a session object.
|
||||||
|
|
||||||
|
@ -14,14 +13,9 @@ def connect(uri=None, session_args={}, engine_args={}):
|
||||||
Calling this function also binds the metadata object to the created engine.
|
Calling this function also binds the metadata object to the created engine.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Fall back to the environment, then a URI within the package
|
# If we didn't get a uri, fall back to the default
|
||||||
if not uri:
|
if uri is None:
|
||||||
uri = os.environ.get('POKEDEX_DB_ENGINE', None)
|
uri = get_default_db_uri()
|
||||||
|
|
||||||
if not uri:
|
|
||||||
sqlite_path = pkg_resources.resource_filename('pokedex',
|
|
||||||
'data/pokedex.sqlite')
|
|
||||||
uri = 'sqlite:///' + sqlite_path
|
|
||||||
|
|
||||||
### Do some fixery for MySQL
|
### Do some fixery for MySQL
|
||||||
if uri[0:5] == 'mysql':
|
if uri[0:5] == 'mysql':
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
import csv
|
import csv
|
||||||
import fnmatch
|
import fnmatch
|
||||||
import os.path
|
import os.path
|
||||||
import pkg_resources
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from sqlalchemy.orm.attributes import instrumentation_registry
|
from sqlalchemy.orm.attributes import instrumentation_registry
|
||||||
|
@ -11,6 +10,7 @@ import sqlalchemy.types
|
||||||
|
|
||||||
from pokedex.db import metadata
|
from pokedex.db import metadata
|
||||||
import pokedex.db.tables as tables
|
import pokedex.db.tables as tables
|
||||||
|
from pokedex.defaults import get_default_csv_dir
|
||||||
|
|
||||||
|
|
||||||
def _get_table_names(metadata, patterns):
|
def _get_table_names(metadata, patterns):
|
||||||
|
@ -121,8 +121,8 @@ def load(session, tables=[], directory=None, drop_tables=False, verbose=False):
|
||||||
print_start, print_status, print_done = _get_verbose_prints(verbose)
|
print_start, print_status, print_done = _get_verbose_prints(verbose)
|
||||||
|
|
||||||
|
|
||||||
if not directory:
|
if directory is None:
|
||||||
directory = pkg_resources.resource_filename('pokedex', 'data/csv')
|
directory = get_default_csv_dir()
|
||||||
|
|
||||||
table_names = _get_table_names(metadata, tables)
|
table_names = _get_table_names(metadata, tables)
|
||||||
table_objs = [metadata.tables[name] for name in table_names]
|
table_objs = [metadata.tables[name] for name in table_names]
|
||||||
|
@ -276,7 +276,7 @@ def dump(session, tables=[], directory=None, verbose=False):
|
||||||
|
|
||||||
|
|
||||||
if not directory:
|
if not directory:
|
||||||
directory = pkg_resources.resource_filename('pokedex', 'data/csv')
|
directory = get_default_csv_dir()
|
||||||
|
|
||||||
table_names = _get_table_names(metadata, tables)
|
table_names = _get_table_names(metadata, tables)
|
||||||
table_names.sort()
|
table_names.sort()
|
||||||
|
|
45
pokedex/defaults.py
Normal file
45
pokedex/defaults.py
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
""" pokedex.defaults - logic for finding default paths """
|
||||||
|
|
||||||
|
import os
|
||||||
|
import pkg_resources
|
||||||
|
|
||||||
|
def get_default_db_uri_with_origin():
|
||||||
|
uri = os.environ.get('POKEDEX_DB_ENGINE', None)
|
||||||
|
origin = 'environment'
|
||||||
|
|
||||||
|
if uri is None:
|
||||||
|
sqlite_path = pkg_resources.resource_filename('pokedex',
|
||||||
|
'data/pokedex.sqlite')
|
||||||
|
uri = 'sqlite:///' + sqlite_path
|
||||||
|
origin = 'default'
|
||||||
|
|
||||||
|
return uri, origin
|
||||||
|
|
||||||
|
def get_default_index_dir_with_origin():
|
||||||
|
index_dir = os.environ.get('POKEDEX_INDEX_DIR', None)
|
||||||
|
origin = 'environment'
|
||||||
|
|
||||||
|
if index_dir is None:
|
||||||
|
index_dir = pkg_resources.resource_filename('pokedex',
|
||||||
|
'data/whoosh-index')
|
||||||
|
origin = 'default'
|
||||||
|
|
||||||
|
return index_dir, origin
|
||||||
|
|
||||||
|
def get_default_csv_dir_with_origin():
|
||||||
|
csv_dir = pkg_resources.resource_filename('pokedex', 'data/csv')
|
||||||
|
origin = 'default'
|
||||||
|
|
||||||
|
return csv_dir, origin
|
||||||
|
|
||||||
|
|
||||||
|
def get_default_db_uri():
|
||||||
|
return get_default_db_uri_with_origin()[0]
|
||||||
|
|
||||||
|
def get_default_index_dir():
|
||||||
|
return get_default_index_dir_with_origin()[0]
|
||||||
|
|
||||||
|
def get_default_csv_dir():
|
||||||
|
return get_default_csv_dir_with_origin()[0]
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
# encoding: utf8
|
# encoding: utf8
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
import os, os.path
|
import os, os.path
|
||||||
import pkg_resources
|
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
|
@ -19,6 +18,7 @@ import whoosh.spelling
|
||||||
from pokedex.db import connect
|
from pokedex.db import connect
|
||||||
import pokedex.db.tables as tables
|
import pokedex.db.tables as tables
|
||||||
from pokedex.roomaji import romanize
|
from pokedex.roomaji import romanize
|
||||||
|
from pokedex.defaults import get_default_index_dir
|
||||||
|
|
||||||
__all__ = ['PokedexLookup']
|
__all__ = ['PokedexLookup']
|
||||||
|
|
||||||
|
@ -102,13 +102,10 @@ class PokedexLookup(object):
|
||||||
# By the time this returns, self.index, self.speller, and self.session
|
# By the time this returns, self.index, self.speller, and self.session
|
||||||
# must be set
|
# must be set
|
||||||
|
|
||||||
# Defaults
|
# If a directory was not given, use the default
|
||||||
if not directory:
|
if directory is None:
|
||||||
directory = os.environ.get('POKEDEX_INDEX_DIR', None)
|
directory = get_default_index_dir()
|
||||||
|
|
||||||
if not directory:
|
|
||||||
directory = pkg_resources.resource_filename('pokedex',
|
|
||||||
'data/whoosh-index')
|
|
||||||
self.directory = directory
|
self.directory = directory
|
||||||
|
|
||||||
if session:
|
if session:
|
||||||
|
|
Loading…
Reference in a new issue