Skip to main content

CHANGELOG.md

1# CHANGELOG
3## v34 - 2026-04-11
5Improve the URL-handling in `chives.fetch`; in particular improve the case where you call `fetch_url(url, params)` with a URL that already has some query parameters or a fragment.
7## v33 - 2026-04-10
9Remove the `fetch_image` function from `chives.fetch`; either use `fetch_url` or `download_image`.
11## v32 - 2026-04-01
13Add a `download_image` function to `chives.fetch`.
15## v31 - 2026-03-31
17Remove the `hyperlink` dependency.
19## v30 - 2026-03-30
21Add a `chives.fetch` package which has some helper functions for making HTTP requests using the standard library.
23## v29 - 2026-03-29
25Add a `chives.text` package which exports a `smartify()` function for applying SmartyPants-style formatting to a string -- adding curly quotes and smart dashes.
27## v28 - 2026-03-28
29Remove the httpx dependency in `chives.urls`.
31## v27 - 2026-02-28
33Don't reuse the browser fixture between tests.
35## v26 - 2026-02-28
37Extract the `browser` fixture as a standalone fixture rather than binding it to a class, so it can be reused across multiple test suites.
39## v25 - 2026-02-28
41Change the type of `StaticSiteTestSuite.pages_to_check` from `set` to `list` to ensure consistent ordering of parametrised tests.
43Fix a bug when testing URLs with query parameters.
45## v24 - 2026-02-28
47In `StaticSiteTestSuite`, add testing with [Playwright](https://playwright.dev) that checks static websites render correctly.
49**Breaking change:** the site root must now be specified as a classmethod `get_site_root()` rather than a `site_root` fixture.
51## v23 - 2026-02-20
53Change the format of `VideoEntity.subtitles` to be a list of `SubtitlesEntity`, so a single video can have multiple subtitles.
55## v22 - 2026-01-11
57Remove the `start_radio` parameter in `clean_youtube_url()`.
59## v21 - 2025-12-22
61Add a method `dates.now()` to return the current time in the timestamp used by all my static sites.
63## v20 - 2025-12-10
65Use concurrency in `test_no_videos_are_av1`, which can make it faster for
66larger media collections.
68## v19 - 2025-12-09
70Allow passing both `width` and `height` as part of `ThumbnailConfig`, to constrain a thumbnail to a bounding box.
72## v18 - 2025-12-08
74Expose `get_tint_colour()` as a public function from `chives.media`.
76## v17 - 2025-12-07
78Account for [EXIF orientation](https://alexwlchan.net/til/2024/photos-can-have-orientation-in-exif/) when getting the width/height of image entities.
80## v16 - 2025-12-06
82Don't require defining `list_tags_in_metadata()` in projects that don't use tags.
84## v15 - 2025-12-06
86Fix a bunch of lints from ruff; remove an unused dependency.
88## v14 - 2025-12-06
90Improve the error message on failed assertions in `StaticSiteTestSuite`.
92## v13 - 2025-12-06
94Mark a couple more folders/files as ignored in `StaticSiteTestSuite`.
96## v12 - 2025-12-06
98Add checks for fuzzy tag matching to `StaticSiteTestSuite`.
100## v11 - 2025-12-06
102Add a new class `StaticSiteTestSuite` which runs my standard set of tests for a static site, e.g. checking every file is saved, checking timestamps use the correct format.
104## v10 - 2025-12-05
106Add a new `is_url_safe()` function for checking if a path can be safely used in a URL.
108## v9 - 2025-12-05
110This adds three models to `chives.media`: `ImageEntity`, `VideoEntity`, and `ImageEntity`.
111These have all the information I need to show an image/video in a web page.
113It also includes functions `create_image_entity` and `create_video_entity` which construct instances of these models.
115## v8 - 2025-12-04
117Add the `is_mastodon_host()` function.
119## v7 - 2025-12-03
121Add the `parse_tumblr_post_url()` function.
123## v6 - 2025-12-03
125Add the `parse_mastodon_post_url()` function.
127## v5 - 2025-12-01
129When calling `reformat_date()`, ensure all dates are converted to UTC.
131## v4 - 2025-11-29
133Rename `chives.timestamps` to `chives.dates`.
135## v3 - 2025-11-29
137Add the `clean_youtube_url()` function and `urls` extra.
138Rearrange the package structure slightly, to allow optional dependencies.
140## v2 - 2025-11-28
142Add the `is_av1_video()` function for [detecting AV1-encoded videos](https://alexwlchan.net/2025/detecting-av1-videos/).
144## v1 - 2025-11-28
146Initial release. Included functions:
148* `date_matches_any_format`
149* `date_matches_format`
150* `find_all_dates`
151* `reformat_date`