bdd: rename and clean up osm_data steps

Move common OPL creation code into a function and remove
unused imports.
This commit is contained in:
Sarah Hoffmann
2021-01-04 20:17:17 +01:00
parent 72587b08fa
commit 2712c5f90e

View File

@@ -1,8 +1,27 @@
import subprocess
import tempfile import tempfile
import random import random
import os 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') @given(u'the ([0-9.]+ )?grid')
def define_node_grid(context, grid_step): 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. The data is expected as attached text in OPL format.
""" """
# create a OSM file in /tmp and import it # create an OSM file and import it
with tempfile.NamedTemporaryFile(dir='/tmp', suffix='.opl', delete=False) as fd: fname = write_opl_file(context.text, context.osm)
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')
context.nominatim.run_setup_script('import-data', osm_file=fname, context.nominatim.run_setup_script('import-data', osm_file=fname,
osm2pgsql_cache=300) osm2pgsql_cache=300)
os.remove(fname)
### reintroduce the triggers/indexes we've lost by having osm2pgsql set up place again ### reintroduce the triggers/indexes we've lost by having osm2pgsql set up place again
cur = context.db.cursor() 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)""") cur.execute("""CREATE UNIQUE INDEX idx_place_osm_unique on place using btree(osm_id,osm_type,class,type)""")
context.db.commit() context.db.commit()
os.remove(fname)
@when(u'updating osm data') @when(u'updating osm data')
def update_from_osm_file(context): 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', context.nominatim.run_setup_script('create-functions', 'create-partition-functions',
'enable-diff-updates') 'enable-diff-updates')
# create a OSM file in /tmp and import it # create an OSM file and import it
with tempfile.NamedTemporaryFile(dir='/tmp', suffix='.opl', delete=False) as fd: fname = write_opl_file(context.text, context.osm)
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')
context.nominatim.run_update_script(import_diff=fname) context.nominatim.run_update_script(import_diff=fname)
os.remove(fname) os.remove(fname)