signal-bot/tag.sh
Krzysztof kuhy Rudnicki 99aa194ad8 fix: the tagger sets up its own venv instead of failing on a missing one
"python tool/tagger.py --untagged" died with ModuleNotFoundError: fastapi.
The dependencies live in .venv and nothing said so. run.sh had the same hole
and answered it by printing the two commands to type and exiting 1 -- which
is the same rule broken one step further along: a script owns its
dependencies, and making the user be the installer is not owning them.

scripts/ensure_venv.sh creates .venv and installs the project editable if the
interpreter cannot already import fastapi and signal_bot. Idempotent and
cheap: the normal case is two file tests and one import check, 0.17s, so
entry points call it unconditionally. tag.sh is the tagger's entry point and
run.sh now uses the same helper.

Verified on a clone with no .venv at all: ./tag.sh --help created the
environment, installed the project and printed the usage.

Editable on purpose -- a later git pull updates what the tagger runs, which
is the same reason install.sh does it that way in the sibling repos.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WBrE1b9HvFw3xvG9bJiDFt
2026-08-31 13:28:49 +02:00

27 lines
825 B
Bash
Executable File

#!/bin/bash
# ============================================================================
# Tag the photo album, in a browser.
#
# ./tag.sh --untagged # only items with no tags yet
# ./tag.sh --import ~/photos --untagged # import that folder first
# ./tag.sh --import ~/photos --dry-run # the report, changing nothing
#
# Sets up .venv on first run, so this works on a clone with nothing installed.
# ============================================================================
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly REPO_ROOT
# shellcheck source=scripts/ensure_venv.sh
source "${REPO_ROOT}/scripts/ensure_venv.sh"
main() {
ensure_venv "$REPO_ROOT"
exec "${REPO_ROOT}/.venv/bin/python" "${REPO_ROOT}/tool/tagger.py" "$@"
}
main "$@"