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.
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.
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.jsonto 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
- CLI parsing —
argparseturns terminal arguments into a city + days value - API client (
api_client.py) — wraps the OpenWeather REST endpoints (/weatherand/forecast), reads the API key from the environment, handles HTTP errors with custom exceptions - Caching — every successful response is written to
~/.weather_cache.jsonwith a timestamp. Repeat queries within 10 minutes return the cached copy instead of calling the API again - Formatter (
formatter.py) — usesrich.Panelfor the current-weather card andrich.Tablefor 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|metricflag - Bulk mode:
weather-enquire Bangalore Mumbai Delhiin one table - Config file at
~/.weather.yamlwith a default city -
--alert "rain"flag with exit code 1 if rain in forecast (useful in cron jobs) - Streaming output for
--watchmode
Author
Narasimharao Bhavirisetty — Python backend & GenAI engineer.
- 🌐 Portfolio: narasimharao2743.github.io
- 💼 LinkedIn: linkedin.com/in/narasimharao-bhavirisetty-0526891b0
- 📦 PyPI: pypi.org/project/weather-enquire
If this project helped you, a ⭐ on the repo is appreciated.
Project details
Release history Release notifications | RSS feed
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a55d7f9dd98d98e9c10a16359d79fbec8a09c807170753c306b8af6fe5852752
|
|
| MD5 |
c52cd758b00d29abd53d048dd9f60523
|
|
| BLAKE2b-256 |
368afbceda18657fb1bbcd2023c145a775cf05784274790bb883214ff938457f
|
File details
Details for the file weather_enquire-0.2.1-py3-none-any.whl.
File metadata
- Download URL: weather_enquire-0.2.1-py3-none-any.whl
- Upload date:
- Size: 9.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0bd872f236dfc8f754bc451622020f3700e357b4687bf55574200a3fac6285d0
|
|
| MD5 |
e39f07ebfe22d02930d2a368cb227a95
|
|
| BLAKE2b-256 |
61e8d7e1a96410364285f17e9b6d8dab0d5215070cc5255ac262fdc9d0b1fca2
|