Files
Medios-Macina/cmdlets/delete_url.py

83 lines
2.5 KiB
Python
Raw Normal View History

2025-11-25 20:09:33 -08:00
from __future__ import annotations
from typing import Any, Dict, Sequence
2025-12-01 01:10:16 -08:00
import sys
2025-11-25 20:09:33 -08:00
from . import register
2025-12-01 01:10:16 -08:00
import pipeline as ctx
2025-12-11 12:47:30 -08:00
from ._shared import Cmdlet, CmdletArg, SharedArgs, parse_cmdlet_args, get_field, normalize_hash
from helper.logger import log
from helper.store import FileStorage
2025-11-25 20:09:33 -08:00
2025-12-11 12:47:30 -08:00
class Delete_Url(Cmdlet):
"""Delete URL associations from files via hash+store."""
2025-11-25 20:09:33 -08:00
2025-12-11 12:47:30 -08:00
NAME = "delete-url"
SUMMARY = "Remove a URL association from a file"
USAGE = "@1 | delete-url <url>"
ARGS = [
SharedArgs.HASH,
SharedArgs.STORE,
CmdletArg("url", required=True, description="URL to remove"),
]
DETAIL = [
"- Removes URL association from file identified by hash+store",
"- Multiple url can be comma-separated",
]
2025-11-25 20:09:33 -08:00
2025-12-11 12:47:30 -08:00
def run(self, result: Any, args: Sequence[str], config: Dict[str, Any]) -> int:
"""Delete URL from file via hash+store backend."""
parsed = parse_cmdlet_args(args, self)
2025-12-01 01:10:16 -08:00
2025-12-11 12:47:30 -08:00
# Extract hash and store from result or args
file_hash = parsed.get("hash") or get_field(result, "hash")
store_name = parsed.get("store") or get_field(result, "store")
url_arg = parsed.get("url")
2025-12-01 01:10:16 -08:00
2025-12-11 12:47:30 -08:00
if not file_hash:
log("Error: No file hash provided")
return 1
if not store_name:
log("Error: No store name provided")
return 1
2025-12-01 01:10:16 -08:00
if not url_arg:
2025-12-11 12:47:30 -08:00
log("Error: No URL provided")
return 1
2025-12-01 01:10:16 -08:00
2025-12-11 12:47:30 -08:00
# Normalize hash
file_hash = normalize_hash(file_hash)
if not file_hash:
log("Error: Invalid hash format")
return 1
# Parse url (comma-separated)
url = [u.strip() for u in str(url_arg).split(',') if u.strip()]
if not url:
log("Error: No valid url provided")
return 1
# Get backend and delete url
2025-12-01 01:10:16 -08:00
try:
2025-12-11 12:47:30 -08:00
storage = FileStorage(config)
backend = storage[store_name]
for url in url:
backend.delete_url(file_hash, url)
ctx.emit(f"Deleted URL: {url}")
return 0
except KeyError:
log(f"Error: Storage backend '{store_name}' not configured")
return 1
2025-12-01 01:10:16 -08:00
except Exception as exc:
2025-12-11 12:47:30 -08:00
log(f"Error deleting URL: {exc}", file=sys.stderr)
return 1
2025-12-06 00:10:19 -08:00
2025-12-11 12:47:30 -08:00
# Register cmdlet
register(["delete-url", "del-url", "delete_url"])(Delete_Url)