diff --git a/test/bdd/steps/osm_data.py b/test/bdd/steps/steps_osm_data.py similarity index 80% rename from test/bdd/steps/osm_data.py rename to test/bdd/steps/steps_osm_data.py index c1043baa..465ad718 100644 --- a/test/bdd/steps/osm_data.py +++ b/test/bdd/steps/steps_osm_data.py @@ -1,8 +1,27 @@ -import subprocess import tempfile import random import os +def write_opl_file(opl, grid): + """ Create a temporary OSM file from OPL and return the file name. It is + the responsibility of the caller to delete the file again. + + Node with missing coordinates, can retrieve their coordinates from + a supplied grid. Failing that a random coordinate is assigned. + """ + with tempfile.NamedTemporaryFile(suffix='.opl', delete=False) as fd: + for line in opl.splitlines(): + if line.startswith('n') and line.find(' x') < 0: + coord = grid.grid_node(int(line[1:].split(' ')[0])) + if coord is None: + coord = (random.random() * 360 - 180, + random.random() * 180 - 90) + line += " x%f y%f" % coord + fd.write(line.encode('utf-8')) + fd.write(b'\n') + + return fd.name + @given(u'the ([0-9.]+ )?grid') def define_node_grid(context, grid_step): """ @@ -27,21 +46,11 @@ def load_osm_file(context): The data is expected as attached text in OPL format. """ - # create a OSM file in /tmp and import it - with tempfile.NamedTemporaryFile(dir='/tmp', suffix='.opl', delete=False) as fd: - fname = fd.name - for line in context.text.splitlines(): - if line.startswith('n') and line.find(' x') < 0: - coord = context.osm.grid_node(int(line[1:].split(' ')[0])) - if coord is None: - coord = (random.random() * 360 - 180, - random.random() * 180 - 90) - line += " x%f y%f" % coord - fd.write(line.encode('utf-8')) - fd.write(b'\n') - + # 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) ### reintroduce the triggers/indexes we've lost by having osm2pgsql set up place again cur = context.db.cursor() @@ -52,7 +61,6 @@ def load_osm_file(context): cur.execute("""CREATE UNIQUE INDEX idx_place_osm_unique on place using btree(osm_id,osm_type,class,type)""") context.db.commit() - os.remove(fname) @when(u'updating osm data') def update_from_osm_file(context): @@ -77,15 +85,7 @@ def update_from_osm_file(context): context.nominatim.run_setup_script('create-functions', 'create-partition-functions', 'enable-diff-updates') - # create a OSM file in /tmp and import it - with tempfile.NamedTemporaryFile(dir='/tmp', suffix='.opl', delete=False) as fd: - fname = fd.name - for line in context.text.splitlines(): - if line.startswith('n') and line.find(' x') < 0: - line += " x%d y%d" % (random.random() * 360 - 180, - random.random() * 180 - 90) - fd.write(line.encode('utf-8')) - fd.write(b'\n') - + # 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)