Commit Graph

2316 Commits

Author SHA1 Message Date
Vinta Chen
f10337bb31 refactor(tests): modernize test_readme_parser to use pathlib.Path
Replace os.path.join + manual open() with Path(__file__).resolve().parents[2]
and Path.read_text() for locating and reading README.md.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 22:07:16 +08:00
Vinta Chen
92936964b6 refactor(readme_parser): fuse _parse_sponsor_item into single pass
Eliminate the redundant _find_link_deep precheck by merging the two
walks over inline.children into one loop that simultaneously locates
the link and records its top-level index.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 22:06:41 +08:00
Vinta Chen
420bf8cd9d refactor(readme_parser): collapse render_inline_html/text into _render_inline helper
Merge the two inline-renderer implementations into a single _render_inline(children, *, html) function that handles both output modes. The original public functions become one-line wrappers so all dispatch logic lives in one place. Also aligns html_inline handling: the html=True path now escapes the raw content instead of silently dropping it in the plain-text path.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 22:05:35 +08:00
Vinta Chen
0630ee973b refactor(build): flatten extract_entries and annotate result dict
Collapse the if-seen/else-new branches so the category/group/subcategory
merge logic runs once per entry unconditionally, appending to empty lists
on first sight instead of duplicating the append logic in the else branch.

Annotate seen and entries as dict[str, Any] so ty can resolve the mixed
value types (str, list, None) in each entry dict.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 22:04:14 +08:00
Vinta Chen
6ae7c89688 refactor: replace manual total_seconds()/3600 with timedelta comparison
Use timedelta(hours=CACHE_MAX_AGE_HOURS) so the cache-age check
reads at the intended hours unit directly, removing the conversion
arithmetic.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 22:02:14 +08:00
Vinta Chen
95115f7949 refactor(fetch_github_stars): replace manual slice loop with itertools.batched
Use itertools.batched (stdlib since Python 3.12, targeted by this project)
instead of manual range(0, N, BATCH_SIZE) slicing. Loosen fetch_batch,
build_graphql_query, and parse_graphql_response signatures from list[str]
to Sequence[str] since batched yields tuples.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 22:01:35 +08:00
Vinta Chen
39b65bc994 refactor(build): inline format_stars_short into its call site
The helper only appeared once and the logic is two lines, so the named
function added indirection without clarity. Removed the four dedicated
unit tests that covered the function directly.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 22:00:45 +08:00
Vinta Chen
85b55efb28 refactor(readme_parser): inline _is_leading_link at its call site
The helper was only called once and the bool(inline.children) guard
was redundant: first_link being non-None already implies inline.children
is non-empty.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 21:59:59 +08:00
Vinta Chen
486fbf2185 refactor(readme_parser): replace _find_first_link with _find_child(inline, "link")
The private helper duplicated _find_child with a hardcoded type filter.
Remove it and call the general helper directly at both call sites.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 21:59:16 +08:00
Vinta Chen
e0b0dc9c0a refactor(readme_parser): add _href helper to narrow attrGet return type
Extracts a _href(link) helper that returns link.attrGet('href') narrowed
to str (falling back to '') instead of the raw str|int|float|None union.
Replaces all four attrGet('href') or '' call sites with _href(), fixing
ty errors where the widened union leaked into TypedDict url fields.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 21:58:27 +08:00
Vinta Chen
7e7de19ef6 refactor(build): remove StarData TypedDict, loosen load_stars return to dict[str, dict]
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>
2026-04-19 21:57:30 +08:00
Vinta Chen
7f4a163534 refactor(build): tighten extract_entries parameter types to ParsedSection/ParsedGroup
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>
2026-04-19 21:56:46 +08:00
Vinta Chen
c85f81bb24 refactor(build): accept Path directly in build() signature
Remove internal str->Path conversion; callers and tests now pass
Path objects directly.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 21:56:06 +08:00
Vinta Chen
b9236c4925 refactor(fetch_github_stars): drop unnecessary keyword-only marker on fetch_batch
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>
2026-04-19 21:55:32 +08:00
Vinta Chen
a358d45ca4 refactor: use datetime.UTC alias instead of timezone.utc
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>
2026-04-19 21:54:55 +08:00
Vinta Chen
e47d229528 refactor(readme_parser): consolidate state reset to tail of flush_group
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>
2026-04-19 21:54:16 +08:00
Vinta Chen
b897676e01 refactor(fetch_github_stars): remove redundant early-return guard in build_graphql_query
The empty-parts check after the loop makes the upfront `if not repos: return ""` guard redundant.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 21:53:39 +08:00
Vinta Chen
a4b7fc6878 adjust css 2026-04-19 21:34:14 +08:00
Vinta Chen
774ab69bcd feat(website): add sponsors section parsed from README
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>
2026-04-19 21:10:50 +08:00
Vinta Chen
222f566aef Merge pull request #3075 from vinta/sponsor/pyr
Add sponsor: pyr
2026-04-19 20:07:41 +08:00
Vinta Chen
9290cfb930 add sponsor: pyr 2026-04-19 19:52:06 +08:00
Jinyang
f3ac16c77b Merge pull request #3035 from tdhopper/add-pydevtools 2026-04-19 09:45:26 +04:00
Jinyang
d7e6f1d54d Merge pull request #3070 from PsiACE/patch-1 2026-04-19 09:44:50 +04:00
Vinta Chen
ba96331a10 add back "jieba", it's still useful and works in Python 3.13 actually 2026-04-19 05:35:53 +08:00
Vinta Chen
5d4bfdd719 docs(SPONSORSHIP): flatten tier benefit lists, remove redundant subheadings
Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 05:30:37 +08:00
Vinta Chen
f6fdd6a553 docs(SPONSORSHIP): rename tiers to Headline Sponsor and Featured Sponsor
Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 05:19:25 +08:00
Vinta Chen
3af090973e docs(SPONSORSHIP): restructure Get Started as explicit checklist of required sponsor info
Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-19 05:01:38 +08:00
Vinta Chen
840e2555d6 docs: clarify sponsorship tiers, payment terms, and editorial policy
- 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>
2026-04-19 04:58:08 +08:00
Chojan Shang
2a347b1e87 Add bub framework to orchestration section 2026-04-19 00:14:13 +08:00
Jinyang
bec38b2e51 Merge pull request #3067 from shreya975/patch-1
Add ydata-profiling to data analysis tools list
2026-04-18 19:44:08 +04:00
Shreya Mahajan
04c3a63756 Fix typo in desbordante description 2026-04-18 19:27:12 +05:30
Shreya Mahajan
aabf43c281 Correct desbordante entry in README
Fixed a duplicate period in the desbordante link entry.
2026-04-18 19:14:56 +05:30
Shreya Mahajan
a467209839 Add data-profiling link and remove ydata-profiling 2026-04-18 12:58:43 +05:30
Shreya Mahajan
b3a00e0b9c Add ydata-profiling to data analysis tools list 2026-04-17 15:08:35 +05:30
Jinyang
c487e88103 Merge pull request #3066 from lundberg/patch-1
Add `respx` library to Mock section
2026-04-17 09:57:35 +04:00
Jonas Lundberg
64de7f4673 Add respx library to Mock section 2026-04-16 16:24:52 +02:00
Vinta Chen
a5a38f7e78 Merge pull request #3060 from vinta/dependabot/uv/pytest-9.0.3
chore(deps-dev): bump pytest from 9.0.2 to 9.0.3
2026-04-15 12:33:37 +08:00
Jinyang
64e74b99dc Merge pull request #3062 from RaghavChamadiya/add-repowise 2026-04-14 20:43:46 +04:00
RaghavChamadiya
d06ab9789c Add repowise to Code Analysis 2026-04-14 19:15:15 +05:30
dependabot[bot]
1843b8f323 chore(deps-dev): bump pytest from 9.0.2 to 9.0.3
Bumps [pytest](https://github.com/pytest-dev/pytest) from 9.0.2 to 9.0.3.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/9.0.2...9.0.3)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 9.0.3
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-14 03:02:59 +00:00
Jinyang
65f3649988 Merge pull request #3056 from ozeranskii/patch-1
Add httptap
2026-04-13 11:10:38 +04:00
Sergei Ozeranskii
985400cac3 Update README.md 2026-04-13 09:08:43 +02:00
Sergei Ozeranskii
f4201b85db Add httptap to Debugging Tools 2026-04-12 18:07:54 +02:00
Jinyang
6d499269ca Merge pull request #3046 from grzesir/add-lumibot
Add lumibot to Financial Data
2026-04-11 10:04:43 +04:00
Robert Grzesik
d5158f8362 Add lumibot to Financial Data section
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
2026-04-10 23:29:41 -04:00
Vinta Chen
d902e5b9ba docs: update SPONSORSHIP.md copy
- 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>
2026-04-09 21:35:55 +08:00
Vinta Chen
38b710e7ce add hermes-agent 2026-04-08 15:24:20 +08:00
Tim Hopper
68c8fd4385 Add Python Developer Tooling Handbook to Resources > Websites 2026-04-07 16:27:32 -04:00
Jinyang
7a348495cb Merge pull request #3027 from tarasko/master
Add picows library to WebSocket section
2026-04-07 07:34:03 +04:00
Taras Kozlov
f63c9f899f Update 'picows' entry in README 2026-04-05 22:37:24 +02:00