f
This commit is contained in:
@@ -1071,6 +1071,25 @@ class Folder(Store):
|
||||
if namespace == "url":
|
||||
pattern_hint = kwargs.get("pattern_hint")
|
||||
|
||||
def _pattern_candidates(raw: Any) -> List[str]:
|
||||
if raw is None:
|
||||
return []
|
||||
if isinstance(raw, (list, tuple, set)):
|
||||
out: List[str] = []
|
||||
for item in raw:
|
||||
text = str(item or "").strip()
|
||||
if text and text not in out:
|
||||
out.append(text)
|
||||
return out
|
||||
if isinstance(raw, str):
|
||||
text = raw.strip()
|
||||
return [text] if text else []
|
||||
return []
|
||||
|
||||
pattern_candidates = _pattern_candidates(pattern_hint)
|
||||
if len(pattern_candidates) > 200:
|
||||
pattern_candidates = pattern_candidates[:200]
|
||||
|
||||
def _parse_url_value(raw: Any) -> list[str]:
|
||||
if raw is None:
|
||||
return []
|
||||
@@ -1094,16 +1113,26 @@ class Folder(Store):
|
||||
return []
|
||||
|
||||
def _matches_pattern(url_list: list[str]) -> bool:
|
||||
if not pattern_hint:
|
||||
if not pattern_candidates:
|
||||
return True
|
||||
for candidate_url in url_list:
|
||||
if _match_url_pattern(candidate_url, pattern_hint):
|
||||
return True
|
||||
for pat in pattern_candidates:
|
||||
if _match_url_pattern(candidate_url, pat):
|
||||
return True
|
||||
return False
|
||||
|
||||
if not pattern or pattern == "*":
|
||||
debug(f"[folder:{backend_label}] url search: any-url (limit={limit})")
|
||||
rows = api.get_files_with_any_url(limit)
|
||||
if pattern_candidates:
|
||||
debug(
|
||||
f"[folder:{backend_label}] url search: any-url (limit={limit}) pattern_hint={len(pattern_candidates)}"
|
||||
)
|
||||
rows = api.get_files_by_url_like_any(
|
||||
[_url_like_pattern(p) for p in pattern_candidates],
|
||||
limit,
|
||||
)
|
||||
else:
|
||||
debug(f"[folder:{backend_label}] url search: any-url (limit={limit})")
|
||||
rows = api.get_files_with_any_url(limit)
|
||||
else:
|
||||
debug(
|
||||
f"[folder:{backend_label}] url search: like={pattern} (limit={limit})"
|
||||
|
||||
Reference in New Issue
Block a user