update Locales constructor:

expect output names as argument and avoid redundant configuration initialization
This commit is contained in:
Ayush Dhar Dubey
2025-12-20 19:14:20 +05:30
parent 049164086a
commit 4fd616254a
5 changed files with 73 additions and 93 deletions

View File

@@ -8,7 +8,6 @@
Helper functions for localizing names of results.
"""
from typing import Mapping, List, Optional
from .config import Configuration
from .results import AddressLines, BaseResultT
import re
@@ -18,15 +17,15 @@ class Locales:
""" Helper class for localization of names.
It takes a list of language prefixes in their order of preferred
usage.
usage and comma separated name keys (Configuration.OUTPUT_NAMES).
"""
def __init__(self, langs: Optional[List[str]] = None):
self.config = Configuration(None)
def __init__(self, langs: Optional[List[str]] = None,
names: str = 'name:XX,name') -> None:
self.languages = langs or []
self.name_tags: List[str] = []
parts = self.config.OUTPUT_NAMES.split(',')
parts = names.split(',') if names else []
for part in parts:
part = part.strip()
@@ -68,7 +67,7 @@ class Locales:
return next(iter(names.values()))
@staticmethod
def from_accept_languages(langstr: str) -> 'Locales':
def from_accept_languages(langstr: str, names: str = 'name:XX,name') -> 'Locales':
""" Create a localization object from a language list in the
format of HTTP accept-languages header.
@@ -96,7 +95,7 @@ class Locales:
if len(parts) > 1 and all(c[0] != parts[0] for c in candidates):
languages.append(parts[0])
return Locales(languages)
return Locales(languages, names)
def localize(self, lines: AddressLines) -> None:
""" Sets the local name of address parts according to the chosen

View File

@@ -174,7 +174,8 @@ async def details_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
if result is None:
params.raise_error('No place with that OSM ID found.', status=404)
locales = Locales.from_accept_languages(get_accepted_languages(params))
locales = Locales.from_accept_languages(get_accepted_languages(params),
params.config().OUTPUT_NAMES)
locales.localize_results([result])
output = params.formatting().format_result(
@@ -215,8 +216,8 @@ async def reverse_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
query = ''
if result:
Locales.from_accept_languages(get_accepted_languages(params)).localize_results(
[result])
Locales.from_accept_languages(get_accepted_languages(params),
params.config().OUTPUT_NAMES).localize_results([result])
fmt_options = {'query': query,
'extratags': params.get_bool('extratags', False),
@@ -255,7 +256,8 @@ async def lookup_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
if debug:
return build_response(params, loglib.get_and_disable(), num_results=len(results))
Locales.from_accept_languages(get_accepted_languages(params)).localize_results(results)
Locales.from_accept_languages(get_accepted_languages(params),
params.config().OUTPUT_NAMES).localize_results(results)
fmt_options = {'extratags': params.get_bool('extratags', False),
'namedetails': params.get_bool('namedetails', False),
@@ -348,7 +350,8 @@ async def search_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
except UsageError as err:
params.raise_error(str(err))
Locales.from_accept_languages(get_accepted_languages(params)).localize_results(results)
Locales.from_accept_languages(get_accepted_languages(params),
params.config().OUTPUT_NAMES).localize_results(results)
if details['dedupe'] and len(results) > 1:
results = helpers.deduplicate_results(results, max_results)