fix: cantaloupe export subprocess cwd points to cantaloupe-downloader project

The subprocess.run for cantaloupe export was using cwd=admin_server_dir,
which meant 'python -m cantaloupe' couldn't find the local cantaloupe module.
Changed cwd to ~/projects/cantaloupe-downloader where the module lives.

Also added scripts/cantaloupe-sync.sh — the 6h cron job wrapper script.
This commit is contained in:
Leo
2026-05-21 19:32:44 -04:00
parent f7ffa0e6cc
commit e9d18cb8b7
2 changed files with 53 additions and 1 deletions
+2 -1
View File
@@ -419,10 +419,11 @@ async def run_sync(
# Try subprocess call to cantaloupe export
try:
import subprocess
cantaloupe_dir = os.path.expanduser("~/projects/cantaloupe-downloader")
result = subprocess.run(
["python", "-m", "cantaloupe", "export", "--scheduled"],
capture_output=True, text=True, timeout=120,
cwd=str(Path(__file__).parent),
cwd=cantaloupe_dir,
)
if result.returncode != 0:
raise HTTPException(
+51
View File
@@ -0,0 +1,51 @@
#!/bin/bash
# Cantaloupe Sync — export + trigger staged import
# Runs every 6 hours via Hermes cron (no_agent mode)
set -euo pipefail
EXPORT_DIR="$HOME/cantaloupe-exports"
ADMIN_URL="http://127.0.0.1:8090"
LOG_TAG="[cantaloupe-sync]"
echo "$LOG_TAG Starting sync at $(date -Iseconds)"
# ── Step 1: Export from Cantaloupe ─────────────────────────────────
echo "$LOG_TAG Step 1/2: Exporting from mycantaloupe.com..."
cd "$HOME/projects/cantaloupe-downloader"
if python -m cantaloupe export --scheduled --output "$EXPORT_DIR" 2>&1; then
echo "$LOG_TAG Export completed successfully."
else
echo "$LOG_TAG Export failed (exit=$?). Will try to sync any existing export file."
fi
# ── Step 2: Trigger sync API ───────────────────────────────────────
echo "$LOG_TAG Step 2/2: Triggering admin server sync API..."
# Get a fresh auth token
TOKEN=$(curl -s -X POST "$ADMIN_URL/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"changeme"}' \
| python3 -c "import sys,json; print(json.load(sys.stdin)['token'])" 2>/dev/null)
if [ -z "${TOKEN:-}" ]; then
echo "$LOG_TAG ERROR: Could not obtain admin auth token."
exit 1
fi
# Trigger sync
RESPONSE=$(curl -s -X POST "$ADMIN_URL/api/admin/cantaloupe/sync" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{}' 2>&1)
echo "$LOG_TAG Sync API response: $RESPONSE"
# ── Summary ────────────────────────────────────────────────────────
if echo "$RESPONSE" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f\"Batch: {d.get('batch_id','?')}, Rows: {d.get('total_rows','?')}, New: {d.get('new_rows','?')}, Changed: {d.get('changed_rows','?')}\")" 2>/dev/null; then
echo "$LOG_TAG Sync complete."
else
echo "$LOG_TAG Sync triggered (see response above)."
fi
echo "$LOG_TAG Done at $(date -Iseconds)"