from .config import Configuration
from .tools.exec_utils import run_legacy_script, run_api_script
+from .db.connection import connect
-from .indexer.indexer import Indexer
+LOG = logging.getLogger()
def _num_system_cpus():
try:
@staticmethod
def run(args):
+ try:
+ import osmium # pylint: disable=W0611
+ except ModuleNotFoundError:
+ LOG.fatal("pyosmium not installed. Replication functions not available.\n"
+ "To install pyosmium via pip: pip3 install osmium")
+ return 1
+
+ from .tools import replication, refresh
+
+ conn = connect(args.config.get_libpq_dsn())
+
params = ['update.php']
if args.init:
- params.append('--init-updates')
- if not args.update_functions:
- params.append('--no-update-functions')
- elif args.check_for_updates:
- params.append('--check-for-updates')
+ LOG.warning("Initialising replication updates")
+ replication.init_replication(conn, args.config.REPLICATION_URL)
+ if args.update_functions:
+ LOG.warning("Create functions")
+ refresh.create_functions(conn, args.config, args.data_dir,
+ True, False)
+ conn.close()
+ return 0
+
+ if args.check_for_updates:
+ ret = replication.check_for_updates(conn, args.config.REPLICATION_URL)
+ conn.close()
+ return ret
+
+ if args.once:
+ params.append('--import-osmosis')
else:
- if args.once:
- params.append('--import-osmosis')
- else:
- params.append('--import-osmosis-all')
- if not args.do_index:
- params.append('--no-index')
+ params.append('--import-osmosis-all')
+ if not args.do_index:
+ params.append('--no-index')
return run_legacy_script(*params, nominatim_env=args)
@staticmethod
def run(args):
+ from .indexer.indexer import Indexer
+
indexer = Indexer(args.config.get_libpq_dsn(),
args.threads or _num_system_cpus() or 1)
@staticmethod
def run(args):
+ from .tools import refresh
+
+ conn = connect(args.config.get_libpq_dsn())
+
if args.postcodes:
- run_legacy_script('update.php', '--calculate-postcodes',
- nominatim_env=args, throw_on_fail=True)
+ LOG.warning("Update postcodes centroid")
+ refresh.update_postcodes(conn, args.data_dir)
+
if args.word_counts:
- run_legacy_script('update.php', '--recompute-word-counts',
- nominatim_env=args, throw_on_fail=True)
+ LOG.warning('Recompute frequency of full-word search terms')
+ refresh.recompute_word_counts(conn, args.data_dir)
+
if args.address_levels:
- run_legacy_script('update.php', '--update-address-levels',
- nominatim_env=args, throw_on_fail=True)
+ cfg = Path(args.config.ADDRESS_LEVEL_CONFIG)
+ LOG.warning('Updating address levels from %s', cfg)
+ refresh.load_address_levels_from_file(conn, cfg)
+
if args.functions:
- params = ['setup.php', '--create-functions', '--create-partition-functions']
- if args.diffs:
- params.append('--enable-diff-updates')
- if args.enable_debug_statements:
- params.append('--enable-debug-statements')
- run_legacy_script(*params, nominatim_env=args, throw_on_fail=True)
+ LOG.warning('Create functions')
+ refresh.create_functions(conn, args.config, args.data_dir,
+ args.diffs, args.enable_debug_statements)
+
if args.wiki_data:
run_legacy_script('setup.php', '--import-wikipedia-articles',
nominatim_env=args, throw_on_fail=True)
run_legacy_script('setup.php', '--setup-website',
nominatim_env=args, throw_on_fail=True)
+ conn.close()
+
+ return 0
+
class AdminCheckDatabase:
"""\
('polygon_geojson', 'Include geometry of result.')
)
+def _add_api_output_arguments(parser):
+ group = parser.add_argument_group('Output arguments')
+ group.add_argument('--format', default='jsonv2',
+ choices=['xml', 'json', 'jsonv2', 'geojson', 'geocodejson'],
+ help='Format of result')
+ for name, desc in EXTRADATA_PARAMS:
+ group.add_argument('--' + name, action='store_true', help=desc)
+
+ group.add_argument('--lang', '--accept-language', metavar='LANGS',
+ help='Preferred language order for presenting search results')
+ group.add_argument('--polygon-output',
+ choices=['geojson', 'kml', 'svg', 'text'],
+ help='Output geometry of results as a GeoJSON, KML, SVG or WKT.')
+ group.add_argument('--polygon-threshold', type=float, metavar='TOLERANCE',
+ help="""Simplify output geometry.
+ Parameter is difference tolerance in degrees.""")
+
+
class APISearch:
"""\
Execute API search query.
for name, desc in STRUCTURED_QUERY:
group.add_argument('--' + name, help='Structured query: ' + desc)
- group = parser.add_argument_group('Output arguments')
- group.add_argument('--format', default='jsonv2',
- choices=['xml', 'json', 'jsonv2', 'geojson', 'geocodejson'],
- help='Format of result')
- for name, desc in EXTRADATA_PARAMS:
- group.add_argument('--' + name, action='store_true', help=desc)
-
- group.add_argument('--lang', '--accept-language', metavar='LANGS',
- help='Preferred language order for presenting search results')
- group.add_argument('--polygon-output',
- choices=['geojson', 'kml', 'svg', 'text'],
- help='Output geometry of results as a GeoJSON, KML, SVG or WKT.')
- group.add_argument('--polygon-threshold', type=float, metavar='TOLERANCE',
- help="""Simplify output geometry.
- Parameter is difference tolerance in degrees.""")
+ _add_api_output_arguments(parser)
group = parser.add_argument_group('Result limitation')
group.add_argument('--countrycodes', metavar='CC,..',
group.add_argument('--zoom', type=int,
help='Level of detail required for the address')
- group = parser.add_argument_group('Output arguments')
- group.add_argument('--format', default='jsonv2',
- choices=['xml', 'json', 'jsonv2', 'geojson', 'geocodejson'],
- help='Format of result')
- for name, desc in EXTRADATA_PARAMS:
- group.add_argument('--' + name, action='store_true', help=desc)
-
- group.add_argument('--lang', '--accept-language', metavar='LANGS',
- help='Preferred language order for presenting search results')
- group.add_argument('--polygon-output',
- choices=['geojson', 'kml', 'svg', 'text'],
- help='Output geometry of results as a GeoJSON, KML, SVG or WKT.')
- group.add_argument('--polygon-threshold', type=float, metavar='TOLERANCE',
- help="""Simplify output geometry.
- Parameter is difference tolerance in degrees.""")
+ _add_api_output_arguments(parser)
@staticmethod
action='append', required=True, dest='ids',
help='OSM id to lookup in format <NRW><id> (may be repeated)')
- group = parser.add_argument_group('Output arguments')
- group.add_argument('--format', default='jsonv2',
- choices=['xml', 'json', 'jsonv2', 'geojson', 'geocodejson'],
- help='Format of result')
- for name, desc in EXTRADATA_PARAMS:
- group.add_argument('--' + name, action='store_true', help=desc)
-
- group.add_argument('--lang', '--accept-language', metavar='LANGS',
- help='Preferred language order for presenting search results')
- group.add_argument('--polygon-output',
- choices=['geojson', 'kml', 'svg', 'text'],
- help='Output geometry of results as a GeoJSON, KML, SVG or WKT.')
- group.add_argument('--polygon-threshold', type=float, metavar='TOLERANCE',
- help="""Simplify output geometry.
- Parameter is difference tolerance in degrees.""")
+ _add_api_output_arguments(parser)
@staticmethod