fdf
This commit is contained in:
@@ -17,10 +17,11 @@ from urllib.request import pathname2url
|
||||
|
||||
from SYS import pipeline as ctx
|
||||
from . import _shared as sh
|
||||
from SYS.item_accessors import get_result_title
|
||||
from SYS.logger import log, debug
|
||||
from Store import Store
|
||||
from SYS.config import resolve_output_dir
|
||||
from API.HTTP import _download_direct_file
|
||||
from SYS.payload_builders import build_file_result_payload
|
||||
|
||||
|
||||
class Get_File(sh.Cmdlet):
|
||||
@@ -56,9 +57,11 @@ class Get_File(sh.Cmdlet):
|
||||
parsed = sh.parse_cmdlet_args(args, self)
|
||||
debug(f"[get-file] parsed args: {parsed}")
|
||||
|
||||
query_hash = sh.parse_single_hash_query(parsed.get("query"))
|
||||
if parsed.get("query") and not query_hash:
|
||||
log("Error: -query must be of the form hash:<sha256>")
|
||||
query_hash, query_valid = sh.require_single_hash_query(
|
||||
parsed.get("query"),
|
||||
"Error: -query must be of the form hash:<sha256>",
|
||||
)
|
||||
if not query_valid:
|
||||
return 1
|
||||
|
||||
# Extract hash and store from result or args
|
||||
@@ -87,21 +90,14 @@ class Get_File(sh.Cmdlet):
|
||||
|
||||
debug(f"[get-file] Getting storage backend: {store_name}")
|
||||
|
||||
# Prefer instantiating only the named backend to avoid initializing all configured backends
|
||||
try:
|
||||
from Store.registry import get_backend_instance
|
||||
backend = get_backend_instance(config, store_name, suppress_debug=True)
|
||||
except Exception:
|
||||
backend = None
|
||||
|
||||
backend, _store_registry, _exc = sh.get_preferred_store_backend(
|
||||
config,
|
||||
store_name,
|
||||
suppress_debug=True,
|
||||
)
|
||||
if backend is None:
|
||||
# Fallback to full registry when targeted instantiation fails
|
||||
try:
|
||||
store = Store(config)
|
||||
backend = store[store_name]
|
||||
except Exception:
|
||||
log(f"Error: Storage backend '{store_name}' not found", file=sys.stderr)
|
||||
return 1
|
||||
log(f"Error: Storage backend '{store_name}' not found", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
debug(f"[get-file] Backend retrieved: {type(backend).__name__}")
|
||||
|
||||
@@ -117,18 +113,8 @@ class Get_File(sh.Cmdlet):
|
||||
|
||||
def resolve_display_title() -> str:
|
||||
candidates = [
|
||||
sh.get_field(result,
|
||||
"title"),
|
||||
sh.get_field(result,
|
||||
"name"),
|
||||
sh.get_field(result,
|
||||
"filename"),
|
||||
(metadata.get("title") if isinstance(metadata,
|
||||
dict) else None),
|
||||
(metadata.get("name") if isinstance(metadata,
|
||||
dict) else None),
|
||||
(metadata.get("filename") if isinstance(metadata,
|
||||
dict) else None),
|
||||
get_result_title(result, "title", "name", "filename"),
|
||||
get_result_title(metadata, "title", "name", "filename"),
|
||||
]
|
||||
for candidate in candidates:
|
||||
if candidate is None:
|
||||
@@ -166,12 +152,12 @@ class Get_File(sh.Cmdlet):
|
||||
debug(f"Opened in browser: {download_url}", file=sys.stderr)
|
||||
|
||||
ctx.emit(
|
||||
{
|
||||
"hash": file_hash,
|
||||
"store": store_name,
|
||||
"url": download_url,
|
||||
"title": resolve_display_title() or "Opened",
|
||||
}
|
||||
build_file_result_payload(
|
||||
title=resolve_display_title() or "Opened",
|
||||
hash_value=file_hash,
|
||||
store=store_name,
|
||||
url=download_url,
|
||||
)
|
||||
)
|
||||
return 0
|
||||
|
||||
@@ -227,12 +213,12 @@ class Get_File(sh.Cmdlet):
|
||||
|
||||
# Emit result for pipeline
|
||||
ctx.emit(
|
||||
{
|
||||
"hash": file_hash,
|
||||
"store": store_name,
|
||||
"path": str(dest_path),
|
||||
"title": filename,
|
||||
}
|
||||
build_file_result_payload(
|
||||
title=filename,
|
||||
hash_value=file_hash,
|
||||
store=store_name,
|
||||
path=str(dest_path),
|
||||
)
|
||||
)
|
||||
|
||||
debug("[get-file] Completed successfully")
|
||||
|
||||
Reference in New Issue
Block a user