Tiny Typer CLI that fetches an API and caches results in SQLite (SQLModel)
Project description
apicache-cli-av
Tiny Typer CLI that fetches an API resource and caches results in SQLite (SQLModel). Use it as a command-line tool or import its library in other projects.
Features
- Fetch JSON from an HTTP API (configurable base URL)
- Optional API key header
- SQLite-backed cache for idempotent reads
- Save output to an auto-named file or a specific file
- Simple Docker image for zero-setup runs
Install (PyPI)
Recommended for CLI users: pipx
- pipx ensures isolated CLI installs and adds the command to your PATH.
pip install --upgrade pipx
pipx install apicache-cli-av
apicache-cli-av --help
Standard pip (inside a virtual environment)
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -U apicache-cli-av
apicache-cli-av --help
Install from TestPyPI (if you’re testing pre-releases)
pip install --index-url https://test.pypi.org/simple --extra-index-url https://pypi.org/simple apicache-cli-av
Usage
Basic fetch (prints JSON and writes a file)
apicache-cli-av fetch --resource posts --id 1
- By default, the tool writes to an auto-named file under data/, e.g., data/posts_1.json.
- Use --output-file to write to an exact path, or --output-dir to change the default directory.
Save to a specific file
apicache-cli-av fetch -r posts -i 1 --output-file data/posts_1.json
Save to a different directory with auto filename
apicache-cli-av fetch -r posts -i 1 --output-dir out
Open the file after saving (Windows will open with the OS default app)
apicache-cli-av fetch -r posts -i 1 --output-dir data --open
Bypass cache
apicache-cli-av fetch -r posts -i 1 --no-cache
Specify a base URL
apicache-cli-av fetch -r items -i 42 --base-url https://api.example.com
Pass an API key (prefer environment variable)
# Windows PowerShell
$env:APICACHE_API_KEY = "your-api-key"
apicache-cli-av fetch -r items -i 42
# Or via flag (less secure; may show in history/process list)
apicache-cli-av fetch -r items -i 42 --api-key "your-api-key"
Environment variables
- APICACHE_API_KEY: API key to send (usually as Authorization: Bearer )
- API_BASE_URL: Default base URL if not passed via --base-url
- APICACHE_OUTPUT_DIR: Default directory for saved JSON files (when no --output-file)
- APICACHE_DB_PATH: SQLite path for the cache (defaults to data/cache.db)
Docker
Pull the image (replace the repository if you use GHCR or a different namespace)
docker pull docker.io/asvarnon/apicache:latest
Run the CLI (ephemeral container)
docker run --rm docker.io/asvarnon/apicache:latest apicache-cli-av --help
Persist cache and outputs to your host
mkdir -Force data | Out-Null
docker run --rm `
-v ${PWD}/data:/app/data `
docker.io/asvarnon/apicache:latest `
apicache-cli-av fetch -r posts -i 1 --output-dir /app/data
Provide an API key at runtime
docker run --rm `
-e APICACHE_API_KEY="your-api-key" `
docker.io/asvarnon/apicache:latest `
apicache-cli-av fetch -r items -i 42
Notes
- --open won’t launch desktop apps from inside a container. Save to a mounted volume and open the file on your host.
- Use a specific tag (e.g., :v1.2.3 or :) for reproducible runs.
Library usage
from apicache_cli_av.api import APIClient
client = APIClient() # or APIClient(base_url="https://api.example.com", api_key="...")
data = client.fetch("posts", 1)
print(data)
Development
Setup
poetry install
poetry run pytest -q
Local CLI
poetry run apicache-cli-av --help
Build and publish (manual)
poetry build
# TestPyPI
poetry run twine upload --repository testpypi dist/*
# PyPI
poetry run twine upload dist/*
Troubleshooting
-
Typer/Click error like “Parameter.make_metavar() missing 1 required positional argument: 'ctx'”
- Ensure Click < 8.2 with Typer 0.12 (this project pins click >=8.1,<8.2).
-
TestPyPI upload 403
- Bump version; ensure you’re using username token and a valid token for the correct index.
-
Import errors for utils
- Package path is apicache_cli_av; make sure relative imports are used within the package and that the project is installed (pip/poetry) or PYTHONPATH includes src/ during debugging.
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file apicache_cli_av-0.1.5.tar.gz.
File metadata
- Download URL: apicache_cli_av-0.1.5.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87be8b3a907b9ae958f618c23fbe4f71df9b137cae9b27d595f6e5afa6dba250
|
|
| MD5 |
feffca5f1f2cafec8033b1f4beff5df7
|
|
| BLAKE2b-256 |
6d13c47207aaac5a7c26364e6a06fe1ab83d5e243e342cf3237d871325f3fc10
|
File details
Details for the file apicache_cli_av-0.1.5-py3-none-any.whl.
File metadata
- Download URL: apicache_cli_av-0.1.5-py3-none-any.whl
- Upload date:
- Size: 7.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6b1ac3b558f5f351ddc9622a9891de9ae562ec341918ecf6a6edfa8d7489765
|
|
| MD5 |
3e6aa9237f716c8c1523fd9d2f018b88
|
|
| BLAKE2b-256 |
f7525feb8e78df81bcc53bdfd83f1010750774c8cc12b25f792bfe672dda81b4
|