Skip to main content

Rainshine

A small Python desktop app for the weather as recorded. Choose a date and one of the 238 documented locations to see NOAA station records, a temperature plot, and the actual observations behind the display.

Rainshine showing recorded weather for Dayton, Ohio

Install and run

Python 3.11 or newer is required. Tkinter normally ships with the Windows and macOS installers from python.org. On Debian/Ubuntu, install python3-tk.

From a checkout of this repository, on Windows with Python 3.14:

py -3.14 -m pip install -e .
py -3.14 -m rainshine

On macOS or Linux:

python3 -m venv .venv
.venv/bin/python -m pip install -e .
.venv/bin/python -m rainshine

After installation, rainshine also opens the GUI. rainshine-gui is available as a Windows GUI entry point. No API key or account is required.

Use

  1. Choose a month, day, and year. The selectable range is January 1, 1989 through December 31, 2032. The day list adjusts for each month and leap year.
  2. Choose a site. Type part of a city or venue name to narrow the dropdown.
  3. Select Show weather. Rainshine keeps the window responsive while it downloads the required records. The first lookup can take longer because NOAA distributes subdaily data as station-year files.
  4. Switch between Fahrenheit/inches and Celsius/millimeters. Recorded readings shows actual report times; Sources & notes includes station identifiers, distances, download times, flags, gaps, and source URLs.
  5. Use Copy summary or Save JSON to keep a result and its provenance.

The version is visible in the title bar. Downloads are cached in the user's local cache directory, outside the installed package. Cancellation stops the active lookup without freezing the window. Previously downloaded observations can be displayed offline; an expired saved copy is labelled if NOAA cannot be refreshed.

What the display means

  • Daily cards use a GHCN-daily station record. The closest documented candidate with high, low, and precipitation is preferred; when no candidate has all three, the most complete available record is shown. Station identity and distance remain visible. Missing values stay empty; trace precipitation remains a trace. NOAA's presumed-zero precipitation and failed-quality values are excluded.
  • Through the day uses GHCN-hourly observations from the nearest documented candidate with records on the requested local calendar day. Reported UTC timestamps are converted using the location's historical timezone rules. A local day can therefore contain 23 or 25 hours. Points are recorded temperatures; gaps longer than three hours remain disconnected.
  • Daily station reporting periods can end at an observation time instead of midnight. A daily record and a local calendar-day plot can cover different periods and may come from different nearby stations. Both sources are shown.
  • Numeric source-specific quality codes are decoded separately. For example, GHCN-hourly quality code 5 is acceptable for some sources and means removed for others. Explicit estimated subdaily values are excluded.
  • Sky descriptions appear only when an explicit recognized ICAO cloud label is present. Rainshine does not infer clear skies from missing cloud data.
  • Future dates stay selectable and return No recorded weather yet. Other unavailable dates return an honest missing-record message. Rainshine does not substitute forecasts, climate normals, or reanalysis estimates.

Locations and source data

The packaged catalog is derived from the previously researched Telegraphy location/station lookup. It includes all 238 settings, candidate NOAA stations, coordinates, timezones, and inventory intervals. Venue coordinates and distances are approximate. This is a documented candidate set, rather than an exhaustive search of every sensor. Sites remain selectable for every supported date, regardless of the venue's opening year.

NOAA data are retrieved when requested, not bundled with the application. Inventories are hints; the actual day must contain usable observations. Dataset availability and station histories vary. For details and attribution, see DATA_SOURCES.md.

Headless access

rainshine --list-sites
rainshine --date 2010-02-06 --site "Dayton, OH, USA"
rainshine --version

The date/site command prints JSON in native metric units with source URLs and flags. It uses the same service as the GUI. A Python caller can use it directly:

from datetime import date
from rainshine.service import WeatherService

report = WeatherService().fetch("Dayton, OH, USA", date(2010, 2, 6))
data = report.to_dict()

Development

The application uses the Python standard library. Windows installs the pinned tzdata dependency for IANA timezones. Build requirements are also pinned.

python -m pip install -e .
python -m unittest discover -s tests -v

GUI tests automatically skip without a display. Under a Linux virtual display, run the same command with DISPLAY set. The test suite does not require a NOAA connection; parsers, date boundaries, quality codes, fallback selection, future dates, cache recovery, exports, and GUI interactions use controlled fixtures.

To measure coverage from the checkout, install the hash-verified tooling and use an editable installation so reports reference the source files:

python -m pip install --require-hashes --only-binary :all: -r requirements-coverage.lock
python -m pip install --no-index --no-deps --no-build-isolation --only-binary :all: -e .
python -m coverage run -m unittest discover -s tests -v
python -m coverage report
python -m coverage xml

On headless Linux, prefix the coverage test command with xvfb-run -a to include GUI tests. The SonarQube workflow does this before importing coverage.xml. Generated coverage files are ignored by Git.

Licensed under the existing MIT license.

Metadata

Release files for rainshine 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rainshine 0.1.2
File Size Uploaded Provenance
rainshine-0.1.2.tar.gz 369.5 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for rainshine 0.1.2
File Interpreter ABI Platform
rainshine-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 655.5 kB

Release files / rainshine-0.1.2.tar.gz

Download URL rainshine-0.1.2.tar.gz
Size 369.5 kB
Tags Source
SHA-256 checksum
How to use checksums
876b1e11c4bfc432cc2b86af9c70cc3ca386a27c8008a4f8679e0afab1048dda
BLAKE2b-256 checksum
How to use checksums
6029a28f15add0277070a70708b53919a0a99ee41566d0d822e7a2031ef61178
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / rainshine-0.1.2-py3-none-any.whl

Download URL rainshine-0.1.2-py3-none-any.whl
Size 286.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d82fcc88be949802a21d773f83edf88b98bf47dd1805f1bd9e74254880f27736
BLAKE2b-256 checksum
How to use checksums
5b61320df3e3b5663fcb8d76a24744bdaf72e4e8a9e9eb76c092eba94a6ba9a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Security for rainshine 0.1.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for rainshine-0.1.2.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page