def oracle(scryfall_data: ScryfallDataSet) -> Oracle: """Test fixture Oracle with limited data.""" accepted_sets = {"phop", "pmbs"} scryfall_data2 = ScryfallDataSet( sets=[s for s in scryfall_data.sets if s.code in accepted_sets], cards=[c for c in scryfall_data.cards if c.set in accepted_sets], ) return Oracle(scryfall_data2)
def oracle(scryfall_data: ScryfallDataSet) -> Oracle: """Oracle fixture.""" accepted_sets = {"lea", "fem", "s00", "ice", "hop"} scryfall_data2 = ScryfallDataSet( sets=[s for s in scryfall_data.sets if s.code in accepted_sets], cards=[c for c in scryfall_data.cards if c.set in accepted_sets], ) return Oracle(scryfall_data2)
def oracle(scryfall_data: ScryfallDataSet) -> Oracle: """Fixture for Oracle over only MMA and PMBS""" accepted_sets = {"mma", "pmbs"} scryfall_data2 = ScryfallDataSet( sets=[s for s in scryfall_data.sets if s.code in accepted_sets], cards=[c for c in scryfall_data.cards if c.set in accepted_sets], ) return Oracle(scryfall_data2)
def scryfetch() -> ScryfallDataSet: """Retrieve and deserialize Scryfall object data.""" cached_bulk_json = None if os.path.exists(_cache_path(BULK_DATA_ENDPOINT)): cached_bulk_json = _fetch_endpoint(BULK_DATA_ENDPOINT, dirty=False) bulk_json = _fetch_endpoint(BULK_DATA_ENDPOINT, dirty=True, write_cache=False) cache_dirty = bulk_json != cached_bulk_json bulk_list: ScryObjectList = cast(ScryObjectList, _deserialize_object(bulk_json)) sets_list = cast( ScryObjectList, _deserialize_object(_fetch_endpoint(SETS_ENDPOINT, dirty=cache_dirty)), ) sets_data = cast(List[ScrySet], sets_list.data) while sets_list.has_more: sets_list = cast( ScryObjectList, _deserialize_object( _fetch_endpoint(str(sets_list.next_page), dirty=cache_dirty)), ) sets_data += cast(List[ScrySet], sets_list.data) bulk_data = cast(List[ScryBulkData], bulk_list.data) [cards_endpoint ] = [bd.download_uri for bd in bulk_data if bd.type == BULK_TYPE] cards_json = cast(List[JSON], _fetch_endpoint(cards_endpoint, dirty=cache_dirty)) _fetch_endpoint(BULK_DATA_ENDPOINT, dirty=cache_dirty, write_cache=True) object_cache_path = _cache_path(OBJECT_CACHE_URL) if os.path.exists(object_cache_path): if cache_dirty or DEBUG == "1": os.remove(object_cache_path) else: try: with gzip.open(object_cache_path, "rb") as object_cache: loaded_data = pickle.load(object_cache) if isinstance(loaded_data, ScryfallDataSet): return loaded_data except (OSError, pickle.UnpicklingError): pass print("Error reading object cache, falling back") print("Deserializing") cards_data = _deserialize_cards(cards_json) scryfall_data = ScryfallDataSet(sets=sets_data, cards=cards_data) with gzip.open(object_cache_path, "wb") as object_cache: pickle.dump(scryfall_data, object_cache) return scryfall_data
def scryfall_data(cards_data: List[ScryCard], sets_data: List[ScrySet]) -> ScryfallDataSet: """Fixture containing all scryfall test data.""" return ScryfallDataSet(sets=sets_data, cards=cards_data)