h
This commit is contained in:
@@ -428,7 +428,8 @@ class FlorenceVisionTool:
|
||||
if self._model is not None and not hasattr(self._model, "_supports_sdpa"):
|
||||
setattr(self._model, "_supports_sdpa", False)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to set model compatibility flag _supports_sdpa")
|
||||
|
||||
try:
|
||||
self._model.to(device) # type: ignore[union-attr]
|
||||
@@ -439,7 +440,8 @@ class FlorenceVisionTool:
|
||||
try:
|
||||
self._model.eval() # type: ignore[union-attr]
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to set Florence model to eval mode")
|
||||
|
||||
try:
|
||||
md = getattr(self._model, "device", None)
|
||||
@@ -450,7 +452,8 @@ class FlorenceVisionTool:
|
||||
dt = None
|
||||
debug(f"[florencevision] Model loaded: device={md} param_dtype={dt}")
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to inspect Florence model device/dtype")
|
||||
|
||||
def tags_for_image(self, media_path: Path) -> List[str]:
|
||||
"""Return Florence-derived tags for an image.
|
||||
@@ -472,7 +475,8 @@ class FlorenceVisionTool:
|
||||
try:
|
||||
debug(f"[florencevision] Task prompt: {prompt}")
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to emit debug Task prompt for FlorenceVision")
|
||||
|
||||
max_tags = max(0, int(self.defaults.max_tags or 0))
|
||||
|
||||
@@ -487,7 +491,8 @@ class FlorenceVisionTool:
|
||||
try:
|
||||
debug(f"[florencevision] Image loaded: mode={image.mode} size={image.width}x{image.height}")
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to emit debug for image load")
|
||||
|
||||
processor = self._processor
|
||||
model = self._model
|
||||
@@ -544,19 +549,22 @@ class FlorenceVisionTool:
|
||||
)
|
||||
continue
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to debug tensor shape for processor key '%s'", k)
|
||||
if isinstance(v, (list, tuple)):
|
||||
has_none = any(x is None for x in v)
|
||||
debug(f"[florencevision] {k}: {type(v).__name__} len={len(v)} has_none={has_none}")
|
||||
continue
|
||||
debug(f"[florencevision] {k}: type={type(v).__name__}")
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed while inspecting processor output keys")
|
||||
|
||||
try:
|
||||
inputs = inputs.to(model.device) # type: ignore[attr-defined]
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to move processor inputs to device %s", getattr(model, 'device', None))
|
||||
|
||||
# Align floating-point input tensors with the model's parameter dtype.
|
||||
try:
|
||||
@@ -575,7 +583,8 @@ class FlorenceVisionTool:
|
||||
except Exception:
|
||||
continue
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to inspect/align model dtype for Florence inputs")
|
||||
|
||||
try:
|
||||
gen_inputs_all = {k: v for k, v in dict(inputs).items() if v is not None}
|
||||
@@ -602,7 +611,8 @@ class FlorenceVisionTool:
|
||||
):
|
||||
gen_inputs["attention_mask"] = attention_mask
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to reconcile attention mask shape with input_ids for Florence processor")
|
||||
|
||||
try:
|
||||
debug(
|
||||
@@ -612,18 +622,21 @@ class FlorenceVisionTool:
|
||||
f"pixel_attention_mask={'pixel_attention_mask' in forward_params}"
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to debug model forward supports")
|
||||
|
||||
try:
|
||||
gen_inputs.setdefault("use_cache", False)
|
||||
gen_inputs.setdefault("num_beams", 1)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to set default gen_inputs values")
|
||||
|
||||
try:
|
||||
debug(f"[florencevision] generate kwargs: {sorted(list(gen_inputs.keys()))}")
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to debug generate kwargs")
|
||||
|
||||
pv = gen_inputs.get("pixel_values")
|
||||
if pv is None:
|
||||
@@ -654,7 +667,8 @@ class FlorenceVisionTool:
|
||||
if not hasattr(model, "_supports_sdpa"):
|
||||
setattr(model, "_supports_sdpa", False)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to patch model _supports_sdpa flag in retry handler")
|
||||
generated_ids = _do_generate(gen_inputs)
|
||||
elif "NoneType" in msg and "shape" in msg:
|
||||
retry_inputs = dict(gen_inputs)
|
||||
@@ -676,7 +690,8 @@ class FlorenceVisionTool:
|
||||
):
|
||||
retry_inputs["attention_mask"] = am
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed while filling retry_inputs attention_mask in AttributeError handler")
|
||||
|
||||
try:
|
||||
import torch
|
||||
@@ -692,14 +707,16 @@ class FlorenceVisionTool:
|
||||
elif "pixel_attention_mask" in forward_params and "pixel_attention_mask" not in retry_inputs:
|
||||
retry_inputs["pixel_attention_mask"] = mask
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to build mask or adjust retry_inputs in AttributeError handler")
|
||||
|
||||
try:
|
||||
debug(
|
||||
f"[florencevision] generate retry kwargs: {sorted(list(retry_inputs.keys()))}"
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to debug generate retry kwargs")
|
||||
|
||||
generated_ids = _do_generate(retry_inputs)
|
||||
else:
|
||||
@@ -708,7 +725,8 @@ class FlorenceVisionTool:
|
||||
try:
|
||||
debug(f"[florencevision] generated_ids type={type(generated_ids).__name__}")
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to debug generated_ids type")
|
||||
|
||||
seq = getattr(generated_ids, "sequences", generated_ids)
|
||||
generated_text = processor.batch_decode(seq, skip_special_tokens=False)[0]
|
||||
@@ -719,7 +737,8 @@ class FlorenceVisionTool:
|
||||
debug(f"[florencevision] prompt run failed: {type(exc).__name__}: {exc}")
|
||||
debug("[florencevision] traceback:\n" + traceback.format_exc())
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to emit debug for prompt run failure: %s", exc)
|
||||
raise
|
||||
|
||||
parsed = None
|
||||
@@ -766,12 +785,14 @@ class FlorenceVisionTool:
|
||||
debug(f"[florencevision] post_process[{k!r}] type={type(parsed.get(k)).__name__}")
|
||||
debug("[florencevision] post_process[key] repr:\n" + _debug_repr(parsed.get(k)))
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed while debugging parsed post_process output for prompt %s", task_prompt)
|
||||
else:
|
||||
debug(f"[florencevision] post_process_generation: type={type(parsed).__name__}")
|
||||
debug("[florencevision] post_process repr:\n" + _debug_repr(parsed))
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to post-process generated output for prompt %s", task_prompt)
|
||||
|
||||
return generated_text, parsed, seq
|
||||
|
||||
@@ -800,7 +821,8 @@ class FlorenceVisionTool:
|
||||
try:
|
||||
debug(f"[florencevision] candidate label strings ({len(labels)}): {labels!r}")
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to emit candidate label strings debug")
|
||||
|
||||
out: List[str] = []
|
||||
seen: set[str] = set()
|
||||
@@ -848,7 +870,8 @@ class FlorenceVisionTool:
|
||||
for raw_lab, cleaned, reason in dropped:
|
||||
debug(f"[florencevision] drop reason={reason} raw={raw_lab!r} cleaned={cleaned!r}")
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to emit cleaned/dropped tags debug info")
|
||||
|
||||
return labels, caption_candidates, out, dropped
|
||||
|
||||
@@ -871,7 +894,12 @@ class FlorenceVisionTool:
|
||||
try:
|
||||
return max(cleaned, key=lambda s: len(str(s)), default=None)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to choose best caption from cleaned candidates")
|
||||
try:
|
||||
return max(raw, key=lambda s: len(str(s)), default=None)
|
||||
except Exception:
|
||||
return None
|
||||
try:
|
||||
return max(raw, key=lambda s: len(str(s)), default=None)
|
||||
except Exception:
|
||||
@@ -936,7 +964,8 @@ class FlorenceVisionTool:
|
||||
try:
|
||||
debug(f"[florencevision] grounding prompt: {grounding_prompt}")
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to emit grounding prompt debug")
|
||||
|
||||
grd_text, grd_parsed, _grd_seq = _run_prompt(grounding_prompt)
|
||||
_grd_labels, grd_captions, grd_cleaned, _grd_dropped = _extract_labels_and_captions(grounding_prompt, grd_text, grd_parsed)
|
||||
@@ -962,6 +991,8 @@ class FlorenceVisionTool:
|
||||
is_combo = "<|detailed_caption|>" in prompt and "<|grounding|>" in prompt
|
||||
only_task_tokens = not final_tags or all(t in {"object_detection", "grounding", "tag"} for t in final_tags)
|
||||
except Exception:
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to compute is_combo/only_task_tokens for prompt '%s'", prompt)
|
||||
is_combo = False
|
||||
only_task_tokens = False
|
||||
|
||||
@@ -973,13 +1004,15 @@ class FlorenceVisionTool:
|
||||
try:
|
||||
self.defaults.task = "<|detailed_caption|>"
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to set self.defaults.task to '<|detailed_caption|>' during od retry")
|
||||
final_tags = self.tags_for_image(media_path)
|
||||
finally:
|
||||
try:
|
||||
self.defaults.task = original_task
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to restore self.defaults.task after od retry")
|
||||
self._od_tag_retrying = False
|
||||
|
||||
self._last_caption = caption_text if caption_text else None
|
||||
|
||||
@@ -48,7 +48,8 @@ def _resolve_out_dir(arg_outdir: Optional[Union[str, Path]]) -> Path:
|
||||
try:
|
||||
p.mkdir(parents=True, exist_ok=True)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to create resolved output dir %s", p)
|
||||
return p
|
||||
except Exception:
|
||||
return Path(tempfile.mkdtemp(prefix="pwdl_"))
|
||||
@@ -425,17 +426,20 @@ def config_schema() -> List[Dict[str, Any]]:
|
||||
if context is not None:
|
||||
context.close()
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to close Playwright context")
|
||||
try:
|
||||
if browser is not None:
|
||||
browser.close()
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to close Playwright browser")
|
||||
try:
|
||||
if pw is not None:
|
||||
pw.stop()
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to stop Playwright engine")
|
||||
|
||||
def goto(self, page: Any, url: str) -> None:
|
||||
"""Navigate with configured timeout."""
|
||||
@@ -564,7 +568,8 @@ def config_schema() -> List[Dict[str, Any]]:
|
||||
page.mouse.move(box['x'] + box['width'] / 2, box['y'] + box['height'] / 2)
|
||||
page.mouse.click(box['x'] + box['width'] / 2, box['y'] + box['height'] / 2)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to perform mouse click for selector '%s'", selector)
|
||||
|
||||
resp = page.wait_for_response(
|
||||
lambda r: r.status == 200 and any(k.lower() == 'content-disposition' for k in r.headers.keys()),
|
||||
@@ -583,7 +588,8 @@ def config_schema() -> List[Dict[str, Any]]:
|
||||
try:
|
||||
debug(f"[playwright] attempt failed (headless={mode}): {traceback.format_exc()}")
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to emit debug info for Playwright attempt failure")
|
||||
continue
|
||||
|
||||
return PlaywrightDownloadResult(ok=False, error=last_error or "no download captured")
|
||||
@@ -596,7 +602,8 @@ def config_schema() -> List[Dict[str, Any]]:
|
||||
f"nav_timeout_ms={self.defaults.navigation_timeout_ms}"
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to debug_dump Playwright defaults")
|
||||
|
||||
def _wait_for_block_clear(self, page: Any, timeout_ms: int = 8000) -> bool:
|
||||
try:
|
||||
|
||||
@@ -131,7 +131,8 @@ def _build_supported_domains() -> set[str]:
|
||||
domains = extract_domains(regex)
|
||||
_SUPPORTED_DOMAINS.update(domains)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to build supported domains from yt-dlp extractors")
|
||||
return _SUPPORTED_DOMAINS
|
||||
|
||||
|
||||
@@ -299,7 +300,8 @@ def _add_browser_cookies_if_available(options: Dict[str, Any], preferred_browser
|
||||
log(f"Requested browser cookie DB '{preferred_browser}' not found; falling back to autodetect.")
|
||||
_BROWSER_COOKIE_WARNING_EMITTED = True
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to check browser cookie path for preferred browser '%s'", preferred_browser)
|
||||
|
||||
# Auto-detect in common order (chrome/chromium/brave)
|
||||
for candidate in ("chrome", "chromium", "brave"):
|
||||
@@ -308,6 +310,8 @@ def _add_browser_cookies_if_available(options: Dict[str, Any], preferred_browser
|
||||
options["cookiesfrombrowser"] = [candidate]
|
||||
return
|
||||
except Exception:
|
||||
from SYS.logger import logger
|
||||
logger.exception("Error while checking cookie path for candidate browser '%s'", candidate)
|
||||
continue
|
||||
|
||||
if not _BROWSER_COOKIE_WARNING_EMITTED:
|
||||
@@ -650,7 +654,8 @@ def format_for_table_selection(
|
||||
if vcodec != "none" and acodec == "none" and format_id:
|
||||
selection_format_id = f"{format_id}+ba"
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to compute selection_format_id for format: %s", fmt)
|
||||
|
||||
# Format file size
|
||||
size_str = ""
|
||||
@@ -661,7 +666,8 @@ def format_for_table_selection(
|
||||
size_mb = float(size_bytes) / (1024 * 1024)
|
||||
size_str = f"{size_prefix}{size_mb:.1f}MB"
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to compute size string for format: %s", fmt)
|
||||
|
||||
# Build description
|
||||
desc_parts: List[str] = []
|
||||
@@ -755,7 +761,8 @@ class YtDlpTool:
|
||||
if resolved is not None and resolved.is_file():
|
||||
return resolved
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to initialize cookiefile using resolve_cookies_path")
|
||||
return None
|
||||
|
||||
def resolve_height_selector(self, format_str: Optional[str]) -> Optional[str]:
|
||||
@@ -908,13 +915,15 @@ class YtDlpTool:
|
||||
if bundled_ffmpeg_dir.exists():
|
||||
base_options.setdefault("ffmpeg_location", str(bundled_ffmpeg_dir))
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to inspect bundled ffmpeg directory")
|
||||
|
||||
try:
|
||||
if os.name == "nt":
|
||||
base_options.setdefault("file_access_retries", 40)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to set Windows-specific yt-dlp options")
|
||||
|
||||
if opts.cookies_path and opts.cookies_path.is_file():
|
||||
base_options["cookiefile"] = str(opts.cookies_path)
|
||||
@@ -948,7 +957,8 @@ class YtDlpTool:
|
||||
|
||||
opts = _dc.replace(opts, mode="audio", ytdl_format=None)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to set opts mode to audio via dataclasses.replace")
|
||||
elif opts.ytdl_format == "video":
|
||||
try:
|
||||
opts = opts._replace(mode="video", ytdl_format=None)
|
||||
@@ -958,7 +968,8 @@ class YtDlpTool:
|
||||
|
||||
opts = _dc.replace(opts, mode="video", ytdl_format=None)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to set opts mode to video via dataclasses.replace")
|
||||
|
||||
if opts.no_playlist:
|
||||
base_options["noplaylist"] = True
|
||||
@@ -978,7 +989,8 @@ class YtDlpTool:
|
||||
|
||||
opts = _dc.replace(opts, mode="audio")
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to set opts mode to audio via dataclasses.replace (configured default)")
|
||||
ytdl_format = None
|
||||
else:
|
||||
# Leave ytdl_format None so that default_format(opts.mode)
|
||||
@@ -1130,7 +1142,8 @@ class YtDlpTool:
|
||||
try:
|
||||
debug("yt-dlp argv: " + " ".join(str(a) for a in argv))
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to debug-print yt-dlp CLI arguments")
|
||||
|
||||
|
||||
def config_schema() -> List[Dict[str, Any]]:
|
||||
@@ -1150,6 +1163,8 @@ def config_schema() -> List[Dict[str, Any]]:
|
||||
if _browser_cookie_path_for(b) is not None:
|
||||
browser_choices.append(b)
|
||||
except Exception:
|
||||
from SYS.logger import logger
|
||||
logger.exception("Error while checking cookie path for browser '%s'", b)
|
||||
continue
|
||||
|
||||
return [
|
||||
@@ -1410,7 +1425,8 @@ def _download_with_sections_via_cli(
|
||||
try:
|
||||
_set_pipe_percent(current)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to set pipeline percent to %d", current)
|
||||
|
||||
def start(self) -> None:
|
||||
if self._thread is not None or self._start_pct >= self._max_pct:
|
||||
@@ -1426,7 +1442,8 @@ def _download_with_sections_via_cli(
|
||||
try:
|
||||
_set_pipe_percent(self._max_pct)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to set pipeline percent to max %d", self._max_pct)
|
||||
|
||||
session_id = hashlib.md5((url + str(time.time()) + "".join(random.choices(string.ascii_letters, k=10))).encode()).hexdigest()[:12]
|
||||
first_section_info = None
|
||||
@@ -1440,7 +1457,8 @@ def _download_with_sections_via_cli(
|
||||
try:
|
||||
_set_pipe_percent(display_pct)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to set pipeline percent to display_pct %d for section %d", display_pct, section_idx)
|
||||
|
||||
pipeline.set_status(f"Downloading & clipping clip section {section_idx}/{total_sections}")
|
||||
|
||||
@@ -1484,7 +1502,8 @@ def _download_with_sections_via_cli(
|
||||
try:
|
||||
cmd.extend(["--ffmpeg-location", str(ytdl_options["ffmpeg_location"])])
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to append ffmpeg_location CLI option")
|
||||
if ytdl_options.get("format"):
|
||||
cmd.extend(["-f", ytdl_options["format"]])
|
||||
if ytdl_options.get("merge_output_format"):
|
||||
@@ -1547,7 +1566,8 @@ def _download_with_sections_via_cli(
|
||||
try:
|
||||
_set_pipe_percent(99)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to set pipeline percent to 99 at end of multi-section job")
|
||||
|
||||
return session_id, first_section_info or {}
|
||||
|
||||
@@ -1654,7 +1674,8 @@ def _progress_callback(status: Dict[str, Any]) -> None:
|
||||
if isinstance(value, (int, float)) and value > 0:
|
||||
return int(value)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to interpret total bytes value: %r", value)
|
||||
return None
|
||||
|
||||
if event == "downloading":
|
||||
@@ -1669,7 +1690,8 @@ def _progress_callback(status: Dict[str, Any]) -> None:
|
||||
total=_total_bytes(total),
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to update pipeline transfer for label '%s'", label)
|
||||
else:
|
||||
_YTDLP_PROGRESS_BAR.update(
|
||||
downloaded=int(downloaded) if downloaded is not None else None,
|
||||
@@ -1683,7 +1705,8 @@ def _progress_callback(status: Dict[str, Any]) -> None:
|
||||
if _YTDLP_TRANSFER_STATE.get(label, {}).get("started"):
|
||||
pipeline.finish_transfer(label=label)
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to finish pipeline transfer for label '%s'", label)
|
||||
_YTDLP_TRANSFER_STATE.pop(label, None)
|
||||
else:
|
||||
_YTDLP_PROGRESS_BAR.finish()
|
||||
@@ -1848,7 +1871,8 @@ def download_media(opts: DownloadOptions, *, config: Optional[Dict[str, Any]] =
|
||||
if cand.suffix.lower() in {".json", ".info.json"}:
|
||||
continue
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to inspect candidate suffix for %s", cand)
|
||||
media_file = cand
|
||||
break
|
||||
if media_file is None and media_candidates:
|
||||
@@ -1870,10 +1894,13 @@ def download_media(opts: DownloadOptions, *, config: Optional[Dict[str, Any]] =
|
||||
if name.startswith(prefix):
|
||||
return name[len(prefix):]
|
||||
except Exception:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to check name prefix for '%s'", name)
|
||||
try:
|
||||
return Path(name).suffix
|
||||
except Exception:
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to obtain suffix for name '%s'", name)
|
||||
return ""
|
||||
|
||||
try:
|
||||
@@ -1884,7 +1911,8 @@ def download_media(opts: DownloadOptions, *, config: Optional[Dict[str, Any]] =
|
||||
try:
|
||||
media_file.unlink()
|
||||
except OSError:
|
||||
pass
|
||||
from SYS.logger import logger
|
||||
logger.exception("Failed to unlink duplicate media file %s", media_file)
|
||||
else:
|
||||
media_file.rename(new_media_path)
|
||||
debug(f"Renamed section file: {media_file.name} -> {new_media_name}")
|
||||
|
||||
Reference in New Issue
Block a user