[Fix] Fix ConfigDict.items will be called during dump (#1272)

This commit is contained in:
Mashiro 2023-07-28 10:08:10 +08:00 committed by GitHub
parent ee742da254
commit 42fdbc2ddb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -24,8 +24,9 @@ from yapf.yapflib.yapf_api import FormatCode
from mmengine.fileio import dump, load from mmengine.fileio import dump, load
from mmengine.logging import print_log from mmengine.logging import print_log
from mmengine.utils import (check_file_exist, get_installed_path, from mmengine.utils import (check_file_exist, digit_version,
import_modules_from_strings, is_installed) get_installed_path, import_modules_from_strings,
is_installed)
from .lazy import LazyAttr, LazyObject from .lazy import LazyAttr, LazyObject
from .utils import (ConfigParsingError, ImportTransformer, RemoveAssignFromAST, from .utils import (ConfigParsingError, ImportTransformer, RemoveAssignFromAST,
_gather_abs_import_lazyobj, _get_external_cfg_base_path, _gather_abs_import_lazyobj, _get_external_cfg_base_path,
@ -264,15 +265,18 @@ class ConfigDict(Dict):
for key, value in merged.items(): for key, value in merged.items():
self[key] = value self[key] = value
def __getstate__(self): def __reduce_ex__(self, proto):
state = {} # Override __reduce_ex__ to avoid `self.items` will be
for key, value in super().items(): # called by CPython interpreter during pickling. See more details in
state[key] = value # https://github.com/python/cpython/blob/8d61a71f9c81619e34d4a30b625922ebc83c561b/Objects/typeobject.c#L6196 # noqa: E501
return state if digit_version(platform.python_version()) < digit_version('3.8'):
return (self.__class__, ({k: v
def __setstate__(self, state): for k, v in super().items()}, ), None,
for key, value in state.items(): None, None)
self[key] = value else:
return (self.__class__, ({k: v
for k, v in super().items()}, ), None,
None, None, None)
def __eq__(self, other): def __eq__(self, other):
if isinstance(other, ConfigDict): if isinstance(other, ConfigDict):