]> git.openstreetmap.org Git - nominatim.git/blobdiff - nominatim/tools/country_info.py
cache loaded configuration
[nominatim.git] / nominatim / tools / country_info.py
index 1f7b799610743926f513f67fe3e40b20e76e6397..5b37c0b645dfffe301bfc649b38c5a77b758367b 100644 (file)
@@ -1,8 +1,13 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# This file is part of Nominatim. (https://nominatim.org)
+#
+# Copyright (C) 2022 by the Nominatim developer community.
+# For a full list of authors see the git log.
 """
 Functions for importing and managing static country information.
 """
 import psycopg2.extras
 """
 Functions for importing and managing static country information.
 """
 import psycopg2.extras
-import yaml
 
 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
@@ -14,23 +19,42 @@ class _CountryInfo:
     def __init__(self):
         self._info = {}
 
     def __init__(self):
         self._info = {}
 
-    def load(self, configfile):
+
+    def load(self, config):
+        """ Load the country properties from the configuration files,
+            if they are not loaded yet.
+        """
         if not self._info:
         if not self._info:
-            self._info = yaml.safe_load(configfile.read_text())
+            self._info = config.load_sub_configuration('country_settings.yaml')
+            # Convert languages into a list for simpler handling.
+            for prop in self._info.values():
+                if 'languages' not in prop:
+                    prop['languages'] = []
+                elif not isinstance(prop['languages'], list):
+                    prop['languages'] = [x.strip()
+                                         for x in prop['languages'].split(',')]
+
 
     def items(self):
 
     def items(self):
+        """ Return tuples of (country_code, property dict) as iterable.
+        """
         return self._info.items()
 
 
 _COUNTRY_INFO = _CountryInfo()
 
         return self._info.items()
 
 
 _COUNTRY_INFO = _CountryInfo()
 
-def setup_country_config(configfile):
+def setup_country_config(config):
     """ Load country properties from the configuration file.
         Needs to be called before using any other functions in this
         file.
     """
     """ Load country properties from the configuration file.
         Needs to be called before using any other functions in this
         file.
     """
-    _COUNTRY_INFO.load(configfile)
-    print(_COUNTRY_INFO._info)
+    _COUNTRY_INFO.load(config)
+
+
+def iterate():
+    """ Iterate over country code and properties.
+    """
+    return _COUNTRY_INFO.items()
 
 
 def setup_country_tables(dsn, sql_dir, ignore_partitions=False):
 
 
 def setup_country_tables(dsn, sql_dir, ignore_partitions=False):
@@ -47,10 +71,7 @@ def setup_country_tables(dsn, sql_dir, ignore_partitions=False):
                 partition = 0
             else:
                 partition = props.get('partition')
                 partition = 0
             else:
                 partition = props.get('partition')
-            if ',' in (props.get('languages', ',') or ','):
-                lang = None
-            else:
-                lang = props['languages']
+            lang = props['languages'][0] if len(props['languages']) == 1 else None
             params.append((ccode, partition, lang))
 
     with connect(dsn) as conn:
             params.append((ccode, partition, lang))
 
     with connect(dsn) as conn: