Add complete WCX update workflow
This commit is contained in:
152
scripts/update_wcx.sh
Executable file
152
scripts/update_wcx.sh
Executable file
@ -0,0 +1,152 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
#
|
||||||
|
# Run the complete WCX index update:
|
||||||
|
#
|
||||||
|
# 1. Download the current site index.
|
||||||
|
# 2. Import site metadata into SQLite.
|
||||||
|
# 3. OCR-process newly discovered movies.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# scripts/update_wcx.sh
|
||||||
|
# scripts/update_wcx.sh --skip-ocr
|
||||||
|
#
|
||||||
|
# GOOGLE_VISION_API_KEY must be set unless --skip-ocr is used.
|
||||||
|
#
|
||||||
|
|
||||||
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
ROOT_DIR="/storage/disk1/WCX"
|
||||||
|
|
||||||
|
SYNC_SCRIPT="${ROOT_DIR}/wcx_sync.py"
|
||||||
|
IMPORT_SCRIPT="${ROOT_DIR}/scripts/import_site.py"
|
||||||
|
OCR_BATCH_SCRIPT="${ROOT_DIR}/scripts/process_pending_ocr.py"
|
||||||
|
|
||||||
|
DATABASE_FILE="${ROOT_DIR}/database/wcx.db"
|
||||||
|
INDEX_FILE="${ROOT_DIR}/import/wcx_site_index.json"
|
||||||
|
|
||||||
|
LOCK_FILE="${ROOT_DIR}/database/update_wcx.lock"
|
||||||
|
|
||||||
|
SKIP_OCR=false
|
||||||
|
|
||||||
|
|
||||||
|
log() {
|
||||||
|
printf '[%s] %s\n' \
|
||||||
|
"$(date '+%Y-%m-%d %H:%M:%S')" \
|
||||||
|
"$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fail() {
|
||||||
|
log "ERROR: $*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
on_error() {
|
||||||
|
local exit_code=$?
|
||||||
|
local line_number=$1
|
||||||
|
|
||||||
|
log "Update failed on line ${line_number} with exit code ${exit_code}." >&2
|
||||||
|
exit "${exit_code}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
show_usage() {
|
||||||
|
cat <<'EOF'
|
||||||
|
Usage:
|
||||||
|
update_wcx.sh
|
||||||
|
update_wcx.sh --skip-ocr
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--skip-ocr Run site synchronization and database import without OCR.
|
||||||
|
--help Show this help.
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--skip-ocr)
|
||||||
|
SKIP_OCR=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--help|-h)
|
||||||
|
show_usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
fail "Unknown argument: $1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
trap 'on_error "$LINENO"' ERR
|
||||||
|
|
||||||
|
|
||||||
|
[[ -f "${SYNC_SCRIPT}" ]] ||
|
||||||
|
fail "Sync script not found: ${SYNC_SCRIPT}"
|
||||||
|
|
||||||
|
[[ -x "${IMPORT_SCRIPT}" ]] ||
|
||||||
|
fail "Import script is missing or not executable: ${IMPORT_SCRIPT}"
|
||||||
|
|
||||||
|
[[ -x "${OCR_BATCH_SCRIPT}" ]] ||
|
||||||
|
fail "OCR batch script is missing or not executable: ${OCR_BATCH_SCRIPT}"
|
||||||
|
|
||||||
|
[[ -f "${DATABASE_FILE}" ]] ||
|
||||||
|
fail "Database not found: ${DATABASE_FILE}"
|
||||||
|
|
||||||
|
|
||||||
|
if [[ "${SKIP_OCR}" == false ]] &&
|
||||||
|
[[ -z "${GOOGLE_VISION_API_KEY:-}" ]]; then
|
||||||
|
fail "GOOGLE_VISION_API_KEY is not set. Use --skip-ocr to omit OCR."
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Prevent two update processes from running simultaneously.
|
||||||
|
exec 9>"${LOCK_FILE}"
|
||||||
|
|
||||||
|
if ! flock -n 9; then
|
||||||
|
fail "Another WCX update is already running."
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
cd "${ROOT_DIR}"
|
||||||
|
|
||||||
|
log "Starting WCX update."
|
||||||
|
log "Database: ${DATABASE_FILE}"
|
||||||
|
|
||||||
|
|
||||||
|
log "Step 1/3: Downloading current WCX site index."
|
||||||
|
|
||||||
|
python3 "${SYNC_SCRIPT}" --out "${INDEX_FILE}"
|
||||||
|
|
||||||
|
[[ -s "${INDEX_FILE}" ]] ||
|
||||||
|
fail "Site index was not created or is empty: ${INDEX_FILE}"
|
||||||
|
|
||||||
|
log "Site index downloaded successfully."
|
||||||
|
|
||||||
|
|
||||||
|
log "Step 2/3: Importing site metadata."
|
||||||
|
|
||||||
|
"${IMPORT_SCRIPT}" \
|
||||||
|
--database "${DATABASE_FILE}" \
|
||||||
|
--input "${INDEX_FILE}"
|
||||||
|
|
||||||
|
log "Site metadata imported successfully."
|
||||||
|
|
||||||
|
|
||||||
|
if [[ "${SKIP_OCR}" == true ]]; then
|
||||||
|
log "Step 3/3: OCR skipped."
|
||||||
|
else
|
||||||
|
log "Step 3/3: Processing pending OCR records."
|
||||||
|
|
||||||
|
"${OCR_BATCH_SCRIPT}" \
|
||||||
|
--database "${DATABASE_FILE}"
|
||||||
|
|
||||||
|
log "OCR processing finished."
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
log "WCX update completed successfully."
|
||||||
Reference in New Issue
Block a user