Skip to main content

A lottery CLI tool built with Python for fun

Project description

lucky-cli

A lottery CLI tool built with Python for fun. Installed command: lucky.

Supports Powerball (5 numbers 1–69 + special 1–26) and Mega Millions (5 numbers 1–70 + special 1–25).

Install (dev)

uv sync
uv run lucky --help

Usage

Command Description
lucky pick <game> [--count N] Generate N valid random tickets
lucky check <game> <n1..n5> --special <s> Check a ticket against the latest draw
lucky show <game> Show the latest draw (date, numbers, special, jackpot) — default view
lucky show <game> --history [--limit N] Show the last N draws
lucky show <game> --stats Show number frequency, hot/cold numbers, odd/even distribution
lucky --version Show the installed version

Example:

lucky check powerball 12 18 33 44 61 --special 9

On every run, lucky checks for new draws and updates its local SQLite cache (~/.lucky-cli/lucky.db) before executing your command. If offline, it silently falls back to the cached data.

Project layout

src/lucky/
├── cli.py            # Typer app entrypoint
├── commands/         # one module per subcommand
├── lottery/          # game rules + ticket generator
├── database/         # SQLAlchemy models/repository
├── updater/          # remote source + sync logic
└── console/          # Rich rendering helpers
tests/

See CLAUDE.md for the full architecture spec.

Development

uv sync              # install deps
uv run pytest        # run tests
uv run lucky <cmd>   # exercise the CLI locally

Contributing

  • Commits follow Conventional Commits: feat:, fix:, docs:, refactor:, test:, chore:. Use feat!: or a BREAKING CHANGE: footer for breaking changes.
  • Versioning is automated from git tags (setuptools-scm) — never hand-edit a version string.
  • Route all CLI output through src/lucky/console/; avoid raw print().
  • Add/update tests under tests/ for any change to generator, stats, checker, or database logic.
  • CI publishes to PyPI on v* tags via .github/workflows/release.yml.

Releasing / Versioning

Version numbers are never hand-edited — they're derived from git tags via setuptools-scm. To cut a release:

  1. Find the last release tag (skip if this is the first release):
    git describe --tags --abbrev=0
    
  2. Review commits since that tag:
    git log <last-tag>..HEAD --oneline
    
  3. Classify them by Conventional Commits prefix to decide the version bump:
    • feat: → MINOR
    • fix: → PATCH
    • feat!: or a BREAKING CHANGE: footer → MAJOR
    • (first release with no prior tag: start at v0.1.0)
  4. Add a new section to CHANGELOG.md, grouped by category:
    ## v0.3.0
    
    ### Features
    - add stats command
    
    ### Fixes
    - fix check logic
    
  5. Commit the changelog update, then create and push the tag:
    git add CHANGELOG.md
    git commit -m "chore: release v0.3.0"
    git tag v0.3.0
    git push origin main v0.3.0
    
  6. Pushing the tag triggers .github/workflows/release.yml, which runs the test suite, builds the package, and publishes to PyPI using the PYPI_API_TOKEN secret — nothing else to do manually.

Development process

This project is built with Claude Code using the Superpowers plugin as its development framework — brainstorming a design spec, writing an implementation plan, then executing it task-by-task with subagent-driven TDD and code review before each merge.

License

MIT — see LICENSE.

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

lucky_cli-0.0.3.tar.gz (81.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lucky_cli-0.0.3-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file lucky_cli-0.0.3.tar.gz.

File metadata

  • Download URL: lucky_cli-0.0.3.tar.gz
  • Upload date:
  • Size: 81.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for lucky_cli-0.0.3.tar.gz
Algorithm Hash digest
SHA256 ac945b5a2ff9ed89d86b1fe770a2292566742010630b2f035ddcfeeed3bd1008
MD5 f909ea862853bd42cf810b132b457107
BLAKE2b-256 4c5077a4ed51186f42bf796e889e3e67f552ffce4e0009bd4931a1849cb69d5c

See more details on using hashes here.

File details

Details for the file lucky_cli-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: lucky_cli-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for lucky_cli-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 236f8bc090bc90e7f0e5309e27b2ed022a61aa803ba15ab06bb607c87b4b22b9
MD5 8bc44c862f4a6ce9ffadcc41bdd47607
BLAKE2b-256 b8b88a1de0b502881e0ac83fcdf212b3050a77524bbbd8d7fe76c5a06907da6f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page