From 9bfbdc7ca93f7ac9eb4ed18c79cf8b5e49598e6e Mon Sep 17 00:00:00 2001 From: Kentaro Wada Date: Wed, 2 May 2018 16:26:29 +0900 Subject: [PATCH] Fix the order of loading configuration Close https://github.com/wkentaro/labelme/issues/149 1. default config (lowest priority) 2. config file passed by command line argument or ~/.labelmerc 3. command line argument (highest priority) --- labelme/config/__init__.py | 40 ++++++++++++++++++++++---------------- tests/test_app.py | 5 ++++- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/labelme/config/__init__.py b/labelme/config/__init__.py index d5908c1..de97129 100644 --- a/labelme/config/__init__.py +++ b/labelme/config/__init__.py @@ -1,4 +1,3 @@ -import os import os.path as osp import yaml @@ -41,29 +40,36 @@ def validate_config_item(key, value): def get_config(config_from_args=None, config_file=None): - # default config + # Configuration load order: + # + # 1. default config (lowest priority) + # 2. config file passed by command line argument or ~/.labelmerc + # 3. command line argument (highest priority) + + # 1. default config config = get_default_config() - if config_from_args is not None: - update_dict(config, config_from_args, - validate_item=validate_config_item) + # save default config to ~/.labelmerc + home = osp.expanduser('~') + default_config_file = osp.join(home, '.labelmerc') + if not osp.exists(default_config_file): + try: + with open(config_file, 'w') as f: + yaml.safe_dump(config, f, default_flow_style=False) + except Exception: + logger.warn('Failed to save config: {}'.format(config_file)) - save_config_file = False + # 2. config from yaml file if config_file is None: - home = os.path.expanduser('~') - config_file = os.path.join(home, '.labelmerc') - save_config_file = True - - if os.path.exists(config_file): + config_file = default_config_file + if osp.exists(config_file): with open(config_file) as f: user_config = yaml.load(f) or {} update_dict(config, user_config, validate_item=validate_config_item) - if save_config_file: - try: - with open(config_file, 'w') as f: - yaml.safe_dump(config, f, default_flow_style=False) - except Exception: - logger.warn('Failed to save config: {}'.format(config_file)) + # 3. command line argument + if config_from_args is not None: + update_dict(config, config_from_args, + validate_item=validate_config_item) return config diff --git a/tests/test_app.py b/tests/test_app.py index 42a8c4c..8d243f3 100644 --- a/tests/test_app.py +++ b/tests/test_app.py @@ -3,6 +3,7 @@ import shutil import tempfile import labelme.app +import labelme.config import labelme.testing @@ -33,7 +34,9 @@ def test_MainWindow_annotate_jpg(qtbot): filename) output = osp.join(tmp_dir, 'apc2016_obj3.json') - win = labelme.app.MainWindow(filename=filename, output=output) + config = labelme.config.get_default_config() + win = labelme.app.MainWindow( + config=config, filename=filename, output=output) qtbot.addWidget(win) win.show() -- GitLab