]> git.openstreetmap.org Git - nominatim.git/commitdiff
modify data import logic to load country names from yaml
authorTareq Al-Ahdal <tareqoalahdal@gmail.com>
Sat, 12 Mar 2022 07:20:57 +0000 (15:20 +0800)
committerTareq Al-Ahdal <tareqoalahdal@gmail.com>
Sat, 12 Mar 2022 07:20:57 +0000 (15:20 +0800)
data/country_name.sql [deleted file]
nominatim/tools/country_info.py

diff --git a/data/country_name.sql b/data/country_name.sql
deleted file mode 100644 (file)
index 68e44c7..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---
--- PostgreSQL database dump
---
-
-CREATE TABLE public.country_name (
-    country_code character varying(2),
-    name public.hstore,
-    derived_name public.hstore,
-    country_default_language_code text,
-    partition integer
-);
index 5b37c0b645dfffe301bfc649b38c5a77b758367b..769541f4a1cae69a36a5ca2b219660df131008cf 100644 (file)
@@ -11,6 +11,8 @@ import psycopg2.extras
 
 from nominatim.db import utils as db_utils
 from nominatim.db.connection import connect
 
 from nominatim.db import utils as db_utils
 from nominatim.db.connection import connect
+from io import StringIO
+import json
 
 class _CountryInfo:
     """ Caches country-specific properties from the configuration file.
 
 class _CountryInfo:
     """ Caches country-specific properties from the configuration file.
@@ -33,7 +35,8 @@ class _CountryInfo:
                 elif not isinstance(prop['languages'], list):
                     prop['languages'] = [x.strip()
                                          for x in prop['languages'].split(',')]
                 elif not isinstance(prop['languages'], list):
                     prop['languages'] = [x.strip()
                                          for x in prop['languages'].split(',')]
-
+                if 'name' not in prop:
+                    prop['name'] = {}
 
     def items(self):
         """ Return tuples of (country_code, property dict) as iterable.
 
     def items(self):
         """ Return tuples of (country_code, property dict) as iterable.
@@ -61,10 +64,9 @@ def setup_country_tables(dsn, sql_dir, ignore_partitions=False):
     """ Create and populate the tables with basic static data that provides
         the background for geocoding. Data is assumed to not yet exist.
     """
     """ Create and populate the tables with basic static data that provides
         the background for geocoding. Data is assumed to not yet exist.
     """
-    db_utils.execute_file(dsn, sql_dir / 'country_name.sql')
     db_utils.execute_file(dsn, sql_dir / 'country_osm_grid.sql.gz')
 
     db_utils.execute_file(dsn, sql_dir / 'country_osm_grid.sql.gz')
 
-    params = []
+    params, country_names_data = [], ''
     for ccode, props in _COUNTRY_INFO.items():
         if ccode is not None and props is not None:
             if ignore_partitions:
     for ccode, props in _COUNTRY_INFO.items():
         if ccode is not None and props is not None:
             if ignore_partitions:
@@ -74,8 +76,21 @@ def setup_country_tables(dsn, sql_dir, ignore_partitions=False):
             lang = props['languages'][0] if len(props['languages']) == 1 else None
             params.append((ccode, partition, lang))
 
             lang = props['languages'][0] if len(props['languages']) == 1 else None
             params.append((ccode, partition, lang))
 
+            name = json.dumps(props.get('name'), ensure_ascii=False, separators=(', ', '=>'))
+            country_names_data += ccode + '\t' + name[1:-1] + '\n'
+
     with connect(dsn) as conn:
         with conn.cursor() as cur:
     with connect(dsn) as conn:
         with conn.cursor() as cur:
+            cur.execute(
+                """CREATE TABLE public.country_name (
+                        country_code character varying(2),
+                        name public.hstore,
+                        derived_name public.hstore,
+                        country_default_language_code text,
+                        partition integer
+                );""")
+            data = StringIO(country_names_data)
+            cur.copy_from(data, 'country_name', columns=('country_code', 'name'))
             cur.execute_values(
                 """ UPDATE country_name
                     SET partition = part, country_default_language_code = lang
             cur.execute_values(
                 """ UPDATE country_name
                     SET partition = part, country_default_language_code = lang
@@ -94,8 +109,8 @@ def create_country_names(conn, tokenizer, languages=None):
         languages = languages.split(',')
 
     def _include_key(key):
         languages = languages.split(',')
 
     def _include_key(key):
-        return key == 'name' or \
-               (key.startswith('name:') and (not languages or key[5:] in languages))
+        return key == 'default' or \
+            (not languages or key in languages)
 
     with conn.cursor() as cur:
         psycopg2.extras.register_hstore(cur)
 
     with conn.cursor() as cur:
         psycopg2.extras.register_hstore(cur)