69 lines
1.9 KiB
Plaintext
Executable File
69 lines
1.9 KiB
Plaintext
Executable File
#!/usr/bin/env -S uv run --script
|
|
# /// script
|
|
# requires-python = ">=3.11"
|
|
# dependencies = [
|
|
# "httpx",
|
|
# "typer",
|
|
# ]
|
|
# ///
|
|
|
|
"""Upload a document to the document sync server."""
|
|
|
|
import typer
|
|
from pathlib import Path
|
|
import json
|
|
import sys
|
|
|
|
# Add lib directory to path for imports
|
|
sys.path.insert(0, str(Path(__file__).parent / "lib"))
|
|
from config import Config
|
|
from client import DocumentClient
|
|
|
|
app = typer.Typer(add_completion=False)
|
|
|
|
|
|
@app.command()
|
|
def main(
|
|
file_path: str = typer.Argument(..., help="Path to the file to upload"),
|
|
name: str = typer.Option(None, "--name", help="Custom name for the document (defaults to filename)"),
|
|
tags: str = typer.Option(None, "--tags", help="Comma-separated list of tags"),
|
|
description: str = typer.Option(None, "--description", help="Description of the document"),
|
|
):
|
|
"""Upload a document to the document sync server."""
|
|
try:
|
|
# Validate file exists
|
|
path = Path(file_path)
|
|
if not path.exists():
|
|
error = {"error": f"File not found: {file_path}"}
|
|
print(json.dumps(error), file=sys.stderr)
|
|
raise typer.Exit(1)
|
|
|
|
# Parse tags from comma-separated string
|
|
parsed_tags = None
|
|
if tags:
|
|
parsed_tags = [tag.strip() for tag in tags.split(",") if tag.strip()]
|
|
|
|
# Create client and push document
|
|
config = Config()
|
|
client = DocumentClient(config)
|
|
|
|
result = client.push_document(
|
|
file_path=path,
|
|
name=name,
|
|
tags=parsed_tags,
|
|
description=description
|
|
)
|
|
|
|
# Output success result as JSON
|
|
print(json.dumps(result, indent=2))
|
|
|
|
except Exception as e:
|
|
# Output error as JSON to stderr
|
|
error = {"error": str(e)}
|
|
print(json.dumps(error), file=sys.stderr)
|
|
raise typer.Exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app()
|