def __init__(self, name: str = None, session: cdl.CardDownloader = None): self.name = name self.first_line = False if session is None: session = cdl.CardDownloader() self.session = session
def get_image(card: card.Card, output_directory: str, session: card_dl.CardDownloader = None) -> str: os.makedirs(output_directory, exist_ok=True) outname = name_to_fname(card.name) try: if card.edition: if card.collectors_number is not None: ex = r"\[{0},{1}\]".format(card.edition, card.collectors_number) else: ex = r"\[{0}(,\d+)?\]".format(card.edition) else: ex = r"(\[[^]]+?\])?" prog = re.compile(outname + ex, flags=re.IGNORECASE) existing_fname = next( f for f in os.listdir(output_directory) if os.path.isfile(os.path.join(output_directory, f)) and prog.fullmatch(os.path.splitext(f)[0])) logger.debug("Using existing file \"{0}\"".format(existing_fname)) return existing_fname except StopIteration: if session is None: session = card_dl.CardDownloader() return download_card_image(card, output_directory, session)
def save_xmage(outstream: typing.TextIO, mainboard: CardListTy, sideboard: CardListTy, name: str = None) -> None: session = cdl.CardDownloader() newmainboard = ((_check_and_force_edition_num(c, session), n) for c, n in mainboard) newsideboard = ((_check_and_force_edition_num(c, session), n) for c, n in sideboard) if not name: name = os.path.splitext(os.path.split(outstream.name)[-1])[0] card_processor = WriteHandleXMageLine(name) save_file(outstream, newmainboard, newsideboard, card_processor)
def make_fully_qualified_card(name: AnyStr = None, edition: AnyStr = None, collectors_number: str = None, language: AnyStr = None, session: card_dl.CardDownloader = None) -> Card: if name is None and (edition is None or collectors_number is None): raise ValueError("bad inputs") if session is None: session = card_dl.CardDownloader() if language is None and name is None: language = "en" if edition is not None: edition = get_mtgset_codes().get(edition, edition) analyzer = session.make_html_analyzer(name, edition, collectors_number, language) return make_fully_qualified_card_from_info(analyzer)
def force_edition_and_number_copy(card: Card, session: card_dl.CardDownloader = None ) -> Card: if session is None: session = card_dl.CardDownloader() analyzer = session.make_html_analyzer( card.name, card.edition, next(card.magiccards_info_number_list()), card.language) edition = card.edition num = card.collectors_number language = card.language parts = card.card_side_num if not edition or not num: url = next(analyzer.find_card_urls()) edition, language, num, other_part = card_dl.analyse_hyperref(url) return Card(analyzer.get_main_name(), edition, num, language, parts)
def build_proxies(settings): if settings.inventory is not None: def inline_load(i): tdeck = deck.Deck() tdeck.guarded_load(i, settings.inventory_readfunc) return tdeck all_inv = [inline_load(i) for i in settings.inventory] combined_inv = sum(all_inv) else: combined_inv = deck.Deck() dck = deck.Deck() dck.guarded_load(settings.input, settings.readfunc) if settings.alldecks is None: other_decks = [] else: other_decks = load_existing_decks(dck, settings.alldecks, settings.alldecks_readfunc) logger.info("Removing existing decks from inventory") for i, d in enumerate(other_decks): if not settings.specific_edition: d = deck.Deck(*d.remove_version()) if not settings.include_basics: d = deck.remove_basic_lands(d) other_decks[i] = d from collections import Counter c = Counter() for other_deck in other_decks: c += other_deck.full_deck combined_other_deck = deck.Deck(c) combined_inv = deck.exclude_deck_from_inventory(combined_inv, combined_other_deck) if not settings.specific_edition: dck = deck.Deck(*dck.remove_version()) if not settings.include_basics: proxies = deck.remove_basic_lands(dck) else: proxies = dck logger.info("Removing remaining inventory from input deck") proxies = deck.exclude_inventory_from_deck(proxies, combined_inv) logger.info(verbose_msg="PROXY LIST") logger.info(verbose_msg=str(proxies)) session = cdl.CardDownloader() image_fnames = imd.get_all_images(proxies, settings.figures, session) rel_fig_dir = os.path.relpath(settings.figures, os.path.dirname(settings.output)) if rel_fig_dir == ".": rel_fig_dir = "" proxies.output_latex_proxies(settings.output, image_fnames, rel_fig_dir, settings.template, mypaper=settings.paper, cut_color=settings.cutcol, cut_thickness=settings.cutthick, card_dimensions=None, background_colour=settings.background) tdeck = deck.exclude_inventory_from_deck(dck, proxies) logger.info("--- Already owned cards ---") logger.info(tdeck)