Unverified Commit a5b51937 authored by Jerry Jiarui XU's avatar Jerry Jiarui XU Committed by GitHub
Browse files

Fixed config import in config file (#261)

* fixed config import in code

* fixed isort
parent 45111e19
...@@ -85,10 +85,14 @@ class Config(object): ...@@ -85,10 +85,14 @@ class Config(object):
check_file_exist(filename) check_file_exist(filename)
if filename.endswith('.py'): if filename.endswith('.py'):
with tempfile.TemporaryDirectory() as temp_config_dir: with tempfile.TemporaryDirectory() as temp_config_dir:
temp_config_file = tempfile.NamedTemporaryFile(
dir=temp_config_dir, suffix='.py')
temp_config_name = osp.basename(temp_config_file.name)
shutil.copyfile(filename, shutil.copyfile(filename,
osp.join(temp_config_dir, '_tempconfig.py')) osp.join(temp_config_dir, temp_config_name))
temp_module_name = osp.splitext(temp_config_name)[0]
sys.path.insert(0, temp_config_dir) sys.path.insert(0, temp_config_dir)
mod = import_module('_tempconfig') mod = import_module(temp_module_name)
sys.path.pop(0) sys.path.pop(0)
cfg_dict = { cfg_dict = {
name: value name: value
...@@ -96,7 +100,9 @@ class Config(object): ...@@ -96,7 +100,9 @@ class Config(object):
if not name.startswith('__') if not name.startswith('__')
} }
# delete imported module # delete imported module
del sys.modules['_tempconfig'] del sys.modules[temp_module_name]
# close temp file
temp_config_file.close()
elif filename.endswith(('.yml', '.yaml', '.json')): elif filename.endswith(('.yml', '.yaml', '.json')):
import mmcv import mmcv
cfg_dict = mmcv.load(filename) cfg_dict = mmcv.load(filename)
......
from mmcv import Config # isort:skip
cfg = Config.fromfile('./tests/data/config/a.py')
item5 = cfg.item1[0] + cfg.item2.a
...@@ -134,6 +134,17 @@ def test_merge_intermediate_variable(): ...@@ -134,6 +134,17 @@ def test_merge_intermediate_variable():
assert cfg.item6 == dict(cfg=dict(b=2)) assert cfg.item6 == dict(cfg=dict(b=2))
def test_fromfile_in_config():
cfg_file = osp.join(osp.dirname(__file__), 'data/config/code.py')
cfg = Config.fromfile(cfg_file)
# cfg.field
assert cfg.cfg.item1 == [1, 2]
assert cfg.cfg.item2 == dict(a=0)
assert cfg.cfg.item3 is True
assert cfg.cfg.item4 == 'test'
assert cfg.item5 == 1
def test_dict(): def test_dict():
cfg_dict = dict(item1=[1, 2], item2=dict(a=0), item3=True, item4='test') cfg_dict = dict(item1=[1, 2], item2=dict(a=0), item3=True, item4='test')
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment