+# SPDX-License-Identifier: GPL-2.0-only
+#
+# This file is part of Nominatim. (https://nominatim.org)
+#
+# Copyright (C) 2022 by the Nominatim developer community.
+# For a full list of authors see the git log.
import tempfile
import random
import os
+from pathlib import Path
+
+from nominatim.tools.exec_utils import run_osm2pgsql
+
+def get_osm2pgsql_options(nominatim_env, fname, append):
+ return dict(import_file=fname,
+ osm2pgsql=str(nominatim_env.build_dir / 'osm2pgsql' / 'osm2pgsql'),
+ osm2pgsql_cache=50,
+ osm2pgsql_style=str(nominatim_env.src_dir / 'settings' / 'import-extratags.style'),
+ threads=1,
+ dsn=nominatim_env.get_libpq_dsn(),
+ flatnode_file='',
+ tablespaces=dict(slim_data='', slim_index='',
+ main_data='', main_index=''),
+ append=append
+ )
+
def write_opl_file(opl, grid):
""" Create a temporary OSM file from OPL and return the file name. It is
return fd.name
+@given(u'the scene (?P<scene>.+)')
+def set_default_scene(context, scene):
+ context.scene = scene
+
@given(u'the ([0-9.]+ )?grid')
def define_node_grid(context, grid_step):
"""
grid_step = 0.00001
context.osm.set_grid([context.table.headings] + [list(h) for h in context.table],
- grid_step)
+ grid_step)
@when(u'loading osm data')
"""
# create an OSM file and import it
fname = write_opl_file(context.text, context.osm)
- context.nominatim.run_setup_script('import-data', osm_file=fname,
- osm2pgsql_cache=300)
- os.remove(fname)
+ try:
+ run_osm2pgsql(get_osm2pgsql_options(context.nominatim, fname, append=False))
+ finally:
+ os.remove(fname)
### reintroduce the triggers/indexes we've lost by having osm2pgsql set up place again
cur = context.db.cursor()
The data is expected as attached text in OPL format.
"""
- context.nominatim.run_setup_script('create-functions', 'create-partition-functions')
-
- cur = context.db.cursor()
- cur.execute("""insert into placex (osm_type, osm_id, class, type, name, admin_level, address, extratags, geometry)
- select osm_type, osm_id, class, type, name, admin_level, address, extratags, geometry from place""")
- cur.execute(
- """insert into location_property_osmline (osm_id, address, linegeo)
- SELECT osm_id, address, geometry from place
- WHERE class='place' and type='houses' and osm_type='W'
- and ST_GeometryType(geometry) = 'ST_LineString'""")
- context.db.commit()
- context.nominatim.run_setup_script('index', 'index-noanalyse')
- context.nominatim.run_setup_script('create-functions', 'create-partition-functions',
- 'enable-diff-updates')
+ context.nominatim.copy_from_place(context.db)
+ context.nominatim.run_nominatim('index')
+ context.nominatim.run_nominatim('refresh', '--functions')
# create an OSM file and import it
fname = write_opl_file(context.text, context.osm)
- context.nominatim.run_update_script(import_diff=fname)
- os.remove(fname)
+ try:
+ run_osm2pgsql(get_osm2pgsql_options(context.nominatim, fname, append=True))
+ finally:
+ os.remove(fname)