# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
from typing import Any, Optional
from hydra._internal.hydra import Hydra
from hydra.core.config_loader import ConfigLoader
from hydra.core.singleton import Singleton
[docs]
class GlobalHydra(metaclass=Singleton):
[docs]
def __init__(self) -> None:
self.hydra: Optional[Hydra] = None
[docs]
def initialize(self, hydra: "Hydra") -> None:
assert isinstance(hydra, Hydra), f"Unexpected Hydra type : {type(hydra)}"
if self.is_initialized():
raise ValueError(
"GlobalHydra is already initialized, call GlobalHydra.instance().clear() if you want to re-initialize"
)
self.hydra = hydra
[docs]
def config_loader(self) -> "ConfigLoader":
assert self.hydra is not None
return self.hydra.config_loader
[docs]
def is_initialized(self) -> bool:
return self.hydra is not None
[docs]
def clear(self) -> None:
self.hydra = None
[docs]
@staticmethod
def instance(*args: Any, **kwargs: Any) -> "GlobalHydra":
return Singleton.instance(GlobalHydra, *args, **kwargs) # type: ignore
[docs]
@staticmethod
def set_instance(instance: "GlobalHydra") -> None:
assert isinstance(instance, GlobalHydra)
Singleton._instances[GlobalHydra] = instance # type: ignore