From 6ebb7ed481614b8ef08aabe27f6d88f750eb65dd Mon Sep 17 00:00:00 2001
From: Mashiro <57566630+HAOCHENYE@users.noreply.github.com>
Date: Mon, 8 Aug 2022 17:07:47 +0800
Subject: [PATCH] [Fix] Fix config cannot change(assign) the value of the dict
 in config(without base config) (#378)

* Support changing value of dict in config(without base config)

* minor refine
---
 mmengine/config/config.py                         | 1 +
 tests/data/config/py_config/test_py_modify_key.py | 4 ++++
 tests/test_config/test_config.py                  | 7 +++++++
 3 files changed, 12 insertions(+)
 create mode 100644 tests/data/config/py_config/test_py_modify_key.py

diff --git a/mmengine/config/config.py b/mmengine/config/config.py
index 05012fe8..0e065802 100644
--- a/mmengine/config/config.py
+++ b/mmengine/config/config.py
@@ -481,6 +481,7 @@ class Config:
 
                 def is_base_line(c):
                     return (isinstance(c, ast.Assign)
+                            and isinstance(c.targets[0], ast.Name)
                             and c.targets[0].id == BASE_KEY)
 
                 base_code = next((c for c in codes if is_base_line(c)), None)
diff --git a/tests/data/config/py_config/test_py_modify_key.py b/tests/data/config/py_config/test_py_modify_key.py
new file mode 100644
index 00000000..f2dbbf03
--- /dev/null
+++ b/tests/data/config/py_config/test_py_modify_key.py
@@ -0,0 +1,4 @@
+# Copyright (c) OpenMMLab. All rights reserved.
+# Support modify value in config.
+item1 = dict()
+item1['a'] = 1
diff --git a/tests/test_config/test_config.py b/tests/test_config/test_config.py
index aed3e817..671bdc12 100644
--- a/tests/test_config/test_config.py
+++ b/tests/test_config/test_config.py
@@ -658,6 +658,13 @@ class TestConfig:
         assert cfg['item1'] == 1
         assert cfg['item2'] == 2
 
+        # Test support modifying the value of dict without defining base
+        # config.
+        cfg_file = osp.join(self.data_path,
+                            'config/py_config/test_py_modify_key.py')
+        cfg = Config._file2dict(cfg_file)[0]
+        assert cfg == dict(item1=dict(a=1))
+
     def _merge_recursive_bases(self):
         cfg_file = osp.join(self.data_path,
                             'config/py_config/test_merge_recursive_bases.py')
-- 
GitLab