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¶
Added¶
Automatic semantic release workflow (
.github/workflows/release.yml) usingpython-semantic-releasev9 — parses Conventional Commit prefixes to determine version bump, updates all version locations, creates GitHub Release[tool.semantic_release]configuration inpyproject.tomlfor version bumping, tagging, and release creationPyPI version badge in README (auto-updates via shields.io)
Tests for malformed JSON and non-dict JSON API responses in
TestParseResponse
Changed¶
Replace hardcoded version assertion in
test_version_valuewith semver format regex checkReplace relative file links with absolute GitHub URLs in README and CONTRIBUTING to fix broken links on PyPI
Reformat README title heading
Update roadmap: mark v0.1.0 GitHub Release as complete, add semantic release as post-release item, expand “Future” section with HTTP client dependency evaluation
0.1.0 - 2026-04-11¶
Added¶
PyPI publish workflow (
.github/workflows/publish.yml) using GitHub Actions trusted publishing (OIDC) — triggers on GitHub Release creationDocumentation URL in
pyproject.tomlproject metadataFilter key validation on
Resource.list()andResource.paginate()— unknown keys raiseValueErrorwith the list of valid fields, validated against each resource’s Pydantic model“Development Commands” section in
CONTRIBUTING.mdwith lint, format, type check, test, coverage, and docs commands
Changed¶
Bump version to 0.1.0 — first public PyPI release
Update development status classifier from “Planning” to “Beta”
Update installation instructions in README and Sphinx docs to use PyPI (
pip install liquipydia)Update README status badge and label from “early development” to “beta”
Fixed¶
Harden response parsing and retry backoff logic in
LiquipediaClientValidate filter key format with regex before checking against model fields
Add rate limit delay (10s) between integration tests to prevent API throttling in CI
0.0.5 - 2026-04-10¶
Added¶
Integration test suite in
_tests/test_integration.pywith@pytest.mark.integrationmarker (auto-skips when no API key is available; resolves key fromLPDB_API_KEYenv var or.tokens/tokens.json)Sphinx + Furo documentation site in
_docs/sphinx/with Liquipedia-themed colors, autodoc API reference, getting-started guide, examples with output blocks, and changelog pageJinja2 template override for clickable author name in Furo footer
GitHub Pages deployment workflow (
.github/workflows/docs.yml, triggers on push tomain)LPDB_API_KEYsecret as env var in CI test job for integration testsSphinx copyright year update step in license workflow (renamed to “Update License & Copyright years”)
Documentation section in README linking to GitHub Pages site
Output blocks (
textcode fences) to code examples in README, getting-started, examples, and index pagesPost-release section in roadmap with conda-forge package goal
Changed¶
Bump version to 0.0.5
Switch documentation dependencies from mkdocs-material + mkdocstrings to Sphinx 9 + Furo + myst-parser + sphinx-autodoc-typehints + sphinx-copybutton + sphinx-autobuild
Update roadmap with completed v0.0.5 items
Fixed¶
Remove incorrect
endpointparameter fromResourceclass docstringArgs:section
0.0.4 - 2026-04-06¶
Added¶
Pydantic models for all 16 LPDB v3 data types in
_models.py:Broadcaster,Company,Datapoint,ExternalMediaLink,Match,Placement,Player,Series,SquadPlayer,StandingsEntry,StandingsTable,Team,TeamTemplate,TeamTemplateList,Tournament,TransferPrivate base classes:
_LpdbModel(common fields for standard endpoints) and_TeamTemplateBase(different field set for team template endpoints)Reusable type aliases via
Annotated+BeforeValidator:NullableDate,NullableDatetime,LpdbDictfor automatic conversion of LPDB null sentinels and empty dict placeholdersStandalone model usage:
Model.model_validate(record)on dicts fromApiResponse.resultTyped Models section in README with usage examples and LPDB quirk handling notes
Test suite for Pydantic models covering construction, date normalization, model-specific parsing, and exports
Changed¶
Bump version to 0.0.4
Re-export all 16 models from
__init__.pyand add to__all__Update Quick Start examples in README to demonstrate model validation with typed field access
Update roadmap with completed v0.0.4 items and checked off existing test milestones
Refactor
devdependency group to includetestgroup viainclude-groupinstead of duplicating packages
Fixed¶
Suppress false positive DeepSource warning on
Placementmodel
0.0.3 - 2026-04-06¶
Added¶
Resource layer: base
Resourceclass withlist()andpaginate()methods13 standard resource subclasses (one per LPDB endpoint: player, team, tournament, etc.)
MatchResourcesubclass withrawstreams/streamurlssupport (excluded from request whenFalse)TeamTemplateResourcestandalone class withget(wiki, template)for single template lookupsTeamTemplateListResourcestandalone class withlist(wiki, pagination)for template listingKeyword filters (
**filters: str) onlist()/paginate()auto-converted to LPDB conditions (e.g.name="Zen"→[[name::Zen]]), AND-joined with explicitconditionsOperator prefix support in keyword filters (
>,<,!)page_sizevalidation inpaginate()raisingValueErrorif< 1All 16 resources attached as typed attributes on
LiquipediaClientAvailable Resources table in README with all endpoints and notes
Test suite for resource layer, keyword filters, and client resource attributes
Changed¶
Bump version to 0.0.3
Rename
_get()→get()onLiquipediaClientto allow cross-module access from resourcesReplace low-level Quick Start examples in README with resource-based usage
Update roadmap with completed v0.0.3 items and full method signatures
Re-export
Resourceand all 16 subclasses from__init__.py
0.0.2 - 2026-04-05¶
Added¶
LiquipediaClientclass wrappinghttpx.Clientwith context manager and explicitclose()supportAPI key resolution from constructor parameter or
LIQUIPEDIA_API_KEYenvironment variableAutomatic request headers:
User-Agent,Accept-Encoding: gzip,Authorization_get()method with truncated exponential backoff on HTTP 429 (respectsRetry-Afterheader)paginate()public generator for automatic offset/limit iteration across API pagesResponse envelope parsing into
ApiResponsefrozen dataclass (result + warnings)Exception hierarchy:
LiquipediaError,AuthError,NotFoundError,RateLimitError,ApiErrorHTTP status code mapping to typed exceptions (403, 404, 429, body-level errors)
Test suite for client, exceptions, and response wrapper
Quick start example in README with
_get()andpaginate()usage
Changed¶
Bump version to 0.0.2
Update project structure in README to reflect new modules
Check off v0.0.2 items in roadmap
Document merge strategy and branch protection rules in CONTRIBUTING.md
Disable
RUF022ruff rule to preserve comment-grouped__all__entriesConvert test methods without
selfusage to@staticmethodAdd
skipcq: PY-W2000to__init__.pyre-exports (false positive: imports used via__all__)
0.0.1 - 2026-04-05¶
Added¶
Project scaffold:
pyproject.tomlwith hatchling build system, exact-pinned dependencies, and tool configliquipydiapackage with version metadata and PEP 561 type markerCI pipeline: ruff lint/format, mypy type checking, pytest with coverage and DeepSource reporting
CodeQL workflow for monthly Python security analysis
License year auto-update workflow
Issue templates for bug reports and feature requests
Pull request template with validation checklist
Dependabot config for monthly uv and GitHub Actions dependency updates
CONTRIBUTING.mdwith branch strategy, naming conventions, and PR guidelinesSECURITY.mdwith vulnerability reporting process and disclosure policyREADME.mdwith badges, API access section, installation instructions, and data license notice_docs/ROADMAP.mdwith versioned milestones (v0.0.1 → v0.1.0) and future scope.deepsource.tomlfor static analysis and test coverage reporting.gitattributeswith LF line ending normalizationCHANGELOG.md(this file)