Cache-write shape mismatches the TypedDict and callers mix .get() and
direct access, so the stricter type was providing false safety. Using
dict[str, dict] accurately reflects the actual runtime contract.
Co-Authored-By: Claude <noreply@anthropic.com>
Replace loose list[dict] annotations with concrete TypedDicts imported
from readme_parser so ty can verify call-site compatibility.
Co-Authored-By: Claude <noreply@anthropic.com>
client is the only non-first param and is always required, so the * separator
adds no clarity. Update the call site accordingly.
Co-Authored-By: Claude <noreply@anthropic.com>
Python 3.11 introduced datetime.UTC as a cleaner alias for
datetime.timezone.utc. Both build.py and fetch_github_stars.py
are updated to use the shorter form.
Co-Authored-By: Claude <noreply@anthropic.com>
State reset (current_group_name = None, current_group_cats = []) was
duplicated in both branches of the early-return guard. Move it after
the conditional so it runs exactly once regardless of path.
Co-Authored-By: Claude <noreply@anthropic.com>
Parse the # Sponsors heading in README.md into structured data and
render a dedicated sponsor band above the library index on the site.
Co-Authored-By: Claude <noreply@anthropic.com>
- Link awesome-python.com in sponsor descriptions
- Add 120-character limit for sponsor descriptions
- Reword Link Sponsor tier to clarify entry format
- Replace month-to-month wording with flexible term details
- Add payment methods (ACH/wire, PayPal)
- Add editorial reserve clause for sponsor content
Co-Authored-By: Claude <noreply@anthropic.com>
Lumibot is an actively maintained Python framework (1,333+ stars, MIT
license) for algorithmic trading backtesting and live deployment. It
supports stocks, options, crypto, futures, and forex across multiple
brokers. Repository is 3+ years old with consistent weekly activity.
Category: Hidden Gem — solves the real pain of running the same
strategy code in backtesting and production with multiple brokers.
https://github.com/Lumiwealth/lumibot
- Reword referrer list label and reorder entries
- Rename 'Past Sponsors' to 'Previously Sponsored By'
- Trim redundant word from closing sentence
Co-Authored-By: Claude <noreply@anthropic.com>
Add three tests against the real README: verify all entries have
non-empty names, valid http(s) URLs, and no broken markdown link
syntax (e.g. '[name(url)' missing the closing '](').
Co-Authored-By: Claude <noreply@anthropic.com>
Collapse the two-job workflow into one, set the github-pages
environment on the single job, and key the star-data cache by
date (YYYY-MM-DD) so it is shared across same-day runs instead
of being per-run-id. Also skip tests on scheduled runs and
validate JSON before serving it.
Co-Authored-By: Claude <noreply@anthropic.com>