Skip to main content

Lookup dates for special events (Super Bowl, Oscars, ...) using Wikidata as the source of truth.

Project description

special-days

tests PyPI

Lookup dates for special events: Super Bowl Sunday, Oscars night, World Series Game 7, NCAA championship, etc. Data is sourced from Wikidata, so it doesn't go stale.

Zero runtime dependencies — only the Python standard library.

Status

Alpha. Currently supports: Super Bowl, Academy Awards (Oscars). More events to come.

Install

pip install special-days

Use

Two APIs over the same data. Pick whichever fits your question.

Year-keyed (planner-style)

from datetime import date
from special_days import super_bowl

super_bowl.date(2025)
# datetime.date(2025, 2, 9)

super_bowl.is_super_bowl_sunday(date(2025, 2, 9))
# True

super_bowl.all_known()
# {1967: date(1967, 1, 15), ..., 2026: date(2026, 2, 8)}

Date-keyed (holidays-compatible)

A dict-like class keyed by datetime.date, lazy on construction — only years you actually query get loaded.

from datetime import date
from special_days import SuperBowl, SpecialDays, union

sb = SuperBowl()
date(2025, 2, 9) in sb           # True
sb[date(2025, 2, 9)]             # 'Super Bowl'
sb.get_list(date(2025, 2, 9))    # ['Super Bowl']

# eager mode, like holidays.US(years=2025)
SuperBowl(years=[2024, 2025])

# edition-numbered labels for display strings
SuperBowl(label_with_edition=True)[date(2025, 2, 9)]    # 'Super Bowl LIX'

Compose with the holidays package via union(...), preserving laziness on both sides:

import holidays
from special_days import SpecialDays, union

combined = union(holidays.US(), SpecialDays())   # all known events
combined.get_list(date(2025, 2, 9))    # ['Super Bowl']
combined.get_list(date(2025, 3, 2))    # ['Academy Awards']
combined.get_list(date(2025, 7, 4))    # ['Independence Day']

SpecialDays(events=...) accepts registered string names ("super_bowl", "oscars"), event classes (SuperBowl, Oscars), or pre-built instances. With no argument it includes everything the package ships.

Far-future years

A snapshot through Super Bowl LX (Feb 8, 2026) ships with the package, so lookups for known years work offline. Asking for an unknown year transparently refreshes from Wikidata:

super_bowl.date(2035)   # hits Wikidata, caches the result

Disable the network fallback explicitly if you need it:

super_bowl.date(2035, allow_network=False)   # raises KeyError

Force a refresh:

super_bowl.refresh()   # re-fetch everything, update local cache

Why Wikidata?

  • Structured. Each Super Bowl has a stable Q-ID with a "point in time" property. We query that property directly — no HTML scraping, no infobox parsing.
  • Long-lived. Wikidata has been stable since 2012 and is increasingly the upstream source for Wikipedia infoboxes.
  • Public, no auth. No API keys, no signup, generous rate limits for conservative use like ours.

The package ships an offline snapshot so first use doesn't require network, and degrades gracefully when Wikidata is unreachable.

Cache

Refreshed data is cached at $XDG_CACHE_HOME/special-days/ (or ~/.cache/special-days/ on most systems). Safe to delete; it will be repopulated.

Tests

make venv install hooks        # one-time setup (venv, dev install, pre-commit)
make test                      # unit tests (mocked HTTP) — fast, always run
make test-live                 # opt-in: hits the real Wikidata SPARQL endpoint

The live tests exist precisely to catch the case where Wikidata reshapes its data and our SPARQL query stops returning the right items. If they fail, update EVENT_DATES_QUERY in src/special_days/_wikidata.py and cut a new release.

Maintenance

To regenerate every shipped snapshot from current Wikidata data:

make snapshots-live

make snapshots (no -live) writes embedded hand-curated lists where they exist — use this if Wikidata is wrong about a specific date and you want to ship a correction. Per-event targets: make snapshot-super-bowl, make snapshot-super-bowl-live, make snapshot-oscars, make snapshot-oscars-live.

License

MIT

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

special_days-0.2.3.tar.gz (23.0 kB view details)

Uploaded Source

Built Distribution

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

special_days-0.2.3-py3-none-any.whl (17.7 kB view details)

Uploaded Python 3

File details

Details for the file special_days-0.2.3.tar.gz.

File metadata

  • Download URL: special_days-0.2.3.tar.gz
  • Upload date:
  • Size: 23.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for special_days-0.2.3.tar.gz
Algorithm Hash digest
SHA256 883c3bef04fa851bd86bbd1b3ef7dd7f53f4795d7b046ac81dc0d354d18bb656
MD5 68d1e478642f3df3ee3bd07290b7245f
BLAKE2b-256 21b4ff727543d4f53a57fb9abc7dc5d1ae21aa2a00d520923413b8ff8ec5ab61

See more details on using hashes here.

Provenance

The following attestation bundles were made for special_days-0.2.3.tar.gz:

Publisher: release.yml on stringertheory/special-days

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file special_days-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: special_days-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 17.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for special_days-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 588bc584011c468a7403b0099a2e9b35df43159aaf7d8acbada891741e55392b
MD5 a16c575c3a392264e5a6ff3f7af0d138
BLAKE2b-256 e89d50e1a51762628302cacc47918cecd4ce5e2f90a4ddd88360a38e2ed7dd1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for special_days-0.2.3-py3-none-any.whl:

Publisher: release.yml on stringertheory/special-days

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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