Python packages / tossd-reader / How-to guides
Work offline and manage the cache
Prime the local cache while connected, then switch tossd-reader into offline mode so get_tossd and get_vintages serve from disk without requiring network access.
Prime the cache while connected
Fetch every required year before disconnecting. Each requested year downloads once and caches locally.
import tossd_reader as tossd
tossd.get_tossd(years=range(2019, 2025))
All six published years together cache to about 0.45 GB on disk.
Enable offline mode
Enable offline mode for the running session or across the shell environment.
import tossd_reader as tossd
tossd.set_offline(True)
export TOSSD_READER_OFFLINE=1
Recognised truthy values for the environment variable are 1, true, and yes, case-insensitive; 0, false, no, and unset all leave offline mode off. set_offline(True) and set_offline(False) override the environment variable for the running process. set_offline(None) removes the override and resumes reading the environment variable.
Offline query behaviour
With a year already cached, get_tossd returns the local vintage and emits a warning that it is serving from disk.
tossd.set_offline(True)
df = tossd.get_tossd(years=2024)
UserWarning: Offline mode is active (tossd_reader.config.set_offline(False), or the TOSSD_READER_OFFLINE env var, would allow network access); serving the cached 2024 vintage retrieved 2026-08-28T19:32:28.617740+00:00 (etag "69e6ac8d-5728379").
Requesting an unprimed year raises TossdNetworkError. The message names the resolved cache directory, shown below as <your cache directory>.
tossd.get_tossd(years=2010)
TossdNetworkError: Cannot fetch 2010: offline mode is active (tossd_reader.config.set_offline(False), or the TOSSD_READER_OFFLINE env var, would allow network access), and no cached vintage for 2010 exists in <your cache directory>.
See Cache location and bounds for default platform paths.
Refresh behaviour in offline mode
Passing refresh=True requires network connectivity to check for updated vintages. Combining refresh=True with offline mode raises ValueError immediately.
tossd.get_tossd(years=2024, refresh=True)
ValueError: get_tossd(refresh=True) conflicts with offline mode (config.get_offline() is True): a forced refresh needs the network. Call tossd_reader.config.set_offline(False) first, or omit refresh=True.
The same conflict occurs with get_tossd_raw, export, and get_vintages whenever refresh=True and offline mode is active.
Inspect cached and live vintages
cache_info() lists every locally cached vintage, with one row per download. A re-downloaded or republished year generates multiple rows.
tossd.cache_info().drop(columns=["path"])
year etag retrieved_at downloaded_at size_bytes
0 2019 "69e6ac86-347a653" 2026-08-28T21:14:14.414671+00:00 2026-09-02 08:05:04.508371+00:00 55027283
1 2021 "69e6ac8b-4112f49" 2026-08-28T21:14:42.382179+00:00 2026-08-28 21:14:42.356395+00:00 68235081
2 2020 "69e6ac8a-3c90446" 2026-08-28T21:14:28.358434+00:00 2026-08-28 21:14:28.331745+00:00 63505478
3 2022 "69e6ac8b-4e95ca1" 2026-08-28T21:14:57.492221+00:00 2026-08-28 21:14:57.461650+00:00 82402465
4 2024 "69e6ac8d-5728379" 2026-08-28T19:32:28.617740+00:00 2026-08-28 19:32:28.582136+00:00 91390841
5 2023 "69e6ac8c-56469db" 2026-08-28T21:15:12.643113+00:00 2026-08-28 21:15:12.608318+00:00 90466779
get_vintages() reports live vintages published on the remote host, with one row per year.
tossd.get_vintages()
year url etag last_modified size_bytes
0 2019 https://tossd.online/tossddata_2019.parquet "347a653-64fec0e08ffa0" Mon, 20 Apr 2026 22:45:26 GMT 55027283
1 2020 https://tossd.online/tossddata_2020.parquet "3c90446-64fec0e456c55" Mon, 20 Apr 2026 22:45:30 GMT 63505478
2 2021 https://tossd.online/tossddata_2021.parquet "4112f49-64fec0e4f7e73" Mon, 20 Apr 2026 22:45:31 GMT 68235081
3 2022 https://tossd.online/tossddata_2022.parquet "4e95ca1-64fec0e5ae851" Mon, 20 Apr 2026 22:45:31 GMT 82402465
4 2023 https://tossd.online/tossddata_2023.parquet "56469db-64fec0e66fe0f" Mon, 20 Apr 2026 22:45:32 GMT 90466779
5 2024 https://tossd.online/tossddata_2024.parquet "5728379-64fec0e73236d" Mon, 20 Apr 2026 22:45:33 GMT 91390841
In offline mode or when the publisher is unreachable, get_vintages() falls back to listing locally cached vintages.
tossd.get_vintages()
UserWarning: Offline mode is active (config.get_offline() is True); listing vintages from the local cache instead of a live discovery sweep (last_modified is unavailable this way).
year url etag last_modified size_bytes
0 2019 https://tossd.online/tossddata_2019.parquet "69e6ac86-347a653" None 55027283
...
The last_modified field contains None in fallback mode because that metadata is populated directly from the publisher's HTTP response headers.
Free up cache space
clear_cache() returns the number of entries removed. A default call without arguments removes superseded vintages that a newer download has replaced.
tossd.clear_cache()
0
On a cache holding one vintage per year, nothing is superseded, so a default clear_cache() call removes 0 entries. The keep_latest=True setting protects each year's newest vintage, including when filtering with years= or before=.
tossd.clear_cache(keep_latest=False)
6
len(tossd.cache_info())
0
Setting keep_latest=False without other filters empties the entire cache. Provide years= or before= to remove targeted subsets.
tossd.clear_cache(years=2019)
tossd.clear_cache(before="2026-01-01")
years= accepts a single year or an iterable of years. before= accepts a date, a datetime, or an ISO 8601 string, treating naive timestamps without timezone information as UTC. keep_latest defaults to True in every call. Set keep_latest=False to remove the latest matching vintage as well.
Verify it worked
Confirm that every primed year exists in the cache. If you ran clear_cache(keep_latest=False) above, prime the years again first.
sorted(tossd.cache_info()["year"])
[2019, 2020, 2021, 2022, 2023, 2024]
Querying a cached year while disconnected emits a UserWarning naming the local vintage, confirming that offline serving is active.
Troubleshooting
A query raises TossdNetworkError for a year expected to work offline. That year was not primed. Reconnect, prime it with get_tossd, and query again. See Prime the cache while connected.
TOSSD_READER_OFFLINE is set but offline mode is not active. The value is not one of the recognised truthy forms.
TOSSD_READER_OFFLINE=on python analysis.py
UserWarning: TOSSD_READER_OFFLINE='on' is not a recognized value; offline mode is NOT active. Recognised truthy values are 1, true, yes (case-insensitive).
Use 1, true, or yes instead.
See also
- Configuration reference for cache location defaults, the full warnings and errors table, and cache directory configuration.
- About reproducibility and the cache for tracking data vintages and ETags.