Skip to content

fantasyfb v0.7.0

Choose a tag to compare

@tefirman tefirman released this 19 Aug 06:06
· 157 commits to main since this release
8631d46

fantasyfb v0.7.0

Multi-platform league support: SleeperClient and a fully synthetic generic mock mode join Yahoo behind a shared FantasyPlatformClient interface, with --platform now available across all three draft CLIs. Also includes dual (position + flex) VORP, simadd win/earnings-delta evaluation during live drafts, and a rebranded navy/green logo.

pip install --upgrade fantasyfb

Highlights

  • Sleeper and generic mock leagues, alongside Yahoo. League(platform="yahoo"|"sleeper"|"generic") picks its backend through a shared FantasyPlatformClient interface. Sleeper reads a league's real rosters/scoring/schedule from its public API with zero credentials, just a sleeper_league_id. generic needs nothing at all: it synthesizes teams, rosters, and a round-robin schedule against the real current NFL player pool, and is now the default platform when --platform is omitted. --platform / --sleeper-league-id / --num-teams / --mock-scoring are wired into all three draft CLIs (snake-draft, salary-cap-draft, draft-prep).
  • Dual VORP: position-specific and flex-aware. compute_vorp now also emits flex_replacement_rate, vorp_flex_per_game, and vorp_flex_season, computed against the combined pool of everyone eligible for the deepest flex slot. In a superflex league this correctly compresses QB value since the superflex slot would otherwise go to a WR/RB/TE. Every draft decision surface (cockpit vorp_adjusted, salary cap dollar values, mock draft strategies) now runs on flex VORP by default.
  • simadd: sim a hypothetical pick before committing. New command on snake-draft and salary-cap-draft sims the top-N available candidates per position and ranks them by win/playoff/earnings delta from a cached baseline, so you can evaluate a pick's real impact mid-draft. On salary-cap-draft, each candidate is priced at its max_my_bid before the hypothetical add is simulated, since adding a candidate there costs cap space rather than being free.
  • best/simadd now prompt for pool and scoring instead of a combinatorial explosion of separate commands (nearest, bestball, nearestbestball, nearestsimadd, bestballsimadd are gone). Pick best-available vs. nearest-ADP, and normal vs. bestball-upside scoring, interactively.
  • Rebranded logo and docs site. New navy/green "FFB51" mark replaces the old navy/gold snake-and-shield. The docs site's Yahoo-only setup page is now Connecting a league, covering the credential-free Sleeper and generic options alongside Yahoo OAuth.

Also in this release

  • ADP blended into random/random til me's auto-pick sampling weights, so a market-favorite with poor personal-VORP standing (or vice versa) doesn't get picked as often.
  • --fresh-draft on snake-draft/salary-cap-draft for mock-drafting against a league's current settings without keeper-preservation logic kicking in.
  • Persistent, filesystem-backed nflreadpy caching (24h TTL) so repeated draft-prep CLI runs reuse a warm cache instead of re-downloading; --refresh-cache forces a fresh pull.
  • YahooFantasyClient.list_team_names(season) for resolving a multi-team account's teams without the old interactive-input()-only path (which hung in non-interactive contexts like a Streamlit app).
  • Breaking change: --sfb removed from snake-draft/draft-prep, along with League(sfb=...). Use --platform sleeper --sleeper-league-id <id> instead, which now pulls a live Sleeper league's scoring/roster settings directly, including SFB leagues.
  • Several offline-draft-prep crash fixes: NflreadpyProvider.get_depth_charts and PlayerDataManager.add_injuries no longer hard-fail on a cold cache with no network.
  • connect_to_league fix for accounts with teams spread across multiple leagues in the same season, where the wrong league could silently get selected.
  • PlayerDataManager.map_player_ids now honors Sleeper-resolved player IDs instead of assuming Yahoo-shaped IDs everywhere.

See CHANGELOG.md for the full list.