mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-09 19:44:07 +00:00
cache loaded configuration
Reading the YAML files is fairly expensive and slows down the BDD tests significantly. Therefore cache the results from reading the file.
This commit is contained in:
@@ -18,7 +18,7 @@ from dotenv import dotenv_values
|
|||||||
from nominatim.errors import UsageError
|
from nominatim.errors import UsageError
|
||||||
|
|
||||||
LOG = logging.getLogger()
|
LOG = logging.getLogger()
|
||||||
|
CONFIG_CACHE = {}
|
||||||
|
|
||||||
def flatten_config_list(content, section=''):
|
def flatten_config_list(content, section=''):
|
||||||
""" Flatten YAML configuration lists that contain include sections
|
""" Flatten YAML configuration lists that contain include sections
|
||||||
@@ -181,14 +181,19 @@ class Configuration:
|
|||||||
"""
|
"""
|
||||||
configfile = self.find_config_file(filename, config)
|
configfile = self.find_config_file(filename, config)
|
||||||
|
|
||||||
|
if str(configfile) in CONFIG_CACHE:
|
||||||
|
return CONFIG_CACHE[str(configfile)]
|
||||||
|
|
||||||
if configfile.suffix in ('.yaml', '.yml'):
|
if configfile.suffix in ('.yaml', '.yml'):
|
||||||
return self._load_from_yaml(configfile)
|
result = self._load_from_yaml(configfile)
|
||||||
|
elif configfile.suffix == '.json':
|
||||||
if configfile.suffix == '.json':
|
|
||||||
with configfile.open('r') as cfg:
|
with configfile.open('r') as cfg:
|
||||||
return json.load(cfg)
|
result = json.load(cfg)
|
||||||
|
else:
|
||||||
|
raise UsageError(f"Config file '{configfile}' has unknown format.")
|
||||||
|
|
||||||
raise UsageError(f"Config file '{configfile}' has unknown format.")
|
CONFIG_CACHE[str(configfile)] = result
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
def find_config_file(self, filename, config=None):
|
def find_config_file(self, filename, config=None):
|
||||||
|
|||||||
Reference in New Issue
Block a user