]> git.openstreetmap.org Git - nominatim.git/commitdiff
move zoom_to_rank computation to extra file
authorSarah Hoffmann <lonvia@denofr.de>
Thu, 18 May 2023 16:29:41 +0000 (18:29 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Thu, 18 May 2023 16:29:41 +0000 (18:29 +0200)
nominatim/api/v1/helpers.py [new file with mode: 0644]
nominatim/api/v1/server_glue.py
nominatim/clicmd/api.py

diff --git a/nominatim/api/v1/helpers.py b/nominatim/api/v1/helpers.py
new file mode 100644 (file)
index 0000000..e16a22a
--- /dev/null
@@ -0,0 +1,31 @@
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of Nominatim. (https://nominatim.org)
+#
+# Copyright (C) 2023 by the Nominatim developer community.
+# For a full list of authors see the git log.
+"""
+Helper function for parsing parameters and and outputting data
+specifically for the v1 version of the API.
+"""
+
+REVERSE_MAX_RANKS = [2, 2, 2,   # 0-2   Continent/Sea
+                     4, 4,      # 3-4   Country
+                     8,         # 5     State
+                     10, 10,    # 6-7   Region
+                     12, 12,    # 8-9   County
+                     16, 17,    # 10-11 City
+                     18,        # 12    Town
+                     19,        # 13    Village/Suburb
+                     22,        # 14    Hamlet/Neighbourhood
+                     25,        # 15    Localities
+                     26,        # 16    Major Streets
+                     27,        # 17    Minor Streets
+                     30         # 18    Building
+                    ]
+
+
+def zoom_to_rank(zoom: int) -> int:
+    """ Convert a zoom parameter into a rank according to the v1 API spec.
+    """
+    return REVERSE_MAX_RANKS[max(0, min(18, zoom))]
index fb91a0cd1b11737edb184cd981dd41379ffddbc3..ccf8f7d104b33b7672d2e9241ddc563c3f003401 100644 (file)
@@ -17,6 +17,7 @@ from nominatim.config import Configuration
 import nominatim.api as napi
 import nominatim.api.logging as loglib
 from nominatim.api.v1.format import dispatch as formatting
+from nominatim.api.v1 import helpers
 
 CONTENT_TYPE = {
   'text': 'text/plain; charset=utf-8',
@@ -319,10 +320,9 @@ async def reverse_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) ->
     debug = params.setup_debugging()
     coord = napi.Point(params.get_float('lon'), params.get_float('lat'))
     locales = napi.Locales.from_accept_languages(params.get_accepted_languages())
-    zoom = max(0, min(18, params.get_int('zoom', 18)))
 
     details = params.parse_geometry_details(fmt)
-    details['max_rank'] = REVERSE_MAX_RANKS[zoom]
+    details['max_rank'] = helpers.zoom_to_rank(params.get_int('zoom', 18))
     details['layers'] = params.get_layers()
 
     result = await api.reverse(coord, **details)
@@ -374,22 +374,6 @@ async def lookup_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> A
 
 EndpointFunc = Callable[[napi.NominatimAPIAsync, ASGIAdaptor], Any]
 
-REVERSE_MAX_RANKS = [2, 2, 2,   # 0-2   Continent/Sea
-                     4, 4,      # 3-4   Country
-                     8,         # 5     State
-                     10, 10,    # 6-7   Region
-                     12, 12,    # 8-9   County
-                     16, 17,    # 10-11 City
-                     18,        # 12    Town
-                     19,        # 13    Village/Suburb
-                     22,        # 14    Hamlet/Neighbourhood
-                     25,        # 15    Localities
-                     26,        # 16    Major Streets
-                     27,        # 17    Minor Streets
-                     30         # 18    Building
-                    ]
-
-
 ROUTES = [
     ('status', status_endpoint),
     ('details', details_endpoint),
index c4120599167479a6d9099b480d2ff05e38504b8a..82ebb2c109af3b6a8582e83422140cd3b7359dc6 100644 (file)
@@ -18,7 +18,7 @@ from nominatim.errors import UsageError
 from nominatim.clicmd.args import NominatimArgs
 import nominatim.api as napi
 import nominatim.api.v1 as api_output
-from nominatim.api.v1.server_glue import REVERSE_MAX_RANKS
+from nominatim.api.v1.helpers import zoom_to_rank
 
 # Do not repeat documentation of subcommand classes.
 # pylint: disable=C0111
@@ -164,7 +164,7 @@ class APIReverse:
         api = napi.NominatimAPI(args.project_dir)
 
         result = api.reverse(napi.Point(args.lon, args.lat),
-                             max_rank=REVERSE_MAX_RANKS[max(0, min(18, args.zoom or 18))],
+                             max_rank=zoom_to_rank(args.zoom or 18),
                              layers=args.get_layers(napi.DataLayer.ADDRESS | napi.DataLayer.POI),
                              address_details=True, # needed for display name
                              geometry_output=args.get_geometry_output(),