コード例 #1
0
ファイル: util.py プロジェクト: siberianice/mtgatracker
def process_deck(deck_dict, save_deck=True):
    import app.mtga_app as mtga_app
    deck_id = deck_dict['id']
    if deck_dict["name"] in PRECON_MAP:
        deck_dict["name"] = PRECON_MAP[deck_dict["name"]]
    deck = set.Deck(deck_dict["name"], deck_id)
    for card_obj in deck_dict["mainDeck"]:
        try:
            id_key = "id" if "id" in card_obj else "Id"
            qt_key = "quantity" if "quantity" in card_obj else "Quantity"
            # why? jsonrpc methods use capitalized instead of lowercase. idk, see for yourself:
            # == > DirectGame.Challenge(42):
            # {
            #     "jsonrpc": "2.0",
            #     "method": "DirectGame.Challenge",
            #     "params": {
            #         "opponentDisplayName": "MTGATracker#78028",
            #         "avatar": "Sarkhan_M19_01",
            #         "deck": "{\"id\":\"c4d5e085-65c4-4873-9aaf-d9d081bde8e4\",\"name\":\"MTGA DOWN, PANIC
            #                     mk 02\",\"format\":\"Standard\",\"description\":\"\",
            #                     \"localDescription\":\"Temp string\",
            #                     \"deckTileId\":0,\"isValid\":true,\"lastUpdated\":\"2018-09-28T08:35:17.0184205\",
            #                     \"mainDeck\":[{\"Id\":67015,\"Quantity\":60},{\"Id\":67017,\"Quantity\":190}],\
            #                     \"sideboard\":[]}"
            #     },
            #     "id": "42"
            # }
            card = all_mtga_cards.search(card_obj[id_key])[0]
            for i in range(card_obj[qt_key]):
                deck.cards.append(card)
        except Exception as e:
            mtga_app.mtga_logger.error("{}Unknown mtga_id: {}".format(
                ld(), card_obj))
            mtga_app.mtga_watch_app.send_error(
                "Could not process deck {}: Unknown mtga_id: {}".format(
                    deck_dict["name"], card_obj))
    for card_obj in deck_dict["sideboard"]:
        try:
            id_key = "id" if "id" in card_obj else "Id"
            qt_key = "quantity" if "quantity" in card_obj else "Quantity"
            card = all_mtga_cards.search(card_obj[id_key])[0]
            for i in range(card_obj[qt_key]):
                deck.side.append(card)
        except Exception as e:
            mtga_app.mtga_logger.error("{}Unknown mtga_id: {}".format(
                ld(), card_obj))
            mtga_app.mtga_watch_app.send_error(
                "Could not process deck {}: Unknown mtga_id: {}".format(
                    deck_dict["name"], card_obj))
    if save_deck:
        with mtga_app.mtga_watch_app.game_lock:
            mtga_app.mtga_watch_app.player_decks[deck_id] = deck
            mtga_app.mtga_logger.info("{}deck {} is being saved".format(
                ld(), deck_dict["name"]))
            mtga_app.mtga_watch_app.save_settings()
    return deck
コード例 #2
0
def deepsearch_blob_for_ids(blob, ids_only=True):
    full_res = {}
    if isinstance(blob, dict):
        for key in blob.keys():
            my_res = deepsearch_blob_for_ids(blob[key])
            for key in my_res:
                full_res[key] = my_res[key]
        return full_res
    elif isinstance(blob, list):
        for item in blob:
            my_res = deepsearch_blob_for_ids(item)
            for key in my_res:
                full_res[key] = my_res[key]
        return full_res
    else:
        search_res = all_mtga_cards.search(blob)
        is_number = False
        try:
            _unused_number = int(blob)
            is_number = True
        except (ValueError, TypeError):
            pass
        if search_res and blob and (not ids_only or is_number):
            return {blob: search_res}
        return {}
コード例 #3
0
ファイル: util.py プロジェクト: zerot13/mtgatracker
def _process_maindeck_v3(deck, decklist_blob, is_sideboard=False):
    import app.mtga_app as mtga_app

    if len(decklist_blob) % 2 != 0:
        mtga_app.mtga_logger.error("{}Called _process_maindeck_v3 with odd number of cards: {}".format(ld(), len(decklist_blob)))
        mtga_app.mtga_watch_app.send_error("Could not process deck {}: _process_maindeck_v3 with odd number of cards: {}".format(deck.pool_name, len(decklist_blob)))
        return

    # split them into tuples: DOG THIS IS SICK https://docs.python.org/2/library/functions.html#zip
    card_tups = zip(*[iter(decklist_blob)]*2)
    for card_tup in card_tups:
        try:
            card_id = card_tup[0]
            quantity = card_tup[1]

            card = all_mtga_cards.search(card_id)[0]
            for i in range(quantity):
                if is_sideboard:
                    deck.side.append(card)
                else:
                    deck.cards.append(card)

        except Exception as e:
            mtga_app.mtga_logger.error("{}Unknown mtga_id: {}".format(ld(), card_id))
            mtga_app.mtga_watch_app.send_error("Could not process deck {}: Unknown mtga_id: {}".format(deck.pool_name, card_id))
コード例 #4
0
ファイル: util.py プロジェクト: zerot13/mtgatracker
def _process_maindeck(deck, decklist_blob, is_sideboard=False):
    import app.mtga_app as mtga_app
    for card_obj in decklist_blob:
        try:
            id_key = "id" if "id" in card_obj else "Id"
            qt_key = "quantity" if "quantity" in card_obj else "Quantity"
            # why? jsonrpc methods use capitalized instead of lowercase. idk, see for yourself:
            # == > DirectGame.Challenge(42):
            # {
            #     "jsonrpc": "2.0",
            #     "method": "DirectGame.Challenge",
            #     "params": {
            #         "opponentDisplayName": "MTGATracker#78028",
            #         "avatar": "Sarkhan_M19_01",
            #         "deck": "{\"id\":\"c4d5e085-65c4-4873-9aaf-d9d081bde8e4\",\"name\":\"MTGA DOWN, PANIC
            #                     mk 02\",\"format\":\"Standard\",\"description\":\"\",
            #                     \"localDescription\":\"Temp string\",
            #                     \"deckTileId\":0,\"isValid\":true,\"lastUpdated\":\"2018-09-28T08:35:17.0184205\",
            #                     \"mainDeck\":[{\"Id\":67015,\"Quantity\":60},{\"Id\":67017,\"Quantity\":190}],\
            #                     \"sideboard\":[]}"
            #     },
            #     "id": "42"
            # }
            card = all_mtga_cards.search(card_obj[id_key])[0]
            for i in range(card_obj[qt_key]):
                if is_sideboard:
                    deck.side.append(card)
                else:
                    deck.cards.append(card)
        except Exception as e:
            mtga_app.mtga_logger.error("{}Unknown mtga_id: {}".format(ld(), card_obj))
            mtga_app.mtga_watch_app.send_error("Could not process deck {}: Unknown mtga_id: {}".format(deck.pool_name, card_obj))
コード例 #5
0
def process_deck(deck_dict, save_deck=True):
    import app.mtga_app as mtga_app
    deck_id = deck_dict['id']
    deck = set.Deck(deck_dict["name"], deck_id)
    for card_obj in deck_dict["mainDeck"]:
        try:
            card = all_mtga_cards.search(card_obj["id"])[0]
            for i in range(card_obj["quantity"]):
                deck.cards.append(card)
        except:
            mtga_app.mtga_logger.error("{}Unknown mtga_id: {}".format(ld(), card_obj))
            mtga_app.mtga_watch_app.send_error("Could not process deck {}: Unknown mtga_id: {}".format(deck_dict["name"], card_obj))
    if save_deck:
        with mtga_app.mtga_watch_app.game_lock:
            mtga_app.mtga_watch_app.player_decks[deck_id] = deck
            mtga_app.mtga_logger.info("{}deck {} is being saved".format(ld(), deck_dict["name"]))
            mtga_app.mtga_watch_app.save_settings()
    return deck