dfd
This commit is contained in:
@@ -14,6 +14,7 @@ from __future__ import annotations
|
||||
import importlib
|
||||
import inspect
|
||||
import pkgutil
|
||||
import re
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict, Iterable, Optional, Type
|
||||
|
||||
@@ -22,6 +23,9 @@ 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] = {}
|
||||
@@ -237,3 +241,40 @@ class Store:
|
||||
|
||||
def is_available(self, backend_name: str) -> bool:
|
||||
return backend_name in self._backends
|
||||
|
||||
def try_add_url_for_pipe_object(self, pipe_obj: Any, url: str) -> bool:
|
||||
"""Best-effort helper: if `pipe_obj` contains `store` + `hash`, add `url` to that store backend.
|
||||
|
||||
Intended for providers to attach newly generated/hosted URLs back to an existing stored file.
|
||||
"""
|
||||
try:
|
||||
url_text = str(url or "").strip()
|
||||
if not url_text:
|
||||
return False
|
||||
|
||||
store_name = None
|
||||
file_hash = None
|
||||
if isinstance(pipe_obj, dict):
|
||||
store_name = pipe_obj.get("store")
|
||||
file_hash = pipe_obj.get("hash")
|
||||
else:
|
||||
store_name = getattr(pipe_obj, "store", None)
|
||||
file_hash = getattr(pipe_obj, "hash", None)
|
||||
|
||||
store_name = str(store_name).strip() if store_name is not None else ""
|
||||
file_hash = str(file_hash).strip() if file_hash is not None else ""
|
||||
if not store_name or not file_hash:
|
||||
return False
|
||||
|
||||
if not _SHA256_HEX_RE.fullmatch(file_hash):
|
||||
return False
|
||||
|
||||
backend = self[store_name]
|
||||
add_url = getattr(backend, "add_url", None)
|
||||
if not callable(add_url):
|
||||
return False
|
||||
|
||||
ok = add_url(file_hash.lower(), [url_text])
|
||||
return bool(ok) if ok is not None else True
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user