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
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 {}
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))
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))
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