ff
This commit is contained in:
@@ -389,7 +389,27 @@ class search_file(Cmdlet):
|
||||
|
||||
# --- Execution ------------------------------------------------------
|
||||
def run(self, result: Any, args: Sequence[str], config: Dict[str, Any]) -> int:
|
||||
"""Search storage backends for files."""
|
||||
"""Search storage backends for files by various criteria.
|
||||
|
||||
Supports searching by:
|
||||
- Hash (-query "hash:...")
|
||||
- Title (-query "title:...")
|
||||
- Tag (-query "tag:...")
|
||||
- URL (-query "url:...")
|
||||
- Other backend-specific fields
|
||||
|
||||
Optimizations:
|
||||
- Extracts tags from metadata response (avoids duplicate API calls)
|
||||
- Only calls get_tag() separately for backends that don't include tags
|
||||
|
||||
Args:
|
||||
result: Piped input (typically empty for new search)
|
||||
args: Search criteria and options
|
||||
config: Application configuration
|
||||
|
||||
Returns:
|
||||
0 on success, 1 on error
|
||||
"""
|
||||
if should_show_help(args):
|
||||
log(f"Cmdlet: {self.name}\nSummary: {self.summary}\nUsage: {self.usage}")
|
||||
return 0
|
||||
@@ -698,20 +718,43 @@ class search_file(Cmdlet):
|
||||
except Exception:
|
||||
meta_obj = {}
|
||||
|
||||
# Extract tags from metadata response instead of separate get_tag() call
|
||||
# Metadata already includes tags if fetched with include_service_keys_to_tags=True
|
||||
tags_list: List[str] = []
|
||||
try:
|
||||
tag_result = resolved_backend.get_tag(h)
|
||||
if isinstance(tag_result, tuple) and tag_result:
|
||||
maybe_tags = tag_result[0]
|
||||
else:
|
||||
maybe_tags = tag_result
|
||||
if isinstance(maybe_tags, list):
|
||||
tags_list = [
|
||||
str(t).strip() for t in maybe_tags
|
||||
if isinstance(t, str) and str(t).strip()
|
||||
]
|
||||
except Exception:
|
||||
tags_list = []
|
||||
|
||||
# First try to extract from metadata tags dict
|
||||
metadata_tags = meta_obj.get("tags")
|
||||
if isinstance(metadata_tags, dict):
|
||||
for service_data in metadata_tags.values():
|
||||
if isinstance(service_data, dict):
|
||||
display_tags = service_data.get("display_tags", {})
|
||||
if isinstance(display_tags, dict):
|
||||
for tag_list in display_tags.values():
|
||||
if isinstance(tag_list, list):
|
||||
tags_list = [
|
||||
str(t).strip() for t in tag_list
|
||||
if isinstance(t, str) and str(t).strip()
|
||||
]
|
||||
break
|
||||
if tags_list:
|
||||
break
|
||||
|
||||
# Fallback: if metadata didn't include tags, call get_tag() separately
|
||||
# (This maintains compatibility with backends that don't include tags in metadata)
|
||||
if not tags_list:
|
||||
try:
|
||||
tag_result = resolved_backend.get_tag(h)
|
||||
if isinstance(tag_result, tuple) and tag_result:
|
||||
maybe_tags = tag_result[0]
|
||||
else:
|
||||
maybe_tags = tag_result
|
||||
if isinstance(maybe_tags, list):
|
||||
tags_list = [
|
||||
str(t).strip() for t in maybe_tags
|
||||
if isinstance(t, str) and str(t).strip()
|
||||
]
|
||||
except Exception:
|
||||
tags_list = []
|
||||
|
||||
title_from_tag: Optional[str] = None
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user