X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/f2debbef199337c98bbd21a29203da7378067ec9..09f16616388490578ddebdb1d8be5ae545cd1d64:/test/bdd/steps/osm_data.py diff --git a/test/bdd/steps/osm_data.py b/test/bdd/steps/osm_data.py index aeca5637..d0d8d892 100644 --- a/test/bdd/steps/osm_data.py +++ b/test/bdd/steps/osm_data.py @@ -4,16 +4,52 @@ import random import os from nose.tools import * # for assert functions +@given(u'the (\d+ )?grid') +def define_node_grid(context, grid_step): + """ + Define a grid of node positions. + """ + if grid_step is not None: + grid_step = int(grd_step.strip()) + else: + grid_step = 0.00001 + + context.osm.clear_grid() + + i = 0 + for h in context.table.headings: + if h.isdigit(): + context.osm.add_grid_node(int(h), 0, i) + i += grid_step + + x = grid_step + for r in context.table: + y = 0 + for h in r: + if h.isdigit(): + context.osm.add_grid_node(int(h), x, y) + y += grid_step + x += grid_step + + @when(u'loading osm data') def load_osm_file(context): + """ + Load the given data into a freshly created test data using osm2pgsql. + No further indexing is done. + 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: - line += " x%d y%d" % (random.random()*360 - 180, - random.random()*180 - 90) + 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') @@ -31,3 +67,42 @@ def load_osm_file(context): os.remove(fname) +@when(u'updating osm data') +def update_from_osm_file(context): + """ + Update a database previously populated with 'loading osm data'. + Needs to run indexing on the existing data first to yield the correct result. + + 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, housenumber, street, addr_place, isin, postcode, + country_code, extratags, geometry) select * from place""") + cur.execute( + """insert into location_property_osmline + (osm_id, interpolationtype, street, addr_place, + postcode, calculated_country_code, linegeo) + SELECT osm_id, housenumber, street, addr_place, + postcode, country_code, 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') + + # 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') + + context.nominatim.run_update_script(import_diff=fname) + os.remove(fname)