Commit e9dd53e1 authored by Yanghan Wang's avatar Yanghan Wang Committed by Facebook GitHub Bot
Browse files

support bootstrap package with existing registerables

Summary:
X-link: https://github.com/facebookresearch/mobile-vision/pull/92

Pull Request resolved: https://github.com/facebookresearch/d2go/pull/314

We may import d2go first, which populates some builtin meta archs in registry, then do the bootstrap.

Reviewed By: mcimpoi

Differential Revision: D37427101

fbshipit-source-id: 00e53bf0d2e327a90d5dfbc23ef2f4daa6ddfc63
parent d0b875ed
...@@ -134,7 +134,7 @@ def _open_mock(*args, **kwargs): ...@@ -134,7 +134,7 @@ def _open_mock(*args, **kwargs):
return MoreMagicMock() return MoreMagicMock()
def _register_mock(self, name: Optional[str], obj: Any): def _register_mock(self, name: Optional[str], obj: Any) -> None:
"""Convert `obj` to LazyRegisterable""" """Convert `obj` to LazyRegisterable"""
# Instead of register the (possibly mocked) object which is created under the # Instead of register the (possibly mocked) object which is created under the
...@@ -163,7 +163,18 @@ def _register_mock(self, name: Optional[str], obj: Any): ...@@ -163,7 +163,18 @@ def _register_mock(self, name: Optional[str], obj: Any):
module=_resolve_real_module(obj.__module__), name=obj.__qualname__ module=_resolve_real_module(obj.__module__), name=obj.__qualname__
) )
return orig__register(self, name, obj) assert isinstance(obj, LazyRegisterable)
# During bootstrap, it's possible that the object is already registered
# (as non-lazy), because importing a library first and then bootstramp it. Simply
# skip the lazy-registration.
if name in self and not isinstance(self[name], LazyRegisterable):
if self[name].__module__ == obj.module and (
obj.name is None or self[name].__name__ == obj.name
):
_log(2, f"{obj} has already registered as {self[name]}, skip...")
return
orig__register(self, name, obj)
@contextlib.contextmanager @contextlib.contextmanager
......
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