Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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
Пример #5
0
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)