from .config import Configuration
from .admin.exec_utils import run_legacy_script
+from .indexer.indexer import Indexer
+
+def _num_system_cpus():
+ try:
+ cpus = len(os.sched_getaffinity(0))
+ except NotImplementedError:
+ cpus = None
+
+ return cpus or os.cpu_count()
+
+
class CommandlineParser:
""" Wraps some of the common functions for parsing the command line
and setting up subcommands.
args.project_dir = Path(args.project_dir)
logging.basicConfig(stream=sys.stderr,
- format='%(asctime)s %(levelname)s: %(message)s',
+ format='%(asctime)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
level=max(4 - args.verbose, 1) * 10)
@staticmethod
def add_args(parser):
- pass
+ group = parser.add_argument_group('Filter arguments')
+ group.add_argument('--boundaries-only', action='store_true',
+ help="""Index only administrative boundaries.""")
+ group.add_argument('--no-boundaries', action='store_true',
+ help="""Index everything except administrative boundaries.""")
+ group.add_argument('--minrank', '-r', type=int, metavar='RANK', default=0,
+ help='Minimum/starting rank')
+ group.add_argument('--maxrank', '-R', type=int, metavar='RANK', default=30,
+ help='Maximum/finishing rank')
@staticmethod
def run(args):
- return run_legacy_script('update.php', '--index', nominatim_env=args)
+ indexer = Indexer(args.config.get_libpq_dsn(),
+ args.threads or _num_system_cpus() or 1)
+
+ if not args.no_boundaries:
+ indexer.index_boundaries(args.minrank, args.maxrank)
+ if not args.boundaries_only:
+ indexer.index_by_rank(args.minrank, args.maxrank)
+
+ if not args.no_boundaries and not args.boundaries_only:
+ indexer.update_status_table()
+
+ return 0
class UpdateRefresh:
class QueryExport:
"""\
- Export addresses as CSV file from a Nominatim database.
+ Export addresses as CSV file from the database.
"""
@staticmethod
parser.add_subcommand('refresh', UpdateRefresh)
parser.add_subcommand('export', QueryExport)
- parser.add_subcommand('search', QueryTodo)
- parser.add_subcommand('reverse', QueryTodo)
- parser.add_subcommand('lookup', QueryTodo)
- parser.add_subcommand('details', QueryTodo)
- parser.add_subcommand('status', QueryTodo)
+
+ if kwargs.get('phpcgi_path'):
+ parser.add_subcommand('search', QueryTodo)
+ parser.add_subcommand('reverse', QueryTodo)
+ parser.add_subcommand('lookup', QueryTodo)
+ parser.add_subcommand('details', QueryTodo)
+ parser.add_subcommand('status', QueryTodo)
+ else:
+ parser.parser.epilog = 'php-cgi not found. Query commands not available.'
return parser.run(**kwargs)