Improvements v0.0.9 #11
Loading…
Reference in a new issue
No description provided.
Delete branch "improvements/v0.0.9"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Custom parsers for four newsletter/news sources that previously emitted one entry per issue (or were broken). Each adapter now yields one entry per linked article so the timeline shows the actual news items.
Sources
pycoders-weeklyhtml_pycoders_weeklyhttps://pycoders.com/feedpython-weeklyhtml_python_weeklyhttps://pythonweekly.com/jvm-weeklyhtml_jvm_weeklyhttps://www.jvm-weekly.com/feedjava-code-geeksfeed_javacodegeeks_filteredhttps://www.javacodegeeks.com/feed[DEALS]/[FREE EBOOKS]/Meta JCGAdapters
html_pycoders_weekly— fetches latest 3 issues from RSS, parses issue HTML, resolvespycoders.com/link/<id>/webredirects via HEAD/GET, drops<p class="sponsor">blocks and unresolved internal redirects, keeps externalfinal_urleven when the destination returns 429, checks subfetch HTTP status.html_python_weekly— walkspythonweekly.com/archive, fetches each/p/python-weekly-issue-*, keepsArticles, Tutorials and TalksandInteresting Projects, Tools, and Libraries(h5 sections) while dropping events/sponsors/newsletter footers (h5 sections) and h6 article titles, stripsutm_*/_bhiiv/bhcl_*/__...query params viaurllib.parse.html_jvm_weekly— parses Substackcontent:encoded, keeps external article anchors, drops publisher/Substack/social/CDN hosts, strips tracking query params.feed_javacodegeeks_filtered— generic RSS parser with title pattern ([DEALS],[FREE EBOOKS]) and category (Meta JCG,Deals,Offers,eBooks) filters.Errors and observability
When every issue subfetch returns an unhealthy HTTP status, both Python Weekly and PyCoder's now return
error_class="issue_fetch_error"instead of a misleading success with zero candidates.Wiring
app/backend/services/catalog.py(VALID_ADAPTERS,ADAPTER_REQUIRES_ENDPOINT) andapp/backend/services/worker.py(adapter set + dispatch blocks).config/sources.csvto switchpycoders-weeklyandpython-weeklyto their new adapters and addedjvm-weeklyandjava-code-geeks.Tests
tests/test_pycoders_weekly_adapter.py,tests/test_python_weekly_adapter.py,tests/test_jvm_weekly_adapter.py,tests/test_javacodegeeks_adapter.py.tests/fixtures/python_weekly_issue.htmlfor regression coverage.FetchErrorpropagation and issue-fetch error surfacing.tests/test_catalog.py::test_v0_0_9_newsletter_html_adapters_are_active.Mark five active GitHub /releases.atom sources as unsupported after live verification showed both /releases.atom and /tags.atom return empty Atom documents (skills catalogs distribute via direct commits): - gh-ornith, gh-anthropic-skills, gh-openai-skills, gh-google-skills, gh-minimax-skills Rename gh-deepseek-v3 / gh-deepseek-r1 display names from 'Tags' to 'Releases' since the rows use /releases.atom. Normalize config/sources.csv line endings to LF (the previous mix of CRLF and LF was hiding the structural diff as 166 unrelated rewrites). Add tests/test_catalog.py::test_v0_0_9_added_github_repo_feeds_return_entries to assert every newly active GitHub release source produces at least one candidate when fetched live, and to keep the empty-feed skills repos out of the active set. Verification: 629 tests pass; audit_sources.py clean.