Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
[3.1.1] - 2026-02-25
Fixed
Fixed cached data mutation bug:
session_cachenow returnscopy.deepcopy()of cached results, preventing any call site from corrupting the cache. This fixes issues whereavailable_versions()(poppingthemeDataStatus) andavailable_indicators()(poppingdataAvailability) would corrupt cached data on subsequent callsRemoved redundant shallow copy in
_normalize_footnotes, now unnecessary with the deepcopy-based cacheFixed
available_geo_unitsusing substring matching (in) instead of equality (==) forgeoUnitTypefiltering
Added
Idempotency and cache-safety tests for
available_indicators,available_versions,available_geo_units,available_themes, andget_metadata
[3.1.0] - 2025-02-25
Added
In-memory session caching for API definition endpoints (
get_indicators,get_geo_units,get_versions,get_default_version) to avoid redundant network callsclear_cache()function to manually invalidate all cached data mid-sessionSingle retry with delay for transient network errors (timeouts, connection errors, 502/503/504 responses) with warning logs on retry attempts
set_max_retries()function to configure the number of retries for transient network errorspy.typedmarker for PEP 561 type checker support__all__to__init__.pyfor explicit public API surfaceLive API smoke tests (opt-in via
RUN_LIVE_SMOKE_TESTS=1)Full test coverage (100%) across all modules
Changed
Replaced library-level
StreamHandlerlogging with per-module loggers and aNullHandler, following Python library best practices. Logs are now silent by default; users can configure theunesco_readerlogger to enable output.Migrated dependency management from Poetry to uv
Replaced
poetry-corebuild backend withhatchlingConverted
pyproject.tomlfrom Poetry format to PEP 621Updated CI workflows to use
astral-sh/setup-uv@v4,actions/checkout@v4,actions/setup-python@v5,codecov/codecov-action@v5Expanded CI test matrix to include Python 3.13 and 3.14
Updated core data formatting for indicators GET endpoint for clarity:
removed new
last_data_updatecreation and instead edited thelastDataUpdatedirectly.renamed fields
maxandmintotimeLine_minandtimeLine_maxfor clarity.
Fixed
Corrected
TooManyRecordsErrormessage incore.get_datato reference the actual 100,000 record limit instead of 1,000Fixed
_normalize_footnotesmutating the original API response data in placeFixed
_check_for_too_many_recordscrashing on non-JSON or unexpected 400 responsesFixed O(n) per-item scan in
_convert_codesby using a reverse lookup set for code validationCorrected
geoUnitTypeerror message for consistent parameter naming using camel case
Removed
Removed
poetry.lock,requirements.txt, andrequirements-dev.txt(replaced byuv.lock)
[3.0.0] - 2024-11-22
Changed
Refactored package to support the UIS API
Removed support for bulk data files
[2.0.0] - 2024-04-08
Added
Support for Python 3.12
Removed
Support for Python < 3.10
[1.0.0] - 2024-04-04
Added
First stable release of the package
Caching to the UIS class to speed up data retrieval
Changed
User interface and backend following UIS website changes (breaking)
[0.3.1] - 2023-03-17
Fixed
Bug in data extraction to handle changes in UIS column naming conventions
[0.3.0] - 2023-01-28
Changed
Reformatted package to use Poetry for dependency management
Removed
linkandregionalfromuis_datasets.csvand from functions and methods returning info
[0.2.0] - 2023-01-25
Added
Tests to cover
commonanduismodules
Changed
Reformatted UIS module function to read CSVs from zip file
Reformatted UIS class attributes to be set in
__init__method
[0.1.2] - 2022-12-10
Fixed
Bug preventing regional data from being returned
Optimized metadata retrieval
[0.1.1] - 2022-12-09
Fixed
Typing bug in Python 3.8
[0.1.0] - 2022-12-09
Added
Initial release of
unesco_readeruismodule
[0.0.1] - 2022-09-16
Added
Initial release for testing