Add YAPF style + ignore, and format tracked Python files
This commit is contained in:
@@ -22,13 +22,13 @@ from SYS.logger import debug
|
||||
|
||||
from Store._base import Store as BaseStore
|
||||
|
||||
|
||||
_SHA256_HEX_RE = re.compile(r"^[0-9a-fA-F]{64}$")
|
||||
|
||||
|
||||
# Backends that failed to initialize earlier in the current process.
|
||||
# Keyed by (store_type, instance_key) where instance_key is the name used under config.store.<type>.<instance_key>.
|
||||
_FAILED_BACKEND_CACHE: Dict[tuple[str, str], str] = {}
|
||||
_FAILED_BACKEND_CACHE: Dict[tuple[str,
|
||||
str],
|
||||
str] = {}
|
||||
|
||||
|
||||
def _normalize_store_type(value: str) -> str:
|
||||
@@ -57,10 +57,13 @@ def _discover_store_classes() -> Dict[str, Type[BaseStore]]:
|
||||
"""
|
||||
import Store as store_pkg
|
||||
|
||||
discovered: Dict[str, Type[BaseStore]] = {}
|
||||
discovered: Dict[str,
|
||||
Type[BaseStore]] = {}
|
||||
for module_info in pkgutil.iter_modules(store_pkg.__path__):
|
||||
module_name = module_info.name
|
||||
if module_name in {"__init__", "_base", "registry"}:
|
||||
if module_name in {"__init__",
|
||||
"_base",
|
||||
"registry"}:
|
||||
continue
|
||||
|
||||
module = importlib.import_module(f"Store.{module_name}")
|
||||
@@ -85,12 +88,15 @@ def _required_keys_for(store_cls: Type[BaseStore]) -> list[str]:
|
||||
return [str(k) for k in keys]
|
||||
if isinstance(keys, str):
|
||||
return [keys]
|
||||
raise TypeError(f"Unsupported __new__.keys type for {store_cls.__name__}: {type(keys)}")
|
||||
raise TypeError(
|
||||
f"Unsupported __new__.keys type for {store_cls.__name__}: {type(keys)}"
|
||||
)
|
||||
|
||||
|
||||
def _build_kwargs(
|
||||
store_cls: Type[BaseStore], instance_name: str, instance_config: Any
|
||||
) -> Dict[str, Any]:
|
||||
def _build_kwargs(store_cls: Type[BaseStore],
|
||||
instance_name: str,
|
||||
instance_config: Any) -> Dict[str,
|
||||
Any]:
|
||||
if isinstance(instance_config, dict):
|
||||
cfg_dict = dict(instance_config)
|
||||
else:
|
||||
@@ -99,13 +105,13 @@ def _build_kwargs(
|
||||
required = _required_keys_for(store_cls)
|
||||
|
||||
# If NAME is required but not present, allow the instance key to provide it.
|
||||
if (
|
||||
any(_normalize_config_key(k) == "NAME" for k in required)
|
||||
and _get_case_insensitive(cfg_dict, "NAME") is None
|
||||
):
|
||||
if (any(_normalize_config_key(k) == "NAME" for k in required)
|
||||
and _get_case_insensitive(cfg_dict,
|
||||
"NAME") is None):
|
||||
cfg_dict["NAME"] = str(instance_name)
|
||||
|
||||
kwargs: Dict[str, Any] = {}
|
||||
kwargs: Dict[str,
|
||||
Any] = {}
|
||||
missing: list[str] = []
|
||||
for key in required:
|
||||
value = _get_case_insensitive(cfg_dict, key)
|
||||
@@ -115,23 +121,36 @@ def _build_kwargs(
|
||||
kwargs[str(key)] = value
|
||||
|
||||
if missing:
|
||||
raise ValueError(f"Missing required keys for {store_cls.__name__}: {', '.join(missing)}")
|
||||
raise ValueError(
|
||||
f"Missing required keys for {store_cls.__name__}: {', '.join(missing)}"
|
||||
)
|
||||
|
||||
return kwargs
|
||||
|
||||
|
||||
class Store:
|
||||
|
||||
def __init__(
|
||||
self, config: Optional[Dict[str, Any]] = None, suppress_debug: bool = False
|
||||
self,
|
||||
config: Optional[Dict[str,
|
||||
Any]] = None,
|
||||
suppress_debug: bool = False
|
||||
) -> None:
|
||||
self._config = config or {}
|
||||
self._suppress_debug = suppress_debug
|
||||
self._backends: Dict[str, BaseStore] = {}
|
||||
self._backend_errors: Dict[str, str] = {}
|
||||
self._backends: Dict[str,
|
||||
BaseStore] = {}
|
||||
self._backend_errors: Dict[str,
|
||||
str] = {}
|
||||
self._load_backends()
|
||||
|
||||
def _maybe_register_temp_alias(
|
||||
self, store_type: str, backend_name: str, kwargs: Dict[str, Any], backend: BaseStore
|
||||
self,
|
||||
store_type: str,
|
||||
backend_name: str,
|
||||
kwargs: Dict[str,
|
||||
Any],
|
||||
backend: BaseStore
|
||||
) -> None:
|
||||
"""If a folder backend points at config['temp'], also expose it as the 'temp' backend.
|
||||
|
||||
@@ -189,16 +208,24 @@ class Store:
|
||||
if cached_error:
|
||||
self._backend_errors[str(instance_name)] = str(cached_error)
|
||||
if isinstance(instance_config, dict):
|
||||
override_name = _get_case_insensitive(dict(instance_config), "NAME")
|
||||
override_name = _get_case_insensitive(
|
||||
dict(instance_config),
|
||||
"NAME"
|
||||
)
|
||||
if override_name:
|
||||
self._backend_errors[str(override_name)] = str(cached_error)
|
||||
continue
|
||||
try:
|
||||
kwargs = _build_kwargs(store_cls, str(instance_name), instance_config)
|
||||
kwargs = _build_kwargs(
|
||||
store_cls,
|
||||
str(instance_name),
|
||||
instance_config
|
||||
)
|
||||
|
||||
# Convenience normalization for filesystem-like paths.
|
||||
for key in list(kwargs.keys()):
|
||||
if _normalize_config_key(key) in {"PATH", "LOCATION"}:
|
||||
if _normalize_config_key(key) in {"PATH",
|
||||
"LOCATION"}:
|
||||
kwargs[key] = str(Path(str(kwargs[key])).expanduser())
|
||||
|
||||
backend = store_cls(**kwargs)
|
||||
@@ -207,7 +234,12 @@ class Store:
|
||||
self._backends[backend_name] = backend
|
||||
|
||||
# If this is the configured temp directory, also alias it as 'temp'.
|
||||
self._maybe_register_temp_alias(store_type, backend_name, kwargs, backend)
|
||||
self._maybe_register_temp_alias(
|
||||
store_type,
|
||||
backend_name,
|
||||
kwargs,
|
||||
backend
|
||||
)
|
||||
except Exception as exc:
|
||||
err_text = str(exc)
|
||||
self._backend_errors[str(instance_name)] = err_text
|
||||
@@ -233,7 +265,8 @@ class Store:
|
||||
return 2
|
||||
return 1
|
||||
|
||||
chosen: Dict[int, str] = {}
|
||||
chosen: Dict[int,
|
||||
str] = {}
|
||||
for name, backend in self._backends.items():
|
||||
if type(backend).search is BaseStore.search:
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user