Update dependency word_search_generator to ~=5.1.0 #249

Merged
tyler merged 1 commit from renovate/word_search_generator-5.x into dev 2026-04-11 09:14:13 -07:00
Collaborator

This PR contains the following updates:

Package Change Age Confidence
word_search_generator (changelog) ~=5.0.0~=5.1.0 age confidence

Release Notes

joshbduncan/word-search-generator (word_search_generator)

v5.1.0

Compare Source

Added
  • ClassVar annotations to all unannotated class-level attributes across Mask, Game, WordSearch, and WordSearchFormatter to satisfy ty's reportUnannotatedClassAttribute rule
  • Type annotations for all argparse.Action.__call__() overrides in cli.py (parser, namespace, values: Any, option_string, -> None)
  • Return type -> None on exception __init__ methods in Game (EmptyPuzzleError, MissingGeneratorError, MissingFormatterError) and Generator (EmptyAlphabetError, WordFitError)
  • Full type annotations on the retry() decorator and its inner decorator/wrapper functions in generator.py
  • Traversable type annotation for the file_path parameter of _load_word_list() in words.py
  • -> None return type on Word.remove_from_puzzle()
  • bool type and -> str return type on WordSearchFormatter.show()
  • Console type annotation for WordSearchFormatter.CONSOLE class attribute (imported under TYPE_CHECKING)
Changed
  • Minimum required Python version bumped from 3.11 to 3.12; updated pyproject.toml, uv.lock, and AGENTS.md accordingly
  • Replaced mypy with ty as the sole type checker; removed mypy from Makefile typing and clean targets and updated AGENTS.md
  • DEFAULT_GENERATOR, DEFAULT_FORMATTER, and DEFAULT_VALIDATORS in Game wrapped with ClassVar; overrides in WordSearch use matching base-class types to preserve ClassVar invariance
  • Callable import in generator.py moved under TYPE_CHECKING (file already uses from __future__ import annotations)
  • EmptyAlphabetError.__init__ message parameter given explicit str type annotation
  • Migrated type: ignore suppression comments in tests and ipython_config.py to ty:ignore syntax
  • Dependency versions updated in uv.lock (attrs 25.4.0 → 26.1.0, charset-normalizer, and others)
  • Comprehensive Google-style docstrings to WordSearch class methods (show(), save(), __eq__(), __repr__()) with detailed parameter descriptions, usage examples, and exception documentation
  • Comprehensive docstrings for core module
  • Comprehensive docstrings for cli module including module docstring, all argparse.Action subclasses, and all functions
  • Comprehensive docstrings for word_search module: module docstrings for _formatter.py, _generator.py, and word_search.py; class docstrings for WordSearchFormatter and WordSearch; full Args/Returns/Raises on all WordSearchFormatter methods (show(), save(), write_csv_file(), write_json_file(), write_pdf_file(), hide_filler_characters()) and all module-level PDF helpers (draw_page_title(), draw_puzzle(), highlight_solution(), draw_word_list(), draw_puzzle_key(), draw_puzzle_page()); full Args/Returns/Raises on all WordSearchGenerator methods (generate(), no_duped_words(), capture_fragments(), test_a_fit(), find_a_fit(), fill_words(), try_to_fit_word(), fill_blanks()); expanded WordSearch.__init__() and fixed secret_directions setter (wrong arg name) and random_words() (placeholder _description_ and wrong constant names in Raises)
  • Comprehensive docstrings for mask module including Mask.show(), Mask.__repr__(), CompoundMask.generate(), CompoundMask._apply_mask(), Polygon.split_points, RegularPolygon.generate(), RegularPolygon.cos_sin_from_degrees(), Star.generate(), and all concrete shape generate() overrides (Club, Donut, Fish, Flower, Heart, Spade, Tree, Square, Oval) plus Donut.calculate_golden_donut_ratio()
  • Simplified Game.__repr__() to focus on core puzzle characteristics (words, level, size) that define puzzle identity according to __eq__. Removed require_all_words and implementation details like generator/formatter for cleaner, more maintainable output
  • Moved datetime import in cli.main() from lazy inline import to top-level with other stdlib imports
  • Renamed format variable in cli.main() to export_format to avoid shadowing the format builtin
  • Enabled Ruff docstring code formatting to automatically reformat Python code examples in docstrings
  • Configured docstring code snippets to use 88-character line length for consistency
  • Consolidated Ruff linting rules by moving extend-select rules directly into select array
  • Replaced mypy with ty for type checking across the project
  • Updated copyright year to 2026 in LICENSE and package files
  • Updated target Python version from 3.10 to 3.12 in Ruff configuration
  • Switched TypeAlias annotation to the type keyword
    • Changed all x = WordSet() to x: WordSet = OrderedSet()
  • Project dependencies updated to latest releases
    -fpdf2 2.8.7
    -pillow 12.2.0
    -rich 14.3.3
    -ordered-set 4.1.0
Fixed
  • Replaced game.placed_secret_words # type:ignore [attr-defined] in WordSearchFormatter.show() with a proper hasattr() guard, eliminating the type suppression comment and making the check safe at runtime
  • Stale comment in cli.main() referencing non-existent --random-from flag, updated to accurately describe --theme dependency on --random
  • Replaced assert mask.bounding_box in cli.preview_masks() with an explicit guard that warns and skips the mask, preventing silent failure when running with -O
  • Added per-file ignore rules for E402 in __init__.py files and TCH004 in bitmap.py
  • Cleaned up type ignore comments in mask tests for better code clarity
  • Type checking error in WordSearchGenerator.find_a_fit() where hasattr() assertions for secret_directions caused ~AlwaysFalsy type inference issues. Replaced with getattr() pattern for proper type narrowing
  • Updated test_repr to test repr informativeness and object recreation without relying on eval() magic
  • Updated Pillow Image.Image.getdata to Image.Image.get_flattened_data: Image.Image.getdata is deprecated and will be removed in Pillow 14 (2027-10-15).

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [word_search_generator](https://github.com/joshbduncan/word-search-generator) ([changelog](https://github.com/joshbduncan/word-search-generator/blob/main/CHANGELOG.md)) | `~=5.0.0` → `~=5.1.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/word-search-generator/5.1.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/word-search-generator/5.0.0/5.1.0?slim=true) | --- ### Release Notes <details> <summary>joshbduncan/word-search-generator (word_search_generator)</summary> ### [`v5.1.0`](https://github.com/joshbduncan/word-search-generator/blob/HEAD/CHANGELOG.md#510-2026-04-10) [Compare Source](https://github.com/joshbduncan/word-search-generator/compare/v5.0.0...v5.1.0) ##### Added - `ClassVar` annotations to all unannotated class-level attributes across `Mask`, `Game`, `WordSearch`, and `WordSearchFormatter` to satisfy `ty`'s `reportUnannotatedClassAttribute` rule - Type annotations for all `argparse.Action.__call__()` overrides in `cli.py` (`parser`, `namespace`, `values: Any`, `option_string`, `-> None`) - Return type `-> None` on exception `__init__` methods in `Game` (`EmptyPuzzleError`, `MissingGeneratorError`, `MissingFormatterError`) and `Generator` (`EmptyAlphabetError`, `WordFitError`) - Full type annotations on the `retry()` decorator and its inner `decorator`/`wrapper` functions in `generator.py` - `Traversable` type annotation for the `file_path` parameter of `_load_word_list()` in `words.py` - `-> None` return type on `Word.remove_from_puzzle()` - `bool` type and `-> str` return type on `WordSearchFormatter.show()` - `Console` type annotation for `WordSearchFormatter.CONSOLE` class attribute (imported under `TYPE_CHECKING`) ##### Changed - Minimum required Python version bumped from 3.11 to 3.12; updated `pyproject.toml`, `uv.lock`, and `AGENTS.md` accordingly - Replaced `mypy` with `ty` as the sole type checker; removed `mypy` from `Makefile` `typing` and `clean` targets and updated `AGENTS.md` - `DEFAULT_GENERATOR`, `DEFAULT_FORMATTER`, and `DEFAULT_VALIDATORS` in `Game` wrapped with `ClassVar`; overrides in `WordSearch` use matching base-class types to preserve `ClassVar` invariance - `Callable` import in `generator.py` moved under `TYPE_CHECKING` (file already uses `from __future__ import annotations`) - `EmptyAlphabetError.__init__` `message` parameter given explicit `str` type annotation - Migrated `type: ignore` suppression comments in tests and `ipython_config.py` to `ty:ignore` syntax - Dependency versions updated in `uv.lock` (attrs 25.4.0 → 26.1.0, charset-normalizer, and others) - Comprehensive Google-style docstrings to `WordSearch` class methods (`show()`, `save()`, `__eq__()`, `__repr__()`) with detailed parameter descriptions, usage examples, and exception documentation - Comprehensive docstrings for core module - Comprehensive docstrings for `cli` module including module docstring, all `argparse.Action` subclasses, and all functions - Comprehensive docstrings for `word_search` module: module docstrings for `_formatter.py`, `_generator.py`, and `word_search.py`; class docstrings for `WordSearchFormatter` and `WordSearch`; full Args/Returns/Raises on all `WordSearchFormatter` methods (`show()`, `save()`, `write_csv_file()`, `write_json_file()`, `write_pdf_file()`, `hide_filler_characters()`) and all module-level PDF helpers (`draw_page_title()`, `draw_puzzle()`, `highlight_solution()`, `draw_word_list()`, `draw_puzzle_key()`, `draw_puzzle_page()`); full Args/Returns/Raises on all `WordSearchGenerator` methods (`generate()`, `no_duped_words()`, `capture_fragments()`, `test_a_fit()`, `find_a_fit()`, `fill_words()`, `try_to_fit_word()`, `fill_blanks()`); expanded `WordSearch.__init__()` and fixed `secret_directions` setter (wrong arg name) and `random_words()` (placeholder `_description_` and wrong constant names in Raises) - Comprehensive docstrings for `mask` module including `Mask.show()`, `Mask.__repr__()`, `CompoundMask.generate()`, `CompoundMask._apply_mask()`, `Polygon.split_points`, `RegularPolygon.generate()`, `RegularPolygon.cos_sin_from_degrees()`, `Star.generate()`, and all concrete shape `generate()` overrides (`Club`, `Donut`, `Fish`, `Flower`, `Heart`, `Spade`, `Tree`, `Square`, `Oval`) plus `Donut.calculate_golden_donut_ratio()` - Simplified `Game.__repr__()` to focus on core puzzle characteristics (words, level, size) that define puzzle identity according to `__eq__`. Removed `require_all_words` and implementation details like generator/formatter for cleaner, more maintainable output - Moved `datetime` import in `cli.main()` from lazy inline import to top-level with other stdlib imports - Renamed `format` variable in `cli.main()` to `export_format` to avoid shadowing the `format` builtin - Enabled Ruff docstring code formatting to automatically reformat Python code examples in docstrings - Configured docstring code snippets to use 88-character line length for consistency - Consolidated Ruff linting rules by moving `extend-select` rules directly into `select` array - Replaced mypy with `ty` for type checking across the project - Updated copyright year to 2026 in LICENSE and package files - Updated target Python version from 3.10 to 3.12 in Ruff configuration - Switched `TypeAlias` annotation to the `type` keyword - Changed all `x = WordSet()` to `x: WordSet = OrderedSet()` - Project dependencies updated to latest releases -fpdf2 2.8.7 -pillow 12.2.0 -rich 14.3.3 -ordered-set 4.1.0 ##### Fixed - Replaced `game.placed_secret_words # type:ignore [attr-defined]` in `WordSearchFormatter.show()` with a proper `hasattr()` guard, eliminating the type suppression comment and making the check safe at runtime - Stale comment in `cli.main()` referencing non-existent `--random-from` flag, updated to accurately describe `--theme` dependency on `--random` - Replaced `assert mask.bounding_box` in `cli.preview_masks()` with an explicit guard that warns and skips the mask, preventing silent failure when running with `-O` - Added per-file ignore rules for `E402` in `__init__.py` files and `TCH004` in `bitmap.py` - Cleaned up type ignore comments in mask tests for better code clarity - Type checking error in `WordSearchGenerator.find_a_fit()` where `hasattr()` assertions for `secret_directions` caused `~AlwaysFalsy` type inference issues. Replaced with `getattr()` pattern for proper type narrowing - Updated `test_repr` to test repr informativeness and object recreation without relying on `eval()` magic - Updated Pillow `Image.Image.getdata` to `Image.Image.get_flattened_data`: Image.Image.getdata is deprecated and will be removed in Pillow 14 (2027-10-15). </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMTAuMTQiLCJ1cGRhdGVkSW5WZXIiOiI0My4xMTAuMTQiLCJ0YXJnZXRCcmFuY2giOiJkZXYiLCJsYWJlbHMiOltdfQ==-->
Update dependency word_search_generator to ~=5.1.0
All checks were successful
Tests / test (pull_request) Successful in 11m10s
2bfa05e6a8
renovate-bot scheduled this pull request to auto merge when all checks succeed 2026-04-11 00:03:23 -07:00
tyler deleted branch renovate/word_search_generator-5.x 2026-04-11 09:14:22 -07:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
tyler/dailySummaryEmail!249
No description provided.