jkj
This commit is contained in:
@@ -7,15 +7,15 @@ import sys
|
||||
from SYS.logger import log
|
||||
|
||||
import pipeline as ctx
|
||||
from ._shared import (
|
||||
Cmdlet,
|
||||
CmdletArg,
|
||||
SharedArgs,
|
||||
normalize_hash,
|
||||
parse_cmdlet_args,
|
||||
normalize_result_input,
|
||||
should_show_help,
|
||||
)
|
||||
from . import _shared as sh
|
||||
|
||||
Cmdlet = sh.Cmdlet
|
||||
CmdletArg = sh.CmdletArg
|
||||
SharedArgs = sh.SharedArgs
|
||||
normalize_hash = sh.normalize_hash
|
||||
parse_cmdlet_args = sh.parse_cmdlet_args
|
||||
normalize_result_input = sh.normalize_result_input
|
||||
should_show_help = sh.should_show_help
|
||||
from Store import Store
|
||||
from SYS.utils import sha256_file
|
||||
|
||||
@@ -84,9 +84,9 @@ class Add_Note(Cmdlet):
|
||||
else:
|
||||
note_text = str(text_parts or "").strip()
|
||||
|
||||
if not note_text:
|
||||
log("[add_note] Error: Empty note text", file=sys.stderr)
|
||||
return 1
|
||||
# Note text can be omitted when upstream stages provide it (e.g. download-media --write-sub
|
||||
# attaches notes.sub). In that case we resolve per-item below.
|
||||
user_provided_text = bool(note_text)
|
||||
|
||||
results = normalize_result_input(result)
|
||||
if not results:
|
||||
@@ -99,11 +99,56 @@ class Add_Note(Cmdlet):
|
||||
store_registry = Store(config)
|
||||
updated = 0
|
||||
|
||||
# Optional global fallback for note text from pipeline values.
|
||||
# Allows patterns like: ... | add-note sub
|
||||
pipeline_default_text = None
|
||||
if not user_provided_text:
|
||||
try:
|
||||
pipeline_default_text = ctx.load_value(note_name)
|
||||
except Exception:
|
||||
pipeline_default_text = None
|
||||
if isinstance(pipeline_default_text, list):
|
||||
pipeline_default_text = " ".join([str(x) for x in pipeline_default_text]).strip()
|
||||
elif pipeline_default_text is not None:
|
||||
pipeline_default_text = str(pipeline_default_text).strip()
|
||||
|
||||
for res in results:
|
||||
if not isinstance(res, dict):
|
||||
ctx.emit(res)
|
||||
continue
|
||||
|
||||
# Resolve note text for this item when not provided explicitly.
|
||||
item_note_text = note_text
|
||||
if not user_provided_text:
|
||||
# Prefer item-scoped notes dict.
|
||||
candidate = None
|
||||
try:
|
||||
notes = res.get("notes")
|
||||
if isinstance(notes, dict):
|
||||
candidate = notes.get(note_name)
|
||||
except Exception:
|
||||
candidate = None
|
||||
|
||||
# Also allow direct field fallback: res["sub"], etc.
|
||||
if candidate is None:
|
||||
try:
|
||||
candidate = res.get(note_name)
|
||||
except Exception:
|
||||
candidate = None
|
||||
|
||||
if candidate is None:
|
||||
candidate = pipeline_default_text
|
||||
|
||||
if isinstance(candidate, list):
|
||||
item_note_text = " ".join([str(x) for x in candidate]).strip()
|
||||
else:
|
||||
item_note_text = str(candidate or "").strip()
|
||||
|
||||
if not item_note_text:
|
||||
log(f"[add_note] Warning: No note text found for '{note_name}'; skipping", file=sys.stderr)
|
||||
ctx.emit(res)
|
||||
continue
|
||||
|
||||
store_name = str(store_override or res.get("store") or "").strip()
|
||||
raw_hash = res.get("hash")
|
||||
raw_path = res.get("path")
|
||||
@@ -130,7 +175,7 @@ class Add_Note(Cmdlet):
|
||||
|
||||
ok = False
|
||||
try:
|
||||
ok = bool(backend.set_note(resolved_hash, note_name, note_text, config=config))
|
||||
ok = bool(backend.set_note(resolved_hash, note_name, item_note_text, config=config))
|
||||
except Exception as exc:
|
||||
log(f"[add_note] Error: Failed to set note: {exc}", file=sys.stderr)
|
||||
ok = False
|
||||
|
||||
Reference in New Issue
Block a user