コード例 #1
0
def test_invalid_color() -> None:
    d = Container({'original_name': 'PD',
                   'archetype_name': 'Control',
                   'colors': ['U', 'X']})
    try:
        deck_name.normalize(d)
        assert False
    except InvalidDataException:
        assert True
コード例 #2
0
 def __init__(self, d):
     self._deck = d
     self.prepare_deck(self._deck)
     self.cards = d.all_cards()
     # This is called 'decks' and not something more sane because of limitations of Mustache and our desire to use a partial for decktable.
     self.decks = deck.get_similar_decks(d)
     self.has_similar = len(self.decks) > 0
     self.matches = deck.get_matches(d, True)
     for m in self.matches:
         m.display_date = dtutil.display_date(m.date)
         if m.opponent:
             m.opponent_url = url_for('person', person_id=m.opponent)
         else:
             m.opponent = 'BYE'
             m.opponent_url = False
         if m.opponent_deck_id:
             m.opponent_deck_url = url_for('decks',
                                           deck_id=m.opponent_deck_id)
         else:
             m.opponent_deck_url = False
         if m.opponent_deck:
             m.opponent_deck_name = deck_name.normalize(m.opponent_deck)
         else:
             m.opponent_deck_name = '-'
         if self.has_rounds():
             m.display_round = display_round(m)
     self._deck['maindeck'].sort(key=lambda x: oracle.deck_sort(x['card']))
     self._deck['sideboard'].sort(key=lambda x: oracle.deck_sort(x['card']))
     self.admin = session.get('admin', False)
     if self.admin:
         self.archetypes = archetype.load_archetypes_deckless(
             order_by='a.name')
         self.edit_archetype_url = url_for('edit_archetypes')
     self.cardhoarder_url = fetcher.cardhoarder_url(d)
コード例 #3
0
def test_normalize(original_name: str, expected: str, colors: List[str],
                   archetype_name: str) -> None:
    d = Container({
        'original_name': original_name,
        'archetype_name': archetype_name,
        'colors': colors or []
    })
    assert deck_name.normalize(d) == expected
コード例 #4
0
def prime_cache(d) -> None:
    set_colors(d)
    colors_s = json.dumps(d.colors)
    colored_symbols_s = json.dumps(d.colored_symbols)
    set_legality(d)
    legal_formats_s = json.dumps(list(d.legal_formats))
    normalized_name = deck_name.normalize(d)
    db().begin()
    db().execute('DELETE FROM deck_cache WHERE deck_id = %s', [d.id])
    db().execute('INSERT INTO deck_cache (deck_id, normalized_name, colors, colored_symbols, legal_formats) VALUES (%s, %s, %s, %s, %s)', [d.id, normalized_name, colors_s, colored_symbols_s, legal_formats_s])
    db().commit()
コード例 #5
0
ファイル: view.py プロジェクト: stash86/Penny-Dreadful-Tools
 def prepare_deck(self, d):
     set_stars_and_top8(d)
     if d.get('colors') is not None:
         d.colors_safe = colors_html(d.colors, d.colored_symbols)
         d.name = deck_name.normalize(d)
     d.person_url = url_for('person', person_id=d.person_id)
     d.date_sort = dtutil.dt2ts(d.date)
     d.display_date = dtutil.display_date(d.date)
     d.show_record = d.wins or d.losses or d.draws
     if d.competition_id:
         d.competition_url = url_for('competition',
                                     competition_id=d.competition_id)
     d.url = url_for('decks', deck_id=d.id)
     d.export_url = url_for('export', deck_id=d.id)
     d.cmc_chart_url = url_for('cmc_chart', deck_id=d.id)
     if d.source_name == 'League' and d.wins + d.losses < 5 and d.competition_end_date > dtutil.now(
     ) and not d.get('retired', False):
         d.stars_safe = '<span title="Active in the current league">⊕</span> {stars}'.format(
             stars=d.stars_safe).strip()
         d.source_sort = '1'
     d.comp_row_len = len("{comp_name} (Piloted by {person}".format(
         comp_name=d.competition_name, person=d.person))
     if d.get('archetype_id', None):
         d.archetype_url = url_for('archetype', archetype_id=d.archetype_id)
     if d.omw is not None:
         d.omw = str(int(d.omw)) + '%'
     else:
         d.omw = ''
     d.has_legal_format = len(d.legal_formats) > 0
     d.pd_legal = 'Penny Dreadful' in d.legal_formats
     d.legal_icons = ''
     sets = legality.SEASONS
     if 'Penny Dreadful' in d.legal_formats:
         icon = rotation.last_rotation_ex()['code'].lower()
         n = sets.index(icon.upper()) + 1
         d.legal_icons += '<a href="{url}"><i class="ss ss-{code} ss-rare ss-grad">S{n}</i></a>'.format(
             url=url_for('season', season_id=n), code=icon, n=n)
     past_pd_formats = [
         fmt.replace('Penny Dreadful ', '') for fmt in d.legal_formats
         if 'Penny Dreadful ' in fmt
     ]
     past_pd_formats.sort(key=lambda code: -sets.index(code))
     for code in past_pd_formats:
         n = sets.index(code.upper()) + 1
         d.legal_icons += '<a href="{url}"><i class="ss ss-{set} ss-common ss-grad">S{n}</i></a>'.format(
             url=url_for('season', season_id=n), set=code.lower(), n=n)
     if 'Commander' in d.legal_formats:  # I think C16 looks the nicest.
         d.legal_icons += '<i class="ss ss-c16 ss-uncommon ss-grad">CMDR</i>'
     d.decklist = str(d).replace('\n', '<br>')
コード例 #6
0
ファイル: deck.py プロジェクト: kealdor/Penny-Dreadful-Tools
def prime_cache(d: Deck) -> None:
    set_colors(d)
    colors_s = json.dumps(d.colors)
    colored_symbols_s = json.dumps(d.colored_symbols)
    set_legality(d)
    legal_formats_s = json.dumps(list(d.legal_formats))
    normalized_name = deck_name.normalize(d)
    # If this is a new deck we're going to make a new record. If it's an existing deck we might as well update a few things that might have changed implementation but should otherwise be static. But leave wins/draws/losses/active date alone.
    sql = """
        INSERT INTO
            deck_cache (deck_id, normalized_name, colors, colored_symbols, legal_formats, wins, draws, losses, active_date)
        VALUES
            (%s, %s, %s, %s, %s, %s, %s, %s, %s)
        ON DUPLICATE KEY UPDATE normalized_name = %s, colors = %s, colored_symbols = %s, legal_formats = %s
    """
    db().execute(sql, [d.id, normalized_name, colors_s, colored_symbols_s, legal_formats_s, 0, 0, 0, dtutil.dt2ts(d.created_date), normalized_name, colors_s, colored_symbols_s, legal_formats_s])
    # If it was worth priming the in-db cache it's worth busting the in-memory cache to pick up the changes.
    redis.clear(f'decksite:deck:{d.id}')
コード例 #7
0
def prime_cache(d: Deck) -> None:
    set_colors(d)
    colors_s = json.dumps(d.colors)
    colored_symbols_s = json.dumps(d.colored_symbols)
    set_legality(d)
    legal_formats_s = json.dumps(list(d.legal_formats))
    normalized_name = deck_name.normalize(d)
    db().begin()
    db().execute('DELETE FROM deck_cache WHERE deck_id = %s', [d.id])
    sql = """
        INSERT INTO
            deck_cache (deck_id, normalized_name, colors, colored_symbols, legal_formats, wins, draws, losses, active_date)
        VALUES
            (%s, %s, %s, %s, %s, %s, %s, %s, %s)
    """
    db().execute(sql, [
        d.id, normalized_name, colors_s, colored_symbols_s, legal_formats_s, 0,
        0, 0,
        dtutil.dt2ts(d.created_date)
    ])
    db().commit()
    # If it was worth priming the in-db cache it's worth busting the in-memory cache to pick up the changes.
    redis.clear(f'decksite:deck:{d.id}')
コード例 #8
0
 def subtitle(self):
     return deck_name.normalize(self._deck)
コード例 #9
0
def test_normalize():
    d = Container({
        'original_name': 'Dimir Control',
        'archetype': 'Control',
        'colors': ['U', 'B']
    })
    assert deck_name.normalize(d) == 'Dimir Control'
    d.original_name = 'U/B Control'
    assert deck_name.normalize(d) == 'Dimir Control'
    d.original_name = 'dimir control'
    assert deck_name.normalize(d) == 'Dimir Control'
    d.original_name = 'U/B Reanimator'
    assert deck_name.normalize(d) == 'Dimir Reanimator'
    d.colors = ['B']
    d.original_name = 'penny dreadful black lifegain'
    assert deck_name.normalize(d) == 'Mono Black Lifegain'
    d.colors = ['G', 'U']
    d.original_name = 'biovisionary pd'
    assert deck_name.normalize(d) == 'Biovisionary'
    d.colors = ['R']
    d.archetype = 'Aggro'
    d.original_name = 'mono red ashling aggro'
    assert deck_name.normalize(d) == 'Mono Red Ashling Aggro'
    d.colors = ['W', 'U', 'B']
    d.archetype = 'Unclassified'
    d.original_name = 'penny dreadful esper mill'
    assert deck_name.normalize(d) == 'Esper Mill'
    d.colors = ['W', 'G']
    d.archetype = 'Aggro-Combo'
    d.original_name = 'penny dreadful gw tokens'
    assert deck_name.normalize(d) == 'Selesnya Tokens'
    d.colors = ['R', 'G', 'B']
    d.archetype = 'Control'
    d.original_name = 'Jund'
    assert deck_name.normalize(d) == 'Jund Control'
    d.archetype = None
    assert deck_name.normalize(d) == 'Jund'
    d.colors = ['W', 'G']
    d.original_name = 'White Green'
    d.archetype = 'Aggro'
    assert deck_name.normalize(d) == 'Selesnya Aggro'
    d.archetype = None
    assert deck_name.normalize(d) == 'Selesnya'
    d.colors = ['R']
    d.original_name = 'RDW'
    assert deck_name.normalize(d) == 'Red Deck Wins'
    d.original_name = 'Red Deck Wins'
    assert deck_name.normalize(d) == 'Red Deck Wins'
    d.colors = ['W']
    d.original_name = 'WW'
    assert deck_name.normalize(d) == 'White Weenie'
    d.original_name = 'White Weenie'
    assert deck_name.normalize(d) == 'White Weenie'
    d.colors = ['B']
    d.original_name = '[pd] Mono B Control'
    assert deck_name.normalize(d) == 'Mono Black Control'
    d.colors = ['B', 'R']
    d.original_name = 'BR Control'
    assert deck_name.normalize(d) == 'Rakdos Control'
    d.colors = ['B']
    d.original_name = 'b '
    assert deck_name.normalize(d) == 'Mono Black'
    d.colors = ['U']
    d.original_name = 'muc'
    assert deck_name.normalize(d) == 'Mono Blue Control'
    d.colors = ['R']
    d.original_name = 'RDW23'
    assert deck_name.normalize(
        d
    ) == 'Rdw23'  # This isn't ideal but see BWWave for why it's probably right.
    d.colors = ['B']
    d.original_name = 'Mono B Aristocrats III'
    assert deck_name.normalize(d) == 'Mono Black Aristocrats III'
    d.original_name = 'Mono B Aristocrats VI'
    assert deck_name.normalize(d) == 'Mono Black Aristocrats VI'
    d.original_name = 'Suicide Black'
    assert deck_name.normalize(d) == 'Suicide Black'
    d.colors = ['R']
    d.original_name = 'Penny Dreadful Sunday RDW'
    assert deck_name.normalize(d) == 'Red Deck Wins'
    d.original_name = '[Pd][hou] Harvest Quest'
    assert deck_name.normalize(d) == 'Harvest Quest'
    d.original_name = 'Pd_Vehicles'
    assert deck_name.normalize(d) == 'Vehicles'
    d.original_name = 'better red than dead'
    assert deck_name.normalize(d) == 'Better Red Than Dead'
    d.original_name = 'week one rdw'
    assert deck_name.normalize(d) == 'Week One Red Deck Wins'
    d.colors = ['U', 'R']
    d.original_name = '.ur control'
    assert deck_name.normalize(d) == 'Izzet Control'
    d.colors = ['G']
    d.original_name = 'mono g aggro'
    assert deck_name.normalize(d) == 'Mono Green Aggro'
    d.original_name = 'monog ramp'
    assert deck_name.normalize(d) == 'Mono Green Ramp'
    d.original_name = 'Monogreen Creatures'
    assert deck_name.normalize(d) == 'Mono Green Creatures'
    d.colors = ['R']
    d.original_name = 'S6 red Deck Wins'
    assert deck_name.normalize(d) == 'Red Deck Wins'
    d.original_name = 'S6red Deck Wins'
    assert deck_name.normalize(d) == 'Red Deck Wins'
    d.colors = ['W']
    d.original_name = 'Mono-W Soldiers'
    assert deck_name.normalize(d) == 'Mono White Soldiers'
    d.original_name = 'BWWave'
    assert deck_name.normalize(d) == 'Bwwave'  # Not ideal but ok.
コード例 #10
0
def test_normalize():
    d = Container({
        'name': 'Dimir Control',
        'archetype': 'Control',
        'colors': ['U', 'B']
    })
    assert deck_name.normalize(d) == 'Dimir Control'
    d.name = 'U/B Control'
    assert deck_name.normalize(d) == 'Dimir Control'
    d.name = 'dimir control'
    assert deck_name.normalize(d) == 'Dimir Control'
    d.name = 'U/B Reanimator'
    assert deck_name.normalize(d) == 'Dimir Reanimator'
    d.colors = ['B']
    d.name = 'penny dreadful black lifegain'
    assert deck_name.normalize(d) == 'Mono Black Lifegain'
    d.colors = ['G', 'U']
    d.name = 'biovisionary pd'
    assert deck_name.normalize(d) == 'Biovisionary'
    d.colors = ['R']
    d.archetype = 'Aggro'
    d.name = 'mono red ashling aggro'
    assert deck_name.normalize(d) == 'Mono Red Ashling Aggro'
    d.colors = ['W', 'U', 'B']
    d.archetype = 'Unclassified'
    d.name = 'penny dreadful esper mill'
    assert deck_name.normalize(d) == 'Esper Mill'
    d.colors = ['W', 'G']
    d.archetype = 'Aggro-Combo'
    d.name = 'penny dreadful gw tokens'
    assert deck_name.normalize(d) == 'Selesnya Tokens'
    d.colors = ['R', 'G', 'B']
    d.archetype = 'Control'
    d.name = 'Jund'
    assert deck_name.normalize(d) == 'Jund Control'
    d.archetype = None
    assert deck_name.normalize(d) == 'Jund'
    d.colors = ['W', 'G']
    d.name = 'White Green'
    d.archetype = 'Aggro'
    assert deck_name.normalize(d) == 'Selesnya Aggro'
    d.archetype = None
    assert deck_name.normalize(d) == 'Selesnya'
    d.colors = ['R']
    d.name = 'RDW'
    assert deck_name.normalize(d) == 'Red Deck Wins'
    d.name = 'Red Deck Wins'
    assert deck_name.normalize(d) == 'Red Deck Wins'
    d.colors = ['W']
    d.name = 'WW'
    assert deck_name.normalize(d) == 'White Weenie'
    d.name = 'White Weenie'
    assert deck_name.normalize(d) == 'White Weenie'
    d.colors = ['B']
    d.name = '[pd] Mono B Control'
    assert deck_name.normalize(d) == 'Mono Black Control'
    d.colors = ['B', 'R']
    d.name = 'BR Control'
    assert deck_name.normalize(d) == 'Rakdos Control'
    d.colors = ['B']
    d.name = 'b '
    assert deck_name.normalize(d) == 'Mono Black'
    d.colors = ['U']
    d.name = 'muc'
    assert deck_name.normalize(d) == 'Mono Blue Control'
    d.colors = ['R']
    d.name = 'RDW23'
    assert deck_name.normalize(d) == 'Red Deck Wins23'
    d.colors = ['B']
    d.name = 'Mono B Aristocrats III'
    assert deck_name.normalize(d) == 'Mono Black Aristocrats III'
    d.name = 'Mono B Aristocrats VI'
    assert deck_name.normalize(d) == 'Mono Black Aristocrats VI'
    d.name = 'Suicide Black'
    assert deck_name.normalize(d) == 'Suicide Black'
    d.colors = ['R']
    d.name = 'Penny Dreadful Sunday RDW'
    assert deck_name.normalize(d) == 'Red Deck Wins'
    d.name = '[Pd][hou] Harvest Quest'
    assert deck_name.normalize(d) == 'Harvest Quest'
    d.name = 'Pd_Vehicles'
    assert deck_name.normalize(d) == 'Vehicles'