From 8bdd86aa70021636feaa471c0a1165dcfb1a2093 Mon Sep 17 00:00:00 2001 From: andyrids <52859097+andyrids@users.noreply.github.com> Date: Sat, 26 Sep 2026 21:04:23 +0100 Subject: [PATCH 1/4] chore: update dependencies --- CHANGELOG.md | 9 +++++++++ prek.toml | 4 +--- pyproject.toml | 24 ++++++++++++++++++++++-- uv.lock | 32 ++++++++++++++++---------------- 4 files changed, 48 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 24031b0..1a65165 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 > - `Fixed` for any bug fixes. > - `Security` in case of vulnerabilities. +## [Unreleased] + +### Changed + +- Package metadata improved for discoverability: a more descriptive summary, expanded + keywords (e.g. `radial-heatmap`, `time-series`, `visualization`) and the + `Topic :: Scientific/Engineering :: Visualization`, + `Topic :: Scientific/Engineering :: Information Analysis` and `Typing :: Typed` classifiers. + ## [0.3.0] - 2026-09-26 ### Breaking changes diff --git a/prek.toml b/prek.toml index dfe5160..b943aa0 100644 --- a/prek.toml +++ b/prek.toml @@ -2,7 +2,7 @@ [[repos]] repo = "https://gitlab.com/andyrids/pkgdx" -rev = "v0.3.0" +rev = "v0.4.0" [[repos.hooks]] id = "pkgdx-lint" @@ -27,8 +27,6 @@ repo = "local" id = "pkgdx-typing" name = "Typing [Mypy]" entry = "uv run pkgdx-typing-hook" -# workaround: pkgdx v0.3.0 ships this hook with no target (args = []) -args = ["src"] language = "system" types_or = ["python", "pyi"] exclude = "tests/" diff --git a/pyproject.toml b/pyproject.toml index 0d51a55..6937348 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "dataclocklib" -description = "Dataclock charts using matplotlib." +description = "Data clock charts (radial temporal heatmaps) for pandas time series, built on matplotlib." authors = [{name = "Andrew Ridyard", email = "developer.surface832@passmail.com"}] maintainers = [{name = "Andrew Ridyard", email = "developer.surface832@passmail.com"}] dynamic = ["version"] @@ -21,9 +21,29 @@ classifiers=[ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Topic :: Scientific/Engineering :: Information Analysis", + "Topic :: Scientific/Engineering :: Visualization", "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed", +] +keywords = [ + "dataclock", + "data-clock", + "data clock", + "matplotlib", + "pandas", + "visualisation", + "visualization", + "temporal", + "time-series", + "timeseries", + "polar-chart", + "radial-heatmap", + "circular-heatmap", + "calendar-heatmap", + "seasonality", + "cyclical-patterns", ] -keywords = ["matplotlib", "dataclock", "visualisation", "analysis"] dependencies = [ "matplotlib>=3.10", "pandas[parquet]>=3.0", diff --git a/uv.lock b/uv.lock index 8941ef5..74b3498 100644 --- a/uv.lock +++ b/uv.lock @@ -3,16 +3,16 @@ revision = 3 requires-python = ">=3.11" resolution-markers = [ "python_full_version >= '3.15' and sys_platform == 'win32'", - "python_full_version >= '3.15' and sys_platform == 'emscripten'", - "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.14.*' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", "python_full_version == '3.14.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version < '3.12' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", "python_full_version < '3.12' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] @@ -591,10 +591,10 @@ version = "1.4.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.15' and sys_platform == 'win32'", - "python_full_version >= '3.15' and sys_platform == 'emscripten'", - "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.14.*' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", "python_full_version == '3.14.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", @@ -1909,10 +1909,10 @@ version = "2.5.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.15' and sys_platform == 'win32'", - "python_full_version >= '3.15' and sys_platform == 'emscripten'", - "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.14.*' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", "python_full_version == '3.14.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", @@ -2202,7 +2202,7 @@ wheels = [ [[package]] name = "pkgdx" -version = "0.3.0" +version = "0.4.0" source = { registry = "https://gitlab.com/api/v4/projects/82928123/packages/pypi/simple" } dependencies = [ { name = "detect-secrets" }, @@ -2213,18 +2213,18 @@ dependencies = [ { name = "ruff" }, { name = "tomlkit" }, ] -sdist = { url = "https://gitlab.com/api/v4/projects/82928123/packages/pypi/files/989b8fdea213febc14d3c3d3c9ffde6295f8375338dcea97beb8f23fbd04217e/pkgdx-0.3.0.tar.gz", hash = "sha256:989b8fdea213febc14d3c3d3c9ffde6295f8375338dcea97beb8f23fbd04217e" } +sdist = { url = "https://gitlab.com/api/v4/projects/82928123/packages/pypi/files/cfc88ee952bb778fa2bbb266aed25c6a681862b69b0d865b37212f95a5bad352/pkgdx-0.4.0.tar.gz", hash = "sha256:cfc88ee952bb778fa2bbb266aed25c6a681862b69b0d865b37212f95a5bad352" } wheels = [ - { url = "https://gitlab.com/api/v4/projects/82928123/packages/pypi/files/898dc0007897f476ae037922c08d5ac96213bacdc8a52c333f9f9b47982f6c24/pkgdx-0.3.0-py3-none-any.whl", hash = "sha256:898dc0007897f476ae037922c08d5ac96213bacdc8a52c333f9f9b47982f6c24" }, + { url = "https://gitlab.com/api/v4/projects/82928123/packages/pypi/files/61a78d6b0eb64d9aae6bac41633f51909800a210800e9c5c2908729b00853546/pkgdx-0.4.0-py3-none-any.whl", hash = "sha256:61a78d6b0eb64d9aae6bac41633f51909800a210800e9c5c2908729b00853546" }, ] [[package]] name = "platformdirs" -version = "4.11.13" +version = "4.12.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/0e/7be2983c52622d6c0899300f760e31ba143355cedf1afcb3e65689d5ca85/platformdirs-4.11.13.tar.gz", hash = "sha256:6985eefdc2298693e4ce1fe124645524cb967428eb6384e0ce5b49767e7ea8ba", size = 40415, upload-time = "2026-09-25T04:44:25.484Z" } +sdist = { url = "https://files.pythonhosted.org/packages/23/4d/e78afe1b449720c481884ca0a2f960f85f9ffdaa34b2d127b5427422c564/platformdirs-4.12.0.tar.gz", hash = "sha256:095be5c143382b1bee917c4f3e9987a0d8d6a582261f1d061ad0c403b7695b5b", size = 58964, upload-time = "2026-09-26T15:26:00.937Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/a6/76a492f6a937e196641b3abd1588c504c71438e243daf1bebde4d3bb8ee9/platformdirs-4.11.13-py3-none-any.whl", hash = "sha256:228b2283af5c1f32673cdf55271216a52bbd8258cb31374e302ad7bd26cd7513", size = 25054, upload-time = "2026-09-25T04:44:23.975Z" }, + { url = "https://files.pythonhosted.org/packages/60/3a/723ad221b7fef91ccd947f9fddbe84d38fa573e2723317aaa67bfde41015/platformdirs-4.12.0-py3-none-any.whl", hash = "sha256:f6fb2960f2f2eb0870f820f7e49e49e6c0f0589c637f34d33b260b07591327c9", size = 32965, upload-time = "2026-09-26T15:25:59.496Z" }, ] [[package]] @@ -3161,10 +3161,10 @@ version = "9.1.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.15' and sys_platform == 'win32'", - "python_full_version >= '3.15' and sys_platform == 'emscripten'", - "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.14.*' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", "python_full_version == '3.14.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", From fbda23f68d8ab1253bf6c16c05789da943e4803a Mon Sep 17 00:00:00 2001 From: andyrids <52859097+andyrids@users.noreply.github.com> Date: Sat, 26 Sep 2026 21:11:29 +0100 Subject: [PATCH 2/4] fix: add type to exclude_patterns in docs/source/conf.py --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 325737a..f05fa35 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -34,7 +34,7 @@ # List of patterns, relative to source directory, that match files and # exclude_patterns; "_build", "Thumbs.db", ".DS_Store" -exclude_patterns = [] +exclude_patterns: list[str] = [] # autodoc: types are rendered in the parameter descriptions, not the signature autodoc_typehints = "description" From 85f4467a405887dce31c35e439d53221a02366f2 Mon Sep 17 00:00:00 2001 From: andyrids <52859097+andyrids@users.noreply.github.com> Date: Sat, 26 Sep 2026 21:36:59 +0100 Subject: [PATCH 3/4] feat: release 0.3.1 changes --- CHANGELOG.md | 10 +++++++--- docs/source/_templates/layout.html | 14 ++++++++++++++ docs/source/conf.py | 4 +++- 3 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 docs/source/_templates/layout.html diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a65165..4f0d3ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,14 +16,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 > - `Fixed` for any bug fixes. > - `Security` in case of vulnerabilities. -## [Unreleased] +## [0.3.1] ### Changed - Package metadata improved for discoverability: a more descriptive summary, expanded - keywords (e.g. `radial-heatmap`, `time-series`, `visualization`) and the + keywords (e.g. `radial-heatmap`, `time-series`, `visualization`) and the classifiers; `Topic :: Scientific/Engineering :: Visualization`, - `Topic :: Scientific/Engineering :: Information Analysis` and `Typing :: Typed` classifiers. + `Topic :: Scientific/Engineering :: Information Analysis` and `Typing :: Typed`. + +### Fixed + +- The documentation sidebar shows the package version again, below the project name. ## [0.3.0] - 2026-09-26 diff --git a/docs/source/_templates/layout.html b/docs/source/_templates/layout.html new file mode 100644 index 0000000..136ec29 --- /dev/null +++ b/docs/source/_templates/layout.html @@ -0,0 +1,14 @@ +{% extends "!layout.html" %} + +{% block sidebartitle %} + {%- set _logo_url = logo_url|default(pathto('_static/' + (logo or ""), 1)) %} + {%- set _root_doc = root_doc|default(master_doc) %} + + {% if not theme_logo_only %}{{ project }}{% endif %} + {%- if logo or logo_url %} + + {%- endif %} + +
{{ version }}
+ {%- include "searchbox.html" %} +{% endblock %} diff --git a/docs/source/conf.py b/docs/source/conf.py index f05fa35..38a78dc 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -36,6 +36,9 @@ # exclude_patterns; "_build", "Thumbs.db", ".DS_Store" exclude_patterns: list[str] = [] +# theme template overrides (e.g. version in the sidebar) +templates_path = ["_templates"] + # autodoc: types are rendered in the parameter descriptions, not the signature autodoc_typehints = "description" autodoc_member_order = "bysource" @@ -49,5 +52,4 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output html_theme = "sphinx_rtd_theme" -html_theme_options = {"version_selector": True} html_static_path = ["_static"] From caf865a924c8ff5c4d9e1452efc0e55405bf9d18 Mon Sep 17 00:00:00 2001 From: andyrids <52859097+andyrids@users.noreply.github.com> Date: Sun, 27 Sep 2026 16:46:24 +0100 Subject: [PATCH 4/4] chore: add release recipe to Justfile --- Justfile | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Justfile b/Justfile index 0e1bb39..fa79dfb 100644 --- a/Justfile +++ b/Justfile @@ -40,6 +40,17 @@ git-prune: symlink-agents: @uv run python -c "import pathlib; p=pathlib.Path('CLAUDE.md'); p.unlink(missing_ok=True); p.symlink_to('AGENTS.md')" +[doc("Bump version, tag & trigger release")] +[group("DEV")] +release PART: + git fetch --prune + git switch main && git pull + uv run run bump-my-version {{PART}} + git push --atomic origin main --follow-tags + git switch develop && git pull + git merge --ff-only main + git push origin develop + [doc("Build Sphinx HTML documentation (warnings treated as errors)")] [group("DOCS")] docs: