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 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)