Skip to main content

A polished Python CLI for fetching live weather and multi-day forecasts in your terminal, with on-disk response caching.

Project description

weather-enquire

A terminal weather tool — give it a city, get current conditions + a multi-day forecast in pretty colours.

PyPI Python Downloads License

A small but polished command-line tool built in Python that fetches live weather data from the OpenWeather API and renders it in the terminal with rich. Includes on-disk response caching so repeated calls don't hit the API.


Demo

Record a 10-second GIF of running the command and replace the line below.

demo


Install

pip install weather-enquire

Then set your OpenWeather API key as an environment variable:

# Linux / Mac
export OPENWEATHER_API_KEY=your_api_key_here

# Windows PowerShell
$env:OPENWEATHER_API_KEY = "your_api_key_here"

Get a free API key at openweathermap.org/users/sign_up. New keys can take up to 2 hours to activate.


Usage

# Current weather
weather-enquire Bangalore

# Multi-word city (quote it)
weather-enquire "New York"

# Add a 3-day forecast
weather-enquire Bangalore --days 3

# Up to 5-day forecast
weather-enquire Mumbai -d 5

# Help
weather-enquire --help

Example output

┌────────────── 📍 Bengaluru, IN ───────────────┐
│ ☁️  Scattered Clouds                          │
│                                               │
│ 🌡️  Temperature   23.4°C  (feels like 24.0°C) │
│ 💧 Humidity      84%                          │
│ 🌬️  Wind          9.3 km/h                    │
└───────────────────────────────────────────────┘
                📅 Next 3-day forecast
┌────────────┬─────┬──────┬──────┬────────────────────┐
│ Date       │ Day │ High │  Low │ Conditions         │
├────────────┼─────┼──────┼──────┼────────────────────┤
│ 2026-05-28 │ Thu │ 23°C │ 23°C │ 🌧️ Light Rain      │
│ 2026-05-29 │ Fri │ 33°C │ 22°C │ ☁️ Overcast Clouds │
│ 2026-05-30 │ Sat │ 31°C │ 22°C │ ☁️ Overcast Clouds │
└────────────┴─────┴──────┴──────┴────────────────────┘

Features

  • 🌡️ Current weather — temperature, feels-like, humidity, wind for any city worldwide
  • 📅 Multi-day forecast — up to 5 days of highs/lows + conditions
  • 💾 On-disk caching — responses cached for 10 minutes in ~/.weather_cache.json to avoid hammering the API
  • Graceful errors — clean messages for unknown cities, bad API keys, and network failures (with proper exit codes)
  • 🎨 Pretty output — colour-coded panels and tables via rich

Tech Stack

Layer Technology
Language Python 3.10+
HTTP requests
Pretty terminal output rich
Environment python-dotenv
Weather data OpenWeather API (free tier)
Packaging pyproject.toml + setuptools

How It Works

  1. CLI parsingargparse turns terminal arguments into a city + days value
  2. API client (api_client.py) — wraps the OpenWeather REST endpoints (/weather and /forecast), reads the API key from the environment, handles HTTP errors with custom exceptions
  3. Caching — every successful response is written to ~/.weather_cache.json with a timestamp. Repeat queries within 10 minutes return the cached copy instead of calling the API again
  4. Formatter (formatter.py) — uses rich.Panel for the current-weather card and rich.Table for the forecast grid

Engineering Decisions

Decision Choice Why
Cache TTL 10 minutes Weather doesn't change minute-to-minute, but a stale forecast > 10 min old feels wrong
Cache location ~/.weather_cache.json (home dir, not repo) Same machine, multiple project checkouts share the cache; doesn't leak into git
Custom exceptions CityNotFoundError, WeatherAPIError Lets the CLI distinguish "user typo" (exit 1) from "API down" (exit 2) for shell scripts
units=metric hardcoded Yes Simpler. Adding --units later is a one-line tweak
Forecast aggregation Group 3-hourly entries by date, show min/max + mid-day conditions OpenWeather free tier doesn't provide a daily summary endpoint, so we synthesise it from the 5-day/3-hour data
Package layout src/weather_enquire/ Standard PyPI src-layout — prevents accidentally importing from the working directory during development

Development (install from source)

git clone https://github.com/narasimharao2743/weather-cli.git
cd weather-cli

python -m venv venv

# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate

pip install -e ".[dev]" || pip install -e .

# Set up your API key (.env file works for local dev)
cp .env.example .env
# then edit .env and paste your key

# Run
weather-enquire Bangalore --days 3

Project Structure

weather-cli/
├── src/
│   └── weather_enquire/
│       ├── __init__.py       # package version
│       ├── cli.py            # argparse + main entry point
│       ├── api_client.py     # OpenWeather wrapper + caching
│       └── formatter.py      # rich rendering
├── pyproject.toml            # package metadata + dependencies
├── LICENSE                   # MIT
├── requirements.txt          # development dependencies
├── .env.example              # template for OPENWEATHER_API_KEY
├── .gitignore
└── README.md

Roadmap

  • --units imperial|metric flag
  • Bulk mode: weather-enquire Bangalore Mumbai Delhi in one table
  • Config file at ~/.weather.yaml with a default city
  • --alert "rain" flag with exit code 1 if rain in forecast (useful in cron jobs)
  • Streaming output for --watch mode

Author

Narasimharao Bhavirisetty — Python backend & GenAI engineer.

If this project helped you, a ⭐ on the repo is appreciated.

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

weather_enquire-0.2.1.tar.gz (11.5 kB view details)

Uploaded Source

Built Distribution

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

weather_enquire-0.2.1-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

Details for the file weather_enquire-0.2.1.tar.gz.

File metadata

  • Download URL: weather_enquire-0.2.1.tar.gz
  • Upload date:
  • Size: 11.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for weather_enquire-0.2.1.tar.gz
Algorithm Hash digest
SHA256 a55d7f9dd98d98e9c10a16359d79fbec8a09c807170753c306b8af6fe5852752
MD5 c52cd758b00d29abd53d048dd9f60523
BLAKE2b-256 368afbceda18657fb1bbcd2023c145a775cf05784274790bb883214ff938457f

See more details on using hashes here.

File details

Details for the file weather_enquire-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for weather_enquire-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0bd872f236dfc8f754bc451622020f3700e357b4687bf55574200a3fac6285d0
MD5 e39f07ebfe22d02930d2a368cb227a95
BLAKE2b-256 61e8d7e1a96410364285f17e9b6d8dab0d5215070cc5255ac262fdc9d0b1fca2

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