tag:github.com,2008:https://github.com/zero-sum-seattle/python-mlb-statsapi/releases Release notes from python-mlb-statsapi 2026-01-14T03:25:28Z tag:github.com,2008:Repository/535875567/v0.7.1 2026-01-14T03:34:22Z v0.7.1 <h1>Release Notes v0.7.1</h1> <h2>๐ŸŽ‰ Major Changes</h2> <h3>Removed Key Transformation Layer</h3> <p>Removed the <code>_transform_keys_in_data()</code> function that was lowercasing all API response keys. Models now directly use the MLB Stats API's native <code>camelCase</code> format, simplifying the codebase and ensuring accurate representation of API responses.</p> <h3>Complete Pydantic Migration</h3> <p>This release includes the complete migration from Python dataclasses to Pydantic v2 models across the entire codebase (from v0.7.1). All models now use Pydantic for validation, serialization, and data handling.</p> <p><strong>Key Benefits:</strong></p> <ul> <li>Automatic data validation with clear error messages</li> <li>Built-in serialization with <code>model_dump()</code> and <code>model_dump_json()</code></li> <li>Pythonic <code>snake_case</code> field names while maintaining API <code>camelCase</code> compatibility</li> <li>Better type safety and IDE support</li> </ul> <h2>๐Ÿ“ Breaking Changes</h2> <p><g-emoji class="g-emoji" alias="warning">โš ๏ธ</g-emoji> <strong>This is a major version release with breaking changes:</strong></p> <ol> <li> <p><strong>Field Access</strong>: All model fields now use <code>snake_case</code> instead of <code>camelCase</code>:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="# Before game.gamedata.weather # After game.game_data.weather"><pre><span class="pl-c"># Before</span> <span class="pl-s1">game</span>.<span class="pl-c1">gamedata</span>.<span class="pl-c1">weather</span> <span class="pl-c"># After</span> <span class="pl-s1">game</span>.<span class="pl-c1">game_data</span>.<span class="pl-c1">weather</span></pre></div> </li> <li> <p><strong>Validation Errors</strong>: Invalid data now raises <code>pydantic.ValidationError</code> instead of <code>TypeError</code></p> </li> <li> <p><strong>Serialization</strong>: Use Pydantic methods for serialization:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="# New methods model.model_dump() model.model_dump_json()"><pre><span class="pl-c"># New methods</span> <span class="pl-s1">model</span>.<span class="pl-c1">model_dump</span>() <span class="pl-s1">model</span>.<span class="pl-c1">model_dump_json</span>()</pre></div> </li> </ol> <h2>๐Ÿ”ง Model Updates</h2> <h3>Core Models</h3> <ul> <li>All models migrated to Pydantic <code>MLBBaseModel</code></li> <li>Field aliases updated to match actual API <code>camelCase</code> format</li> <li>Optional fields properly marked for fields that may be missing</li> </ul> <h3>Specific Model Fixes</h3> <ul> <li><strong>Game Models</strong>: <code>gamePk</code>, <code>gameData</code>, <code>liveData</code>, <code>metaData</code> aliases corrected</li> <li><strong>HomeRunDerby</strong>: <code>homeRun</code>, <code>tieBreaker</code>, <code>isHomeRun</code>, <code>isTieBreaker</code> aliases fixed</li> <li><strong>Stats Models</strong>: <code>wobaCon</code>, <code>pitchArsenal</code> aliases corrected</li> <li><strong>Schedule Models</strong>: <code>calendarEventId</code> made optional</li> <li><strong>Standings Models</strong>: <code>wildcardGamesBack</code>, <code>wildcardEliminationNumber</code> made optional</li> </ul> <h2>๐Ÿ› Bug Fixes</h2> <ul> <li>Fixed missing fields in various stat models</li> <li>Added <code>age</code> and <code>caughtstealingpercentage</code> to <code>SimplePitchingSplit</code></li> <li>Fixed <code>flyballpercentage</code> field in <code>AdvancedPitchingSplit</code></li> <li>Updated models for new MLB API fields</li> <li>Fixed missing keys in live feed data</li> </ul> <h2>๐Ÿ“š Documentation</h2> <ul> <li>Updated README with Pydantic migration examples</li> <li>Added "Working with Pydantic Models" section</li> <li>Added Contributing section to README</li> <li>Updated all code examples to use <code>snake_case</code> field names</li> </ul> <h2>๐Ÿ”„ Migration Guide</h2> <p>If you're upgrading from v0.5.x or v0.6.x:</p> <ol> <li> <p><strong>Update field access</strong>: Change all <code>camelCase</code> field names to <code>snake_case</code></p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="# Old game.gamedata.weather stat.totalsplits # New game.game_data.weather stat.total_splits"><pre><span class="pl-c"># Old</span> <span class="pl-s1">game</span>.<span class="pl-c1">gamedata</span>.<span class="pl-c1">weather</span> <span class="pl-s1">stat</span>.<span class="pl-c1">totalsplits</span> <span class="pl-c"># New</span> <span class="pl-s1">game</span>.<span class="pl-c1">game_data</span>.<span class="pl-c1">weather</span> <span class="pl-s1">stat</span>.<span class="pl-c1">total_splits</span></pre></div> </li> <li> <p><strong>Update error handling</strong>: Catch <code>ValidationError</code> instead of <code>TypeError</code></p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="from pydantic import ValidationError try: game = Game(**data) except ValidationError as e: # Handle validation error"><pre><span class="pl-k">from</span> <span class="pl-s1">pydantic</span> <span class="pl-k">import</span> <span class="pl-v">ValidationError</span> <span class="pl-k">try</span>: <span class="pl-s1">game</span> <span class="pl-c1">=</span> <span class="pl-en">Game</span>(<span class="pl-c1">**</span><span class="pl-s1">data</span>) <span class="pl-k">except</span> <span class="pl-v">ValidationError</span> <span class="pl-k">as</span> <span class="pl-s1">e</span>: <span class="pl-c"># Handle validation error</span></pre></div> </li> <li> <p><strong>Use Pydantic serialization</strong>: Replace <code>__dict__</code> access with <code>model_dump()</code></p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="# Old data = game.__dict__ # New data = game.model_dump()"><pre><span class="pl-c"># Old</span> <span class="pl-s1">data</span> <span class="pl-c1">=</span> <span class="pl-s1">game</span>.<span class="pl-c1">__dict__</span> <span class="pl-c"># New</span> <span class="pl-s1">data</span> <span class="pl-c1">=</span> <span class="pl-s1">game</span>.<span class="pl-c1">model_dump</span>()</pre></div> </li> </ol> <h2>๐Ÿ“ฆ Dependencies</h2> <ul> <li>Added <code>pydantic&gt;=2.0</code> as a core dependency</li> <li>Migrated from setuptools to Poetry for dependency management</li> </ul> <h2>๐Ÿงช Testing</h2> <ul> <li>Removed all mock tests (22,370+ lines)</li> <li>External tests updated and passing</li> <li>CI/CD pipelines updated to remove mock test runs</li> </ul> <p><strong>Full Changelog</strong>: <a class="commit-link" href="https://github.com/zero-sum-seattle/python-mlb-statsapi/compare/v0.5.3...v0.7.0"><tt>v0.5.3...v0.7.0</tt></a></p> Mattsface tag:github.com,2008:Repository/535875567/v0.5.3 2023-01-09T23:29:50Z v0.5.3 <p>v0.5.3 of python-mlb-statsapi</p> Mattsface