remove the conversion to json for name

This commit is contained in:
Tareq Al-Ahdal
2022-04-01 22:54:14 +08:00
parent e9f979b67b
commit e9c14979a4

View File

@@ -7,12 +7,12 @@
""" """
Functions for importing and managing static country information. Functions for importing and managing static country information.
""" """
import json
import psycopg2.extras import psycopg2.extras
from nominatim.db import utils as db_utils from nominatim.db import utils as db_utils
from nominatim.db.connection import connect from nominatim.db.connection import connect
class _CountryInfo: class _CountryInfo:
""" Caches country-specific properties from the configuration file. """ Caches country-specific properties from the configuration file.
""" """
@@ -21,7 +21,6 @@ class _CountryInfo:
self._info = {} self._info = {}
self._key_prefix = 'name' self._key_prefix = 'name'
def load(self, config): def load(self, config):
""" Load the country properties from the configuration files, """ Load the country properties from the configuration files,
if they are not loaded yet. if they are not loaded yet.
@@ -52,6 +51,7 @@ class _CountryInfo:
_COUNTRY_INFO = _CountryInfo() _COUNTRY_INFO = _CountryInfo()
def setup_country_config(config): def setup_country_config(config):
""" Load country properties from the configuration file. """ Load country properties from the configuration file.
Needs to be called before using any other functions in this Needs to be called before using any other functions in this
@@ -82,13 +82,14 @@ def setup_country_tables(dsn, sql_dir, ignore_partitions=False):
partition = 0 partition = 0
else: else:
partition = props.get('partition') partition = props.get('partition')
lang = props['languages'][0] if len(props['languages']) == 1 else None lang = props['languages'][0] if len(
name = add_prefix_to_keys(props.get('names') props['languages']) == 1 else None
.get(_COUNTRY_INFO.key_prefix()), _COUNTRY_INFO.key_prefix()) name = add_prefix_to_keys(props.get('names').get(
name = json.dumps(name, ensure_ascii=False, separators=(', ', '=>')) _COUNTRY_INFO.key_prefix()), _COUNTRY_INFO.key_prefix())
params.append((ccode, name[1:-1], lang, partition)) params.append((ccode, name, lang, partition))
with connect(dsn) as conn: with connect(dsn) as conn:
with conn.cursor() as cur: with conn.cursor() as cur:
psycopg2.extras.register_hstore(cur)
cur.execute( cur.execute(
""" CREATE TABLE public.country_name ( """ CREATE TABLE public.country_name (
country_code character varying(2), country_code character varying(2),
@@ -115,8 +116,8 @@ def create_country_names(conn, tokenizer, languages=None):
def _include_key(key): def _include_key(key):
return key == _COUNTRY_INFO.key_prefix() or \ return key == _COUNTRY_INFO.key_prefix() or \
(key.startswith(_COUNTRY_INFO.key_prefix()+':') and (key.startswith(_COUNTRY_INFO.key_prefix()+':') and
(not languages or key[len(_COUNTRY_INFO.key_prefix())+1:] in languages)) (not languages or key[len(_COUNTRY_INFO.key_prefix())+1:] in languages))
with conn.cursor() as cur: with conn.cursor() as cur:
psycopg2.extras.register_hstore(cur) psycopg2.extras.register_hstore(cur)
@@ -133,7 +134,8 @@ def create_country_names(conn, tokenizer, languages=None):
# country names (only in languages as provided) # country names (only in languages as provided)
if name: if name:
names.update(((k, v) for k, v in name.items() if _include_key(k))) names.update(((k, v)
for k, v in name.items() if _include_key(k)))
analyzer.add_country_names(code, names) analyzer.add_country_names(code, names)