async def rotation_hype_message() -> Optional[str]: rotation.clear_redis() runs, runs_percent, cs = rotation.read_rotation_files() runs_remaining = rotation.TOTAL_RUNS - runs newly_legal = [c for c in cs if c.hit_in_last_run and c.hits == rotation.TOTAL_RUNS / 2] newly_eliminated = [c for c in cs if not c.hit_in_last_run and c.status == 'Not Legal' and c.hits_needed == runs_remaining + 1] newly_hit = [c for c in cs if c.hit_in_last_run and c.hits == 1] num_undecided = len([c for c in cs if c.status == 'Undecided']) num_legal_cards = len([c for c in cs if c.status == 'Legal']) s = f'Rotation run number {runs} completed. Rotation is {runs_percent}% complete. {num_legal_cards} cards confirmed.' if not newly_hit + newly_legal + newly_eliminated and runs != 1 and runs % 5 != 0 and runs < rotation.TOTAL_RUNS / 2: return None # Sometimes there's nothing to report if len(newly_hit) > 0 and runs_remaining > runs: newly_hit_s = list_of_most_interesting(newly_hit) s += f'\nFirst hit for: {newly_hit_s}.' if len(newly_legal) > 0: newly_legal_s = list_of_most_interesting(newly_legal) s += f'\nConfirmed legal: {newly_legal_s}.' if len(newly_eliminated) > 0: newly_eliminated_s = list_of_most_interesting(newly_eliminated) s += f'\nEliminated: {newly_eliminated_s}.' s += f'\nUndecided: {num_undecided}.\n' if runs_percent >= 50: s += f"<{fetcher.decksite_url('/rotation/')}>" return s
def run() -> None: files = rotation.files() n = len(files) time_until = TIME_UNTIL_ROTATION - datetime.timedelta(weeks=1) if n >= rotation.TOTAL_RUNS: print( 'It is the moment of discovery, the triumph of the mind, and the end of this rotation.' ) return if n == 0 and TIME_UNTIL_ROTATION > datetime.timedelta(7): print( 'The monks of the North Tree rarely saw their kodama until the rotation, when it woke like a slumbering, angry bear.' ) print('ETA: {t}'.format( t=dtutil.display_time(int(time_until.total_seconds())))) return if n == 0: rotation.clear_redis(clear_files=True) #else: # rotation.clear_redis() all_prices = {} for url in configuration.get_list('cardhoarder_urls'): s = fetch_tools.fetch(url) s = ftfy.fix_encoding(s) all_prices[url] = parse_cardhoarder_prices(s) url = configuration.get_str('mtgotraders_url') if url: s = fetch_tools.fetch(url) all_prices['mtgotraders'] = parse_mtgotraders_prices(s) run_number = process(all_prices) if run_number == rotation.TOTAL_RUNS: make_final_list() try: url = f'{fetcher.decksite_url()}/api/rotation/clear_cache' fetch_tools.fetch(url) except Exception as c: # pylint: disable=broad-except print(c)
def rotation_clear_cache() -> Response: rotation.clear_redis() rotation.rotation_redis_store() return return_json({'success': True})