df
This commit is contained in:
@@ -14,6 +14,31 @@ import httpx
|
||||
from SYS.logger import debug, log
|
||||
from SYS.utils_constant import mime_maps
|
||||
|
||||
_KNOWN_EXTS = {
|
||||
str(info.get("ext") or "").strip().lstrip(".")
|
||||
for category in mime_maps.values()
|
||||
for info in category.values()
|
||||
if isinstance(info, dict) and info.get("ext")
|
||||
}
|
||||
|
||||
|
||||
def _resolve_ext_from_meta(meta: Dict[str, Any], mime_type: Optional[str]) -> str:
|
||||
ext = str(meta.get("ext") or "").strip().lstrip(".")
|
||||
if ext and ext not in _KNOWN_EXTS:
|
||||
ext = ""
|
||||
if ext.lower() == "ebook":
|
||||
ext = ""
|
||||
|
||||
if not ext and mime_type:
|
||||
for category in mime_maps.values():
|
||||
for _ext_key, info in category.items():
|
||||
if mime_type in info.get("mimes", []):
|
||||
ext = str(info.get("ext", "")).strip().lstrip(".")
|
||||
break
|
||||
if ext:
|
||||
break
|
||||
return ext
|
||||
|
||||
from Store._base import Store
|
||||
|
||||
_HYDRUS_INIT_CHECK_CACHE: dict[tuple[str,
|
||||
@@ -67,6 +92,16 @@ class HydrusNetwork(Store):
|
||||
store_name = getattr(self, "NAME", None) or "unknown"
|
||||
return f"[hydrusnetwork:{store_name}]"
|
||||
|
||||
def _append_access_key(self, url: str) -> str:
|
||||
if not url:
|
||||
return url
|
||||
if "access_key=" in url:
|
||||
return url
|
||||
if not getattr(self, "API", None):
|
||||
return url
|
||||
separator = "&" if "?" in url else "?"
|
||||
return f"{url}{separator}access_key={quote(str(self.API))}"
|
||||
|
||||
def __new__(cls, *args: Any, **kwargs: Any) -> "HydrusNetwork":
|
||||
instance = super().__new__(cls)
|
||||
name = kwargs.get("NAME")
|
||||
@@ -1105,17 +1140,7 @@ class HydrusNetwork(Store):
|
||||
if not isinstance(meta, dict):
|
||||
continue
|
||||
mime_type = meta.get("mime")
|
||||
ext = str(meta.get("ext") or "").strip().lstrip(".")
|
||||
if not ext and mime_type:
|
||||
for category in mime_maps.values():
|
||||
for _ext_key, info in category.items():
|
||||
if mime_type in info.get("mimes", []):
|
||||
ext = str(info.get("ext",
|
||||
"")
|
||||
).strip().lstrip(".")
|
||||
break
|
||||
if ext:
|
||||
break
|
||||
ext = _resolve_ext_from_meta(meta, mime_type)
|
||||
if _normalize_ext_filter(ext) != ext_filter:
|
||||
continue
|
||||
|
||||
@@ -1168,6 +1193,8 @@ class HydrusNetwork(Store):
|
||||
item_url = meta.get("known_urls") or meta.get("urls") or meta.get("url") or []
|
||||
if not item_url:
|
||||
item_url = meta.get("file_url") or f"{self.URL.rstrip('/')}/view_file?hash={hash_hex}"
|
||||
if isinstance(item_url, str) and "/view_file" in item_url:
|
||||
item_url = self._append_access_key(item_url)
|
||||
|
||||
results.append(
|
||||
{
|
||||
@@ -1181,7 +1208,7 @@ class HydrusNetwork(Store):
|
||||
"tag": all_tags,
|
||||
"file_id": file_id,
|
||||
"mime": mime_type,
|
||||
"ext": ext,
|
||||
"ext": _resolve_ext_from_meta(meta, mime_type),
|
||||
}
|
||||
)
|
||||
|
||||
@@ -1312,15 +1339,7 @@ class HydrusNetwork(Store):
|
||||
|
||||
# Prefer Hydrus-provided extension (e.g. ".webm"); fall back to MIME map.
|
||||
mime_type = meta.get("mime")
|
||||
ext = str(meta.get("ext") or "").strip().lstrip(".")
|
||||
if not ext and mime_type:
|
||||
for category in mime_maps.values():
|
||||
for _ext_key, info in category.items():
|
||||
if mime_type in info.get("mimes", []):
|
||||
ext = str(info.get("ext", "")).strip().lstrip(".")
|
||||
break
|
||||
if ext:
|
||||
break
|
||||
ext = _resolve_ext_from_meta(meta, mime_type)
|
||||
|
||||
# Filter results based on query type
|
||||
# If user provided explicit namespace (has ':'), don't do substring filtering
|
||||
@@ -1331,6 +1350,8 @@ class HydrusNetwork(Store):
|
||||
item_url = meta.get("known_urls") or meta.get("urls") or meta.get("url") or []
|
||||
if not item_url:
|
||||
item_url = meta.get("file_url") or f"{self.URL.rstrip('/')}/view_file?hash={hash_hex}"
|
||||
if isinstance(item_url, str) and "/view_file" in item_url:
|
||||
item_url = self._append_access_key(item_url)
|
||||
|
||||
if has_namespace:
|
||||
# Explicit namespace search - already filtered by Hydrus tag search
|
||||
|
||||
@@ -101,20 +101,7 @@ def _required_keys_for(store_cls: Type[BaseStore]) -> list[str]:
|
||||
return keys
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Legacy __new__.keys support
|
||||
keys = getattr(store_cls.__new__, "keys", None)
|
||||
if keys is None:
|
||||
return []
|
||||
if isinstance(keys, dict):
|
||||
return [str(k) for k in keys.keys()]
|
||||
if isinstance(keys, (list, tuple, set, frozenset)):
|
||||
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)}"
|
||||
)
|
||||
return []
|
||||
|
||||
|
||||
# Store type names that have been converted to providers-only.
|
||||
|
||||
Reference in New Issue
Block a user