dfdfsdd
This commit is contained in:
@@ -119,6 +119,37 @@ class Store:
|
||||
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) -> None:
|
||||
"""If a folder backend points at config['temp'], also expose it as the 'temp' backend.
|
||||
|
||||
This keeps config compatibility (e.g. existing 'default') while presenting the temp
|
||||
directory under a clearer name.
|
||||
"""
|
||||
try:
|
||||
if _normalize_store_type(store_type) != "folder":
|
||||
return
|
||||
temp_value = self._config.get("temp")
|
||||
if not temp_value:
|
||||
return
|
||||
path_value = kwargs.get("PATH") or kwargs.get("path")
|
||||
if not path_value:
|
||||
return
|
||||
|
||||
temp_path = Path(str(temp_value)).expanduser().resolve()
|
||||
backend_path = Path(str(path_value)).expanduser().resolve()
|
||||
if backend_path != temp_path:
|
||||
return
|
||||
|
||||
# If the user already has a dedicated temp backend, do nothing.
|
||||
if "temp" in self._backends:
|
||||
return
|
||||
|
||||
# Keep original name working, but add an alias.
|
||||
if backend_name != "temp":
|
||||
self._backends["temp"] = backend
|
||||
except Exception:
|
||||
return
|
||||
|
||||
def _load_backends(self) -> None:
|
||||
store_cfg = self._config.get("store")
|
||||
if not isinstance(store_cfg, dict):
|
||||
@@ -161,6 +192,9 @@ class Store:
|
||||
|
||||
backend_name = str(kwargs.get("NAME") or instance_name)
|
||||
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)
|
||||
except Exception as exc:
|
||||
err_text = str(exc)
|
||||
self._backend_errors[str(instance_name)] = err_text
|
||||
@@ -177,11 +211,24 @@ class Store:
|
||||
return sorted(self._backends.keys())
|
||||
|
||||
def list_searchable_backends(self) -> list[str]:
|
||||
searchable: list[str] = []
|
||||
# De-duplicate backends by instance (aliases can point at the same object).
|
||||
def _rank(name: str) -> int:
|
||||
n = str(name or "").strip().lower()
|
||||
if n == "temp":
|
||||
return 0
|
||||
if n == "default":
|
||||
return 2
|
||||
return 1
|
||||
|
||||
chosen: Dict[int, str] = {}
|
||||
for name, backend in self._backends.items():
|
||||
if type(backend).search is not BaseStore.search:
|
||||
searchable.append(name)
|
||||
return sorted(searchable)
|
||||
if type(backend).search is BaseStore.search:
|
||||
continue
|
||||
key = id(backend)
|
||||
prev = chosen.get(key)
|
||||
if prev is None or _rank(name) < _rank(prev):
|
||||
chosen[key] = name
|
||||
return sorted(chosen.values())
|
||||
|
||||
def __getitem__(self, backend_name: str) -> BaseStore:
|
||||
if backend_name not in self._backends:
|
||||
|
||||
Reference in New Issue
Block a user