Add AGENTS.md for AI agent context
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
# Cantaloupe Downloader — Agent Guide
|
||||
|
||||
CLI tool for exporting machine list data (Excel .xlsx) from mycantaloupe.com. Used as the upstream data source for the Canteen asset tracking pipeline.
|
||||
|
||||
## Stack
|
||||
|
||||
- **Python** 3.11+, **click** (CLI framework)
|
||||
- **httpx** (async HTTP client with anti-forgery token handling)
|
||||
- **playwright** (browser automation fallback for JS challenges)
|
||||
- **openpyxl** (Excel file reading)
|
||||
- **respx** / **pytest** (testing)
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
cantaloupe/
|
||||
__init__.py
|
||||
__main__.py # Entry: python -m cantaloupe
|
||||
cli.py # Click CLI: export, diff, configure commands
|
||||
config.py # Config file management (~/.cantaloupe.env)
|
||||
diff.py # Compare two Excel exports
|
||||
|
||||
src/
|
||||
auth.py # Login: httpx anti-forgery token or Playwright fallback
|
||||
download.py # Export POST → save .xlsx
|
||||
|
||||
tests/
|
||||
test_auth.py
|
||||
test_cli.py
|
||||
test_diff.py
|
||||
test_download.py
|
||||
|
||||
API.md # API investigation notes
|
||||
README.md
|
||||
requirements.txt
|
||||
```
|
||||
|
||||
## How to Run
|
||||
|
||||
```bash
|
||||
# Export machines list
|
||||
python -m cantaloupe export
|
||||
|
||||
# With scheduled-output path
|
||||
python -m cantaloupe export --scheduled
|
||||
|
||||
# Compare two exports
|
||||
python -m cantaloupe diff file1.xlsx file2.xlsx
|
||||
|
||||
# Configure credentials
|
||||
python -m cantaloupe configure
|
||||
```
|
||||
|
||||
## Key Architecture
|
||||
|
||||
- **Two auth strategies:**
|
||||
1. **Primary:** httpx — anti-forgery token extraction from HTML, form-based login
|
||||
2. **Fallback:** Playwright — full browser automation for JS challenges
|
||||
- Config stored in `~/.cantaloupe.env` (credentials)
|
||||
- Exports go to `~/cantaloupe-exports/` with manifest tracking via `manifest.json`
|
||||
- `diff` command compares two exports cell-by-cell
|
||||
|
||||
## Production
|
||||
|
||||
- **CLI tool only** — no server, no systemd
|
||||
- Triggered via cron: `cantaloupe-sync.sh` runs every 6 hours
|
||||
- Part of the Canteen pipeline: Cantaloupe → downloader → sync API
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Var | Description |
|
||||
|-----|-------------|
|
||||
| CANTALOUPE_EMAIL | Login email |
|
||||
| CANTALOUPE_PASSWORD | Login password |
|
||||
| CANTALOUPE_OTP_SECRET | Optional TOTP secret for 2FA |
|
||||
|
||||
## Pitfalls
|
||||
|
||||
- Cantaloupe may show JS challenges — Playwright fallback handles this but requires browser binaries (`playwright install chromium`)
|
||||
- Export format may change on Cantaloupe's side (they're a third-party SaaS) — `diff.py` detects structural changes
|
||||
- Auth tokens expire; each run re-authenticates
|
||||
Reference in New Issue
Block a user