Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions Sources/Subreddit.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
# Official Reddit sources (voucherbot/database/bootstrap.py)
# Reddit OAuth API: REDDIT_INGESTION_ENABLED in .env (default false — RSS-only collection)
# Kodexis API fallback: KODEXIS_API_KEY in .env (used when OAuth disabled)
# Fetch limit: 25 posts per poll

# Tier A — every 15 min
# Tier C — every 240 min (moved from Tier A)
AWSCertifications
AzureCertification
Udemy
FreeUdemyCoupons

# Tier B — every 60 min
# Tier D — every 720 min (moved from Tier B)
O365Certification
CompTIA
ccna
Expand All @@ -29,4 +30,5 @@ vmware
# eFreebies
# FREE
# deals (disabled)
# freebies (disabled)
# freebies (disabled)
# mcsa (removed)
2 changes: 1 addition & 1 deletion Sources/source.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Collectors prefer RSS/APIs, identify as `VoucherBot`, obey `robots.txt` / Crawl-

| File | Contents |
|------|----------|
| [`Subreddit.txt`](Subreddit.txt) | Reddit subreddits (Tier A/B), plus disabled subs |
| [`Subreddit.txt`](Subreddit.txt) | Reddit subreddits (Tier C/D), plus disabled subs |
| [`RSS_List.txt`](RSS_List.txt) | RSS, blog, and forum feeds |
| [`Website_List.txt`](Website_List.txt) | HTML scrapers (vendor pages, aggregators) |
| [`Event_List.txt`](Event_List.txt) | Vendor event listing pages |
Expand Down
8 changes: 4 additions & 4 deletions tests/test_bootstrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@


class TestRedditTier:
def test_tier_a_subreddits(self) -> None:
assert bootstrap._reddit_tier("AWSCertifications") == "A"
def test_tier_c_subreddits(self) -> None:
assert bootstrap._reddit_tier("AWSCertifications") == "C"

def test_other_subreddits_are_tier_b(self) -> None:
assert bootstrap._reddit_tier("CompTIA") == "B"
def test_other_subreddits_are_tier_d(self) -> None:
assert bootstrap._reddit_tier("CompTIA") == "D"


class TestSourceName:
Expand Down
8 changes: 6 additions & 2 deletions voucherbot/database/bootstrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,13 +136,17 @@ def _warn_on_invalid_selectors(config: dict[str, Any], source_name: str) -> None
# Removed from catalog — too noisy for cert-voucher signal.
DISABLED_REDDIT_SUBREDDITS = {"deals", "freebies"}

TIER_A_REDDIT_SUBS = {
# Moved from Tier A to Tier C (15min -> 240min)
TIER_C_REDDIT_SUBS = {
"AWSCertifications",
"AzureCertification",
"Udemy",
"FreeUdemyCoupons",
}

# Moved from Tier B to Tier D (60min -> 720min)
# All other HIGH_SIGNAL_REDDIT_SUBREDDITS not in TIER_C_REDDIT_SUBS

_TIER_CADENCE_MINUTES = {
"A": 15,
"B": 60,
Expand All @@ -152,7 +156,7 @@ def _warn_on_invalid_selectors(config: dict[str, Any], source_name: str) -> None


def _reddit_tier(sub: str) -> str:
return "A" if sub in TIER_A_REDDIT_SUBS else "B"
return "C" if sub in TIER_C_REDDIT_SUBS else "D"


def _source_name(source_type: SourceType, label: str) -> str:
Expand Down
Loading