Skip to content

Install

quicksight-gen is a single PyPI package with opt-in extras — pick the extras matching what you actually run, since the CLI surface is broad (emit JSON, deploy to AWS, seed a demo DB, render audit PDFs, build the docs site) and the dependency footprint of each surface is unrelated.

The bare install is intentionally tiny (Click + PyYAML + the Graphviz Python wrapper) so consumers who just want to emit JSON for their own deploy pipeline don't pull boto3 / reportlab / mkdocs / DB drivers.

What each extra unlocks

Extra Adds Unlocks
(none) click, pyyaml, graphviz quicksight-gen json apply — emits JSON to disk for hand-off to your own pipeline
[deploy] boto3, botocore[crt] json apply --execute (push to AWS QuickSight); json clean --execute (sweep ManagedBy:quicksight-gen resources). botocore[crt] is needed for AWS SSO (aws sso login) auth
[demo] psycopg2-binary schema apply --execute, data apply --execute, data refresh --execute against PostgreSQL 17+
[demo-oracle] oracledb (thin mode) Same --execute verbs against Oracle 19c+. No Oracle Instant Client install needed
[audit] reportlab, pypdf, pyhanko audit apply --execute -o report.pdf (regulator-ready PDF). pyhanko covers both auto-signing (when config.yaml carries a signing: block) and the empty reviewer-signature widgets that land on every render
[docs] mkdocs, mkdocs-material, mkdocstrings, mkdocs-click, mkdocs-macros-plugin, graphviz docs apply / docs serve to build or live-preview this handbook
[dev] All of the above plus pytest, pytest-cov, pyright, boto3-stubs, build, twine Full developer environment — runs every test suite + type-check
[e2e] pytest, pytest-xdist, boto3, botocore[crt], playwright End-to-end test suite (browser + API) against deployed dashboards. Also requires a one-time playwright install webkit to download the browser binary

Common shapes

"I just want the JSON"

pip install quicksight-gen
quicksight-gen json apply -c config.yaml -o out/

Writes out/*.json for the four bundled apps. Your own pipeline picks them up. No AWS credentials or DB drivers needed.

"I want to deploy to AWS"

pip install "quicksight-gen[deploy]"
quicksight-gen json apply -c config.yaml -o out/ --execute

--execute does a delete-then-create against AWS QuickSight using the credentials your environment already has (env vars, ~/.aws/, SSO session, instance profile).

"I want to seed the demo database"

pip install "quicksight-gen[deploy,demo]"           # PostgreSQL 17+
pip install "quicksight-gen[deploy,demo,demo-oracle]"  # add Oracle 19c+

Then:

quicksight-gen schema apply -c config.yaml --execute
quicksight-gen data   apply -c config.yaml --execute
quicksight-gen data   refresh -c config.yaml --execute
quicksight-gen json   apply -c config.yaml -o out/ --execute

"I want to render the audit PDF"

pip install "quicksight-gen[deploy,demo,audit]"
quicksight-gen audit apply -c config.yaml --execute -o report.pdf

For digitally-signed PDFs, add a signing: block to config.yaml — the same [audit] extra covers it (no separate install step). pyHanko picks up the PEM key + cert at render time and stamps a CMS signature on the cover page.

"I want to hack on the source"

git clone https://github.com/chotchki/Quicksight-Generator
cd Quicksight-Generator
uv sync --all-extras            # everything, locked from uv.lock
.venv/bin/quicksight-gen --help
.venv/bin/pytest

For a leaner dev install, pick only the extras you need:

uv sync --frozen --extra dev --extra audit

(uv sync always installs the [dev] group + any extras you ask for. --frozen fails if uv.lock is out of date — drop it locally if you're iterating on pyproject.toml.)

Quoting note

The square brackets in quicksight-gen[demo,audit] are shell metacharacters — quote them or your shell will interpret them as glob patterns:

pip install "quicksight-gen[demo,audit]"     # works in bash + zsh
pip install 'quicksight-gen[demo,audit]'     # also works
pip install quicksight-gen\[demo,audit\]     # also works

Without quoting you'll get zsh: no matches found: quicksight-gen[demo,audit] or pip will install only the bare package, silently dropping the extras.