fdf
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict, List, Optional, Sequence
|
||||
from typing import Any, Dict, List, Sequence
|
||||
import sys
|
||||
|
||||
from SYS.logger import log
|
||||
from SYS.detail_view_helpers import create_detail_view, prepare_detail_metadata
|
||||
from SYS.payload_builders import build_table_result_payload
|
||||
from SYS.result_publication import publish_result_table
|
||||
from SYS.result_table_helpers import add_row_columns
|
||||
|
||||
from SYS import pipeline as ctx
|
||||
from . import _shared as sh
|
||||
@@ -16,8 +19,6 @@ 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
|
||||
|
||||
|
||||
class Get_Note(Cmdlet):
|
||||
@@ -45,14 +46,6 @@ class Get_Note(Cmdlet):
|
||||
pass
|
||||
self.register()
|
||||
|
||||
def _resolve_hash(
|
||||
self,
|
||||
raw_hash: Optional[str],
|
||||
raw_path: Optional[str],
|
||||
override_hash: Optional[str],
|
||||
) -> Optional[str]:
|
||||
return sh.resolve_hash_for_cmdlet(raw_hash, raw_path, override_hash)
|
||||
|
||||
def run(self, result: Any, args: Sequence[str], config: Dict[str, Any]) -> int:
|
||||
if should_show_help(args):
|
||||
log(f"Cmdlet: {self.name}\nSummary: {self.summary}\nUsage: {self.usage}")
|
||||
@@ -60,12 +53,12 @@ class Get_Note(Cmdlet):
|
||||
|
||||
parsed = parse_cmdlet_args(args, self)
|
||||
store_override = parsed.get("store")
|
||||
query_hash = sh.parse_single_hash_query(parsed.get("query"))
|
||||
if parsed.get("query") and not query_hash:
|
||||
log(
|
||||
"[get_note] Error: -query must be of the form hash:<sha256>",
|
||||
file=sys.stderr
|
||||
)
|
||||
query_hash, query_valid = sh.require_single_hash_query(
|
||||
parsed.get("query"),
|
||||
"[get_note] Error: -query must be of the form hash:<sha256>",
|
||||
log_file=sys.stderr,
|
||||
)
|
||||
if not query_valid:
|
||||
return 1
|
||||
|
||||
results = normalize_result_input(result)
|
||||
@@ -82,31 +75,32 @@ class Get_Note(Cmdlet):
|
||||
)
|
||||
return 1
|
||||
|
||||
store_registry = Store(config)
|
||||
store_registry = None
|
||||
any_notes = False
|
||||
display_items: List[Dict[str, Any]] = []
|
||||
|
||||
# We assume single subject for get-note detail view
|
||||
main_res = results[0]
|
||||
|
||||
from SYS.result_table import ItemDetailView, extract_item_metadata
|
||||
metadata = extract_item_metadata(main_res)
|
||||
metadata = prepare_detail_metadata(main_res)
|
||||
|
||||
note_table = (
|
||||
ItemDetailView("Notes", item_metadata=metadata)
|
||||
.set_table("note")
|
||||
.set_value_case("preserve")
|
||||
._perseverance(True)
|
||||
note_table = create_detail_view(
|
||||
"Notes",
|
||||
metadata,
|
||||
table_name="note",
|
||||
source_command=("get-note", []),
|
||||
)
|
||||
note_table.set_source_command("get-note", [])
|
||||
|
||||
for res in results:
|
||||
if not isinstance(res, dict):
|
||||
continue
|
||||
|
||||
store_name = str(store_override or res.get("store") or "").strip()
|
||||
raw_hash = res.get("hash")
|
||||
raw_path = res.get("path")
|
||||
store_name, resolved_hash = sh.resolve_item_store_hash(
|
||||
res,
|
||||
override_store=str(store_override) if store_override else None,
|
||||
override_hash=str(query_hash) if query_hash else None,
|
||||
path_fields=("path",),
|
||||
)
|
||||
|
||||
if not store_name:
|
||||
log(
|
||||
@@ -115,11 +109,6 @@ class Get_Note(Cmdlet):
|
||||
)
|
||||
return 1
|
||||
|
||||
resolved_hash = self._resolve_hash(
|
||||
raw_hash=str(raw_hash) if raw_hash else None,
|
||||
raw_path=str(raw_path) if raw_path else None,
|
||||
override_hash=str(query_hash) if query_hash else None,
|
||||
)
|
||||
if not resolved_hash:
|
||||
continue
|
||||
|
||||
@@ -129,9 +118,12 @@ class Get_Note(Cmdlet):
|
||||
if store_name and not metadata.get("Store"):
|
||||
metadata["Store"] = store_name
|
||||
|
||||
try:
|
||||
backend = store_registry[store_name]
|
||||
except Exception as exc:
|
||||
backend, store_registry, exc = sh.get_store_backend(
|
||||
config,
|
||||
store_name,
|
||||
store_registry=store_registry,
|
||||
)
|
||||
if backend is None:
|
||||
log(
|
||||
f"[get_note] Error: Unknown store '{store_name}': {exc}",
|
||||
file=sys.stderr
|
||||
@@ -158,28 +150,27 @@ class Get_Note(Cmdlet):
|
||||
# Keep payload small for IPC/pipes.
|
||||
raw_text = raw_text[:999]
|
||||
preview = " ".join(raw_text.replace("\r", "").split("\n"))
|
||||
payload: Dict[str, Any] = {
|
||||
"store": store_name,
|
||||
"hash": resolved_hash,
|
||||
"note_name": str(k),
|
||||
"note_text": raw_text,
|
||||
"columns": [
|
||||
("Name",
|
||||
str(k)),
|
||||
("Text",
|
||||
preview.strip()),
|
||||
payload = build_table_result_payload(
|
||||
columns=[
|
||||
("Name", str(k)),
|
||||
("Text", preview.strip()),
|
||||
],
|
||||
}
|
||||
store=store_name,
|
||||
hash=resolved_hash,
|
||||
note_name=str(k),
|
||||
note_text=raw_text,
|
||||
)
|
||||
display_items.append(payload)
|
||||
if note_table is not None:
|
||||
row = note_table.add_row()
|
||||
row.add_column("Name", str(k))
|
||||
row.add_column("Text", preview.strip())
|
||||
add_row_columns(
|
||||
note_table,
|
||||
[("Name", str(k)), ("Text", preview.strip())],
|
||||
)
|
||||
|
||||
ctx.emit(payload)
|
||||
|
||||
# Always set the table overlay even if empty to show item details
|
||||
ctx.set_last_result_table_overlay(note_table, display_items, subject=result)
|
||||
publish_result_table(ctx, note_table, display_items, subject=result, overlay=True)
|
||||
|
||||
if not any_notes:
|
||||
log("No notes found.")
|
||||
|
||||
Reference in New Issue
Block a user