Releases: NandaScott/Scrython
Release list
2.2.0
What's Changed
- Added support for Scryfall Tags bulk downloads with Tag and Tagging object to work with them.
Full Changelog: 2.1.0...2.2.0
2.1.0
What's Changed
- Add Sandcastle Agent Orchestration by @NandaScott in #175
- Make Sandcastle a Blocker-Aware Orchestrator by @NandaScott in #177
- Derive Sandcastle Branches From the Parent PRD by @NandaScott in #178
- Support Issue Ranges and Lists in the Sandcastle ONLY_ISSUE Selector by @NandaScott in #188
- Ship PEP 561 Type Hint Support by @NandaScott in #174
- Prd/pep 561 compliance ship py typed marker by @NandaScott in #198
- v2.1.0 by @NandaScott in #199
Full Changelog: 2.0.3...2.1.0
2.0.3
What's Changed
- feat: add per-endpoint rate limiting by @NandaScott in #156
- Re-raise error from urllib as ScryfallError and fix tests by @NandaScott in #157
- 2.0.3 by @NandaScott in #158
Full Changelog: 2.0.2...2.0.3
2.0.2
What's Changed
- Update
tqdmimport for Jupyter compatibility. by @NandaScott in #149 - Set headers for bulk data to gzip by @NandaScott in #151
Full Changelog: 2.0.1...2.0.2
2.0.1
Bugfixes
- Fixed an issue when downloading from bulk_data #145
2.0.0 Complete Rewrite
Boy howdy this is a huge release.
This release deprecates the previous versions of Scrython, with very little semblance to the original and no attempts at backwards compatibility. Any new projects looking to incorporate Scrython should use this version instead.
Changelog below, and available in the CHANGELOG.md at this project's root.
================================
Major refactoring and modernization of the Scrython library with significant improvements to code quality, type safety, and usability.
Added
TypedDict Integration
-
Full TypedDict type system from
scrython.typesmoduleScryfallCardData- Complete card object structureScryfallSetData- Complete set object structureScryfallBulkDataData- Complete bulk data object structureLegalities- Format legality informationPrices- Price information in various currenciesImageUris- Image URIs for different sizesPurchaseUris- Purchase URIs for various vendorsRelatedUris- Related resource URIsCardFaceData- Multi-faced card face dataRelatedCard- Related card information
-
Refined mixin return types - Replaced generic
dict[str, Any]with specific TypedDict typeslegalities()returnsLegalitiesprices()returnsPricesimage_uris()returnsImageUris | Nonepurchase_uris()returnsPurchaseUris | Nonerelated_uris()returnsRelatedUris
-
Endpoint class type overrides - Better IDE autocomplete and type checking
cards.Object._scryfall_data: ScryfallCardDatasets.Object._scryfall_data: ScryfallSetDatabulk_data.Object._scryfall_data: ScryfallBulkDataData
Bulk Data Download Functionality
download()method for all Bulk Data objects- Automatic gzip decompression
- Optional file saving with
filepathparameter - Optional progress bar with
progress=True(requirespip install scrython[progress]) - Memory-efficient mode with
return_data=False - Configurable chunk size for downloads
Comprehensive Type Hints
- Modern Python 3.10+ type syntax throughout (
X | Yinstead ofUnion[X, Y]) - All 113 card properties have explicit type annotations
- All 21 set properties have explicit type annotations
- All 11 bulk data properties have explicit type annotations
- Nullable types properly annotated (e.g.,
int | None) - Complete TypedDict definitions for all Scryfall API response structures
- Full mypy type validation with zero errors
Testing Infrastructure
- 113 new property type tests - Comprehensive parametrized tests validating all properties
- Test coverage for nullable field handling
- Test coverage for nested objects (card faces, related cards)
- Test coverage for bulk data download functionality (6 new tests)
- Test coverage for pagination and caching
- Test coverage for rate limiting
- Total test suite: 394 tests passing (all green)
Development Tooling
- black - Code formatter with consistent style
- ruff - Fast Python linter
- mypy - Static type checker
- pre-commit hooks - Automatic code quality checks
- GitHub Actions CI/CD configuration
- Type checking enforcement via mypy
Documentation
- CHANGELOG.md - This file! Complete release notes and migration guide
- docs/rewrite/REWRITE_HISTORY.md - Comprehensive 3,843-line rewrite documentation
- All planning, analysis, and completion documentation in single file
- Organized chronologically with clear section separators
- Complete narrative of entire rewrite process (Phases 1-8)
- Enhanced README with bulk data download examples
- Improved inline documentation with official Scryfall descriptions
- All mixins now have comprehensive docstrings (149 properties documented)
- All endpoint classes have detailed docstrings with examples
Changed
Type System Improvements
- Mixin property return types now use specific TypedDict types
- Better IDE autocomplete for nested objects (legalities, prices, image URIs)
- Improved type inference throughout the codebase
- More precise error detection during development
Project Organization
- Consolidated rewrite documentation into single
docs/rewrite/REWRITE_HISTORY.md - Moved all planning documents from root to
docs/rewrite/directory - Cleaner root directory with only essential documentation files
- Better separation of historical documentation from current docs
API Structure (Non-Breaking on Rewrite Branch)
- Simplified class names (removed redundant prefixes internally)
CardsNamed�Named(internal)SetsByCode�ByCode(internal)BulkDataByType�ByType(internal)
- Direct class imports from submodules instead of factory pattern
- Read-only
scryfall_dataproperty returnsSimpleNamespaceinstead of dict- Provides dot-notation access:
card.scryfall_data.name - Prevents accidental mutation of internal data
- Cached for performance
- Provides dot-notation access:
Code Quality
- All code formatted with black (line length: 100)
- All code passes ruff linting checks
- All code passes mypy type checking
- Modern Python 3.10+ features utilized
- Consistent naming conventions throughout
README Updates
- Added bulk data download examples
- Updated rate limiting guidance
- Added progress bar usage examples
- Clarified caching recommendations
- Added memory-efficient download examples
Fixed
Critical Bugs
-
Nullable property KeyError - All nullable properties now use
.get()method- Fixed 74 nullable properties across
cards_mixins.pyandsets_mixins.py - Properties gracefully return
Nonewhen keys are missing from API responses - Prevents crashes when Scryfall API returns incomplete data
- Fixed 74 nullable properties across
-
to_object_arrayutility - Now handles missing keys for nullable array fieldsall_partsandcard_facesproperties work correctly when data is missing
-
Test fixtures - Added missing required fields to mock API responses
- Added
urifield to bulk_data/by_id.json fixture
- Added
Pre-commit Configuration
- Fixed hooks to only check
scrython/andtests/directories - Added
typing-extensionsdependency for mypy - Configured proper file patterns for each hook
Development Changes
Python Version
- Python 3.10+ now required (was 3.5.3+)
- Leverages modern type hint syntax and language features
Project Structure
- Reorganized into clear module hierarchy
- Mixins separated from endpoint classes
- Comprehensive test organization by module
- Fixtures organized by endpoint type
Testing Improvements
- 188 total tests (75 original + 113 new property tests)
- Mock-based testing with realistic Scryfall responses
- Comprehensive error case coverage
- Parametrized tests for systematic property validation
1.11.1
Incrementing version to fix publish issues.
This version is tied to 1.11.0
1.11.0
What's Changed
- Added new classes to fetch keywords and ability words from catalog on the API by @Tsukalos in #79
- Develop by @NandaScott in #81
New Contributors
Full Changelog: 1.10.1...1.11.0
1.10.1: Small bugfix
Bugfixes:
- Incremented package version
1.10.0: Etched foils support
Features:
- Added support for
classcards forimage_uris(Thanks to @A7F !!) - Added support for the
tcgplayer_etched_foilfield - Added support for the
finishesfield - Updated unittests to reflect the above changes
- Added deprecation warning to
foilandnonfoilfields