Exemple #1
0
def test_determine_league_name() -> None:
    start_date = dtutil.parse('2017-11-01 00:00:00', '%Y-%m-%d %H:%M:%S', dtutil.WOTC_TZ)
    end_date = dtutil.parse('2017-11-30 11:59:59.999', '%Y-%m-%d %H:%M:%S.%f', dtutil.WOTC_TZ)
    assert league.determine_league_name(start_date, end_date) == 'League November 2017'
    start_date = dtutil.parse('2017-09-01 00:00:00', '%Y-%m-%d %H:%M:%S', dtutil.WOTC_TZ)
    end_date = dtutil.parse('2017-10-10 11:59:59.999', '%Y-%m-%d %H:%M:%S.%f', dtutil.WOTC_TZ)
    assert league.determine_league_name(start_date, end_date) == 'League September 2017'
def test_determine_end_of_league():
    start_date = dtutil.parse('2017-11-01 00:00:00', '%Y-%m-%d %H:%M:%S', dtutil.WOTC_TZ)
    end_date = league.determine_end_of_league(start_date)
    assert dtutil.dt2ts(end_date) == 1512115199
    start_date = dtutil.parse('2017-10-31 11:59:59.999', '%Y-%m-%d %H:%M:%S.%f', dtutil.WOTC_TZ)
    end_date = league.determine_end_of_league(start_date)
    assert dtutil.dt2ts(end_date) == 1512115199
def test_parse() -> None:
    s = '1970-01-01 00:00:00'
    dt = dtutil.parse(s, '%Y-%m-%d %H:%M:%S', timezone('UTC'))
    assert '{:%Y-%m-%d %H:%M:%S %z}'.format(dt) == '1970-01-01 00:00:00 +0000'
    s = '2016-01-01 00:00:00'
    dt = dtutil.parse(s, '%Y-%m-%d %H:%M:%S', timezone('UTC'))
    assert '{:%Y-%m-%d %H:%M:%S %z}'.format(dt) == '2016-01-01 00:00:00 +0000'
    dt = dtutil.parse(s, '%Y-%m-%d %H:%M:%S', timezone('America/Los_Angeles'))
    assert '{:%Y-%m-%d %H:%M:%S %z}'.format(dt) == '2016-01-01 08:00:00 +0000'
Exemple #4
0
def tournament(url, name):
    s = fetcher.internal.fetch(url, character_encoding='utf-8')

    # Tournament details
    soup = BeautifulSoup(s, 'html.parser')
    cell = soup.find('div', {'id': 'EventReport'}).find_all('td')[1]
    # Hack in the known start time because it's not in the page.
    start_time = '19:00'
    name = cell.find('a').string.strip()
    if 'Saturday' in name or 'Sunday' in name or 'PDS' in name:
        start_time = '13:30'
    date_s = cell.find('br').next.strip() + ' {start_time}'.format(
        start_time=start_time)
    if '-0001' in date_s:
        # Tournament has been incorrectly configured.
        return 0

    dt = dtutil.parse(date_s, '%d %B %Y %H:%M', dtutil.GATHERLING_TZ)
    competition_id = competition.get_or_insert_competition(
        dt, dt, name, 'Penny Dreadful {day}s'.format(
            day=dtutil.day_of_week(dt, dtutil.GATHERLING_TZ)), url)
    table = soup.find(text='Current Standings').find_parent('table')
    ranks = rankings(table)

    return add_decks(dt, competition_id, ranks, s)
Exemple #5
0
def subreddit(start_date: datetime.datetime,
              end_date: datetime.datetime,
              max_items: int = sys.maxsize) -> List[Container]:
    try:
        redis_key = 'decksite:news:subreddit'
        items = redis.get_container_list(redis_key)
        if items:
            for item in items:
                item.date = dtutil.ts2dt(item.date)
            return items
        feed = fetcher.subreddit()
        items = []
        for entry in feed.entries:
            item = Container({
                'title':
                entry.title,
                'date':
                dtutil.parse(entry.updated, '%Y-%m-%dT%H:%M:%S+00:00',
                             dtutil.UTC_TZ),
                'url':
                entry.link,
                'type':
                'subreddit-post'
            })
            if item.date > end_date:
                continue
            if item.date < start_date:
                break
            items.append(item)
            if len(items) >= max_items:
                break
        redis.store(redis_key, items, ex=3600)
        return items
    except ConnectionError:
        return []
Exemple #6
0
def test_display_date():
    dt = dtutil.parse('2008-03-29', '%Y-%m-%d', dtutil.WOTC_TZ)
    assert dtutil.display_date(dt) == 'Mar 29th, 2008'
    dt = dtutil.parse('2008-03-29 02:00', '%Y-%m-%d %H:%M', timezone('UTC'))
    assert dtutil.display_date(dt) == 'Mar 28th, 2008'
    dt = datetime.datetime.now(
        datetime.timezone.utc) - datetime.timedelta(seconds=10)
    assert dtutil.display_date(dt).find('seconds ago') >= 0
    dt = datetime.datetime.now(
        datetime.timezone.utc) + datetime.timedelta(hours=72)
    assert dtutil.display_date(dt).find('days') >= 0
    assert dtutil.display_date(dt).find('from now') >= 0
    assert dtutil.display_date(dt).find('ago') == -1
    dt = datetime.datetime.now(datetime.timezone.utc)
    assert dtutil.display_date(dt).find('just now') >= 0
    assert dtutil.display_date(dt).find('from now') == -1
def ad_hoc() -> None:
    try:
        start = dtutil.parse(sys.argv[2], '%Y-%m-%d', dtutil.GATHERLING_TZ)
    except (IndexError, TypeError, ValueError):
        start = dtutil.now() - datetime.timedelta(days=7)
    print(
        f'Checking all Gatherling decks from {start}. To check from a different date supply it as a commandline arg in the form YYYY-MM-DD'
    )
    decks = deck.load_decks(
        f"d.created_date >= UNIX_TIMESTAMP('{start}') AND ct.name = 'Gatherling'"
    )
    print(f'Found {len(decks)} decks.')
    searcher = WhooshSearcher()
    for d in decks:
        comments = fetcher.gatherling_deck_comments(d)
        for c in comments:
            if '=' not in c:
                print(f'Ignoring {c}')
                continue
            print(c)

            def best_match_f(s: str) -> Optional[str]:
                return searcher.search(s.strip()).get_best_match()

            placeholder, real = map(best_match_f, c.split('='))
            print(
                f'I think this means replace {placeholder} with {real}. Go ahead? (Y/n)'
            )
            answer = input()
            if answer == '' or answer.lower() == 'y':
                rows_affected = db().execute(
                    'UPDATE deck_card SET card = %s WHERE deck_id = %s AND card = %s',
                    [real, d.id, placeholder])
                print(f'{rows_affected} rows were updated.')
Exemple #8
0
def post_news(news_id: int, title: str = None, url: str = None, date: str = None) -> wrappers.Response:
    if request.form.get('action') == 'delete':
        ns.delete(news_id)
    else:
        if date is not None and title is not None and url is not None:
            date_dt = dtutil.parse(date, dtutil.FORM_FORMAT, dtutil.WOTC_TZ)
            ns.add_or_update_news(news_id, date_dt, title, url)
    return redirect(url_for('edit_news'))
Exemple #9
0
def determine_league_name(start_date: datetime.datetime, end_date: datetime.datetime) -> str:
    start_of_end_month_s = '{year}-{month}-01 00:00:00'.format(year=end_date.year, month=end_date.month)
    start_of_end_month = dtutil.parse(start_of_end_month_s, '%Y-%m-%d %H:%M:%S', dtutil.WOTC_TZ).astimezone(dtutil.WOTC_TZ)
    if start_date + datetime.timedelta(weeks=2) < start_of_end_month:
        key_date = start_date
    else:
        key_date = end_date
    return 'League {MM} {YYYY}'.format(MM=calendar.month_name[key_date.month], YYYY=key_date.year)
 def __init__(self, competition_id: int, decks: Sequence[Deck]) -> None:
     super().__init__()
     self.hide_active_runs = False
     self.competition_id = competition_id
     far_future = dtutil.parse('2100-01-01', '%Y-%m-%d', dtutil.UTC_TZ)
     self.decks = sorted(decks,
                         key=lambda d: d.person + str(
                             (far_future - d.created_date).total_seconds()))
def post_news():
    print(request.form)
    if request.form.get('action') == 'delete':
        ns.delete(request.form.get('id'))
    else:
        date = dtutil.parse(request.form.get('date'), dtutil.FORM_FORMAT, dtutil.WOTC_TZ)
        ns.add_or_update_news(request.form.get('id'), date, request.form.get('title'), request.form.get('body'))
    return edit_news()
def postprocess(setinfo: SetInfoType) -> SetInfoType:
    setinfo['enter_date_dt'] = dtutil.parse(setinfo['enterDate']['exact'],
                                            WIS_DATE_FORMAT, dtutil.WOTC_TZ)
    if setinfo['code'] == 'DOM':  # !quality
        setinfo['mtgo_code'] = 'DAR'
    else:
        setinfo['mtgo_code'] = setinfo['code']
    return setinfo
Exemple #13
0
def postprocess(setinfo: SetInfoType) -> SetInfoType:
    setinfo['enter_date_dt'] = dtutil.parse(setinfo['enter_date'],
                                            '%Y-%m-%dT%H:%M:%S.%f',
                                            dtutil.WOTC_TZ)
    if setinfo['code'] == 'DOM':  # !quality
        setinfo['mtgo_code'] = 'DAR'
    else:
        setinfo['mtgo_code'] = setinfo['code']
    return setinfo
    def parse(cls, json: 'fetcher.WISSetInfoType') -> 'SetInfo':
        json['mtgoCode'] = json['code']
        json.update(OVERRIDES.get(json['name'], {}))  # type: ignore

        return cls(name=json['name'],
                   code=json['code'],
                   codename=json['codename'],
                   mtgo_code=json['mtgoCode'],
                   enter_date=DateType(**json['enterDate']),
                   exit_date=DateType(**json['exitDate']),
                   enter_date_dt=dtutil.parse(json['enterDate']['exact'], WIS_DATE_FORMAT, dtutil.WOTC_TZ) if json['enterDate']['exact'] else dtutil.ts2dt(0),
                   )
Exemple #15
0
def test_determine_end_of_league() -> None:
    next_rotation = dtutil.parse('2018-02-01 00:00:00', '%Y-%m-%d %H:%M:%S', dtutil.WOTC_TZ)
    start_date = dtutil.parse('2017-11-01 00:00:00', '%Y-%m-%d %H:%M:%S', dtutil.WOTC_TZ)
    end_date = league.determine_end_of_league(start_date, next_rotation)
    assert dtutil.dt2ts(end_date) == 1512115199
    start_date = dtutil.parse('2017-10-31 11:59:59.999', '%Y-%m-%d %H:%M:%S.%f', dtutil.WOTC_TZ)
    end_date = league.determine_end_of_league(start_date, next_rotation)
    assert dtutil.dt2ts(end_date) == 1512115199
    next_rotation = dtutil.parse('2018-07-13 00:00:00', '%Y-%m-%d %H:%M:%S', dtutil.WOTC_TZ)
    start_date = dtutil.parse('2018-05-31 11:04:15', '%Y-%m-%d %H:%M:%S', dtutil.WOTC_TZ)
    end_date = league.determine_end_of_league(start_date, next_rotation)
    assert dtutil.dt2ts(end_date) == dtutil.dt2ts(next_rotation) - 1
    start_date = dtutil.parse('2018-07-13 00:00:00', '%Y-%m-%d %H:%M:%S', dtutil.WOTC_TZ)
    end_date = league.determine_end_of_league(start_date, next_rotation)
    assert end_date == dtutil.parse('2018-07-31 23:59:59', '%Y-%m-%d %H:%M:%S', dtutil.WOTC_TZ)
    start_date = dtutil.parse('2018-08-01 00:00:00', '%Y-%m-%d %H:%M:%S', dtutil.WOTC_TZ)
    end_date = league.determine_end_of_league(start_date, next_rotation)
    assert end_date == dtutil.parse('2018-08-31 23:59:59', '%Y-%m-%d %H:%M:%S', dtutil.WOTC_TZ)
Exemple #16
0
def determine_end_of_league(start_date):
    if start_date.day < 15:
        month = start_date.month + 1
    else:
        month = start_date.month + 2
    if month > 12:
        year = start_date.year + 1
        month = month - 12
    else:
        year = start_date.year
    end_date_s = '{year}-{month}-01 00:00:00'.format(year=year, month=month)
    end_date = dtutil.parse(end_date_s, '%Y-%m-%d %H:%M:%S', dtutil.WOTC_TZ)
    if end_date > rotation.next_rotation():
        end_date = rotation.next_rotation()
    return end_date - datetime.timedelta(seconds=1)
 def __init__(self, decks: List[Deck], matches: List[Container]) -> None:
     super().__init__()
     self.matches = matches
     self.hide_active_runs = False
     far_future = dtutil.parse('2100-01-01', '%Y-%m-%d', dtutil.UTC_TZ)
     self.decks = sorted(
         decks, key=lambda d: d.person + str(far_future - d.created_date))
     decks_by_id = {d.id: d for d in decks}
     for m in self.matches:
         m.display_date = dtutil.display_date(m.date)
         m.left_deck = decks_by_id.get(int(m.left_id))
         m.right_deck = decks_by_id.get(int(m.right_id))
         m.left_url = url_for('deck', deck_id=m.left_id)
         if m.get('right_id'):
             m.right_url = url_for('deck', deck_id=m.right_id)
         else:
             m.right_url = None
Exemple #18
0
def determine_end_of_league(start_date: datetime.datetime, next_rotation: datetime.datetime, lookahead: bool = True) -> datetime.datetime:
    if start_date.day < 15:
        month = start_date.month + 1
    else:
        month = start_date.month + 2
    if month > 12:
        year = start_date.year + 1
        month = month - 12
    else:
        year = start_date.year
    end_date_s = '{year}-{month}-01 00:00:00'.format(year=year, month=month)
    end_date = dtutil.parse(end_date_s, '%Y-%m-%d %H:%M:%S', dtutil.WOTC_TZ).astimezone(dtutil.WOTC_TZ)
    if start_date < next_rotation < end_date:
        end_date = next_rotation
    end_date = end_date - datetime.timedelta(seconds=1)
    # Now we have an end date for this league let's make sure that it doesn't make the next league too short. See #5061.
    if lookahead:
        next_end_date = determine_end_of_league(end_date, next_rotation, False)
        if next_end_date - end_date < datetime.timedelta(days=14):
            end_date = next_end_date
    return end_date
def get_dt(day_s: str, start_time: str, timezone: Any) -> datetime.datetime:
    date_s = day_s + ' {start_time}'.format(start_time=start_time)
    return dtutil.parse(date_s, '%d %B %Y %H:%M', timezone)
def disabled() -> None:
    match.insert_match(
        dtutil.parse('10/2/2016 0:18:08', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        233, 2, 279, 0)
    match.insert_match(
        dtutil.parse('10/2/2016 0:28:25', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        234, 2, 231, 0)
    match.insert_match(
        dtutil.parse('10/2/2016 1:31:02', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        234, 2, 233, 0)
    match.insert_match(
        dtutil.parse('10/2/2016 3:07:38', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        231, 2, 227, 1)
    match.insert_match(
        dtutil.parse('10/2/2016 13:21:58', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 231, 2, 233, 0)
    match.insert_match(
        dtutil.parse('10/2/2016 16:42:54', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 234, 2, 232, 0)
    match.insert_match(
        dtutil.parse('10/2/2016 21:38:31', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 234, 2, 240, 1)
    match.insert_match(
        dtutil.parse('10/2/2016 21:51:14', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 239, 2, 231, 0)
    match.insert_match(
        dtutil.parse('10/2/2016 22:36:02', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 240, 2, 239, 0)
    match.insert_match(
        dtutil.parse('10/3/2016 16:25:48', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 234, 2, 228, 0)
    match.insert_match(
        dtutil.parse('10/3/2016 20:12:06', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 232, 2, 228, 1)
    match.insert_match(
        dtutil.parse('10/3/2016 20:35:35', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 242, 2, 231, 0)
    match.insert_match(
        dtutil.parse('10/3/2016 23:30:40', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 240, 2, 245, 0)
    match.insert_match(
        dtutil.parse('10/4/2016 1:59:41', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        247, 2, 246, 0)
    match.insert_match(
        dtutil.parse('10/4/2016 13:37:35', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 247, 2, 238, 0)
    match.insert_match(
        dtutil.parse('10/4/2016 18:05:12', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 248, 2, 247, 0)
    match.insert_match(
        dtutil.parse('10/4/2016 20:05:29', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 249, 2, 247, 1)
    match.insert_match(
        dtutil.parse('10/4/2016 20:59:42', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 247, 2, 282, 0)
    match.insert_match(
        dtutil.parse('10/5/2016 0:01:53', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        246, 2, 251, 1)
    match.insert_match(
        dtutil.parse('10/5/2016 2:31:44', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        248, 2, 264, 1)
    match.insert_match(
        dtutil.parse('10/5/2016 15:49:53', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 246, 2, 249, 1)
    match.insert_match(
        dtutil.parse('10/5/2016 16:19:55', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 249, 2, 248, 1)
    match.insert_match(
        dtutil.parse('10/5/2016 17:00:27', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 246, 2, 252, 0)
    match.insert_match(
        dtutil.parse('10/5/2016 17:02:56', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 248, 2, 251, 1)
    match.insert_match(
        dtutil.parse('10/5/2016 20:17:02', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 241, 2, 248, 1)
    match.insert_match(
        dtutil.parse('10/5/2016 22:38:15', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 252, 2, 253, 1)
    match.insert_match(
        dtutil.parse('10/6/2016 17:57:02', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 255, 2, 256, 1)
    match.insert_match(
        dtutil.parse('10/6/2016 18:42:06', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 257, 2, 256, 1)
    match.insert_match(
        dtutil.parse('10/6/2016 19:11:41', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 249, 2, 257, 0)
    match.insert_match(
        dtutil.parse('10/6/2016 19:24:17', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 256, 2, 258, 1)
    match.insert_match(
        dtutil.parse('10/6/2016 19:48:29', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 256, 2, 249, 0)
    match.insert_match(
        dtutil.parse('10/6/2016 21:05:31', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 256, 2, 232, 0)
    match.insert_match(
        dtutil.parse('10/6/2016 21:23:45', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 257, 2, 301, 0)
    match.insert_match(
        dtutil.parse('10/6/2016 23:42:09', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 258, 2, 260, 1)
    match.insert_match(
        dtutil.parse('10/7/2016 1:58:24', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        257, 2, 258, 1)
    match.insert_match(
        dtutil.parse('10/7/2016 6:08:27', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        255, 2, 261, 1)
    match.insert_match(
        dtutil.parse('10/7/2016 15:05:04', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 258, 2, 262, 0)
    match.insert_match(
        dtutil.parse('10/7/2016 19:35:42', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 260, 2, 254, 1)
    match.insert_match(
        dtutil.parse('10/8/2016 1:06:56', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        262, 2, 232, 1)
    match.insert_match(
        dtutil.parse('10/8/2016 1:36:57', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        260, 2, 232, 0)
    match.insert_match(
        dtutil.parse('10/8/2016 2:05:31', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        257, 2, 260, 0)
    match.insert_match(
        dtutil.parse('10/8/2016 12:06:26', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 237, 2, 245, 1)
    match.insert_match(
        dtutil.parse('10/8/2016 16:36:17', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 241, 2, 263, 0)
    match.insert_match(
        dtutil.parse('10/9/2016 13:31:10', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 241, 2, 255, 1)
    match.insert_match(
        dtutil.parse('10/9/2016 14:06:28', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 241, 2, 264, 0)
    match.insert_match(
        dtutil.parse('10/9/2016 14:24:57', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 258, 2, 241, 0)
    match.insert_match(
        dtutil.parse('10/10/2016 22:57:48', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 263, 2, 252, 0)
    match.insert_match(
        dtutil.parse('10/11/2016 16:44:16', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 261, 2, 269, 0)
    match.insert_match(
        dtutil.parse('10/11/2016 17:20:03', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 263, 2, 261, 0)
    match.insert_match(
        dtutil.parse('10/11/2016 18:56:03', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 266, 2, 261, 0)
    match.insert_match(
        dtutil.parse('10/11/2016 20:35:36', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 261, 2, 271, 0)
    match.insert_match(
        dtutil.parse('10/11/2016 21:09:15', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 263, 2, 271, 1)
    match.insert_match(
        dtutil.parse('10/12/2016 15:58:19', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 263, 2, 244, 0)
    match.insert_match(
        dtutil.parse('10/14/2016 15:23:19', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 264, 2, 267, 1)
    match.insert_match(
        dtutil.parse('10/15/2016 16:49:52', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 275, 2, 274, 0)
    match.insert_match(
        dtutil.parse('10/16/2016 6:20:41', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 275, 2, 273, 0)
    match.insert_match(
        dtutil.parse('10/17/2016 16:53:14', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 266, 2, 275, 0)
    match.insert_match(
        dtutil.parse('10/18/2016 1:03:28', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 260, 2, 268, 0)
    match.insert_match(
        dtutil.parse('10/18/2016 17:07:41', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 275, 2, 267, 1)
    match.insert_match(
        dtutil.parse('10/18/2016 17:54:29', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 275, 2, 278, 1)
    match.insert_match(
        dtutil.parse('10/18/2016 20:58:12', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 267, 2, 277, 0)
    match.insert_match(
        dtutil.parse('10/18/2016 21:21:54', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 266, 2, 279, 1)
    match.insert_match(
        dtutil.parse('10/18/2016 23:55:41', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 277, 2, 280, 0)
    match.insert_match(
        dtutil.parse('10/19/2016 0:08:47', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 251, 2, 276, 0)
    match.insert_match(
        dtutil.parse('10/21/2016 17:27:38', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 266, 2, 281, 1)
    match.insert_match(
        dtutil.parse('10/21/2016 17:58:53', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 265, 2, 264, 0)
    match.insert_match(
        dtutil.parse('10/22/2016 17:47:50', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 281, 2, 264, 1)
    match.insert_match(
        dtutil.parse('10/22/2016 19:04:44', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 281, 2, 268, 1)
    match.insert_match(
        dtutil.parse('10/22/2016 22:27:40', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 266, 2, 277, 0)
    match.insert_match(
        dtutil.parse('10/22/2016 23:05:20', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 277, 2, 273, 0)
    match.insert_match(
        dtutil.parse('10/23/2016 3:41:29', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 281, 2, 273, 1)
    match.insert_match(
        dtutil.parse('10/23/2016 3:54:56', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 281, 2, 282, 0)
    match.insert_match(
        dtutil.parse('10/23/2016 13:00:10', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 253, 2, 267, 1)
    match.insert_match(
        dtutil.parse('10/23/2016 13:12:24', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 283, 2, 280, 0)
    match.insert_match(
        dtutil.parse('10/23/2016 13:34:52', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 253, 2, 284, 0)
    match.insert_match(
        dtutil.parse('10/23/2016 14:12:30', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 267, 2, 283, 1)
    match.insert_match(
        dtutil.parse('10/23/2016 14:38:40', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 285, 2, 283, 0)
    match.insert_match(
        dtutil.parse('10/23/2016 16:09:03', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 283, 2, 286, 0)
    match.insert_match(
        dtutil.parse('10/23/2016 17:43:39', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 284, 2, 283, 1)
    match.insert_match(
        dtutil.parse('10/23/2016 18:57:13', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 284, 2, 282, 1)
    match.insert_match(
        dtutil.parse('10/23/2016 19:58:42', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 284, 2, 287, 0)
    match.insert_match(
        dtutil.parse('10/23/2016 20:32:55', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 284, 2, 288, 1)
    match.insert_match(
        dtutil.parse('10/23/2016 20:57:13', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 289, 2, 288, 0)
    match.insert_match(
        dtutil.parse('10/24/2016 0:45:48', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 289, 2, 282, 0)
    match.insert_match(
        dtutil.parse('10/24/2016 1:33:04', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 290, 2, 289, 0)
    match.insert_match(
        dtutil.parse('10/24/2016 10:25:50', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 288, 2, 285, 1)
    match.insert_match(
        dtutil.parse('10/24/2016 16:56:57', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 289, 2, 291, 0)
    match.insert_match(
        dtutil.parse('10/24/2016 17:29:46', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 282, 2, 291, 0)
    match.insert_match(
        dtutil.parse('10/24/2016 18:37:35', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 291, 2, 292, 1)
    match.insert_match(
        dtutil.parse('10/24/2016 18:57:55', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 292, 2, 289, 0)
    match.insert_match(
        dtutil.parse('10/24/2016 20:50:22', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 290, 2, 292, 0)
    match.insert_match(
        dtutil.parse('10/25/2016 17:04:42', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 291, 2, 294, 1)
    match.insert_match(
        dtutil.parse('10/26/2016 0:19:27', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 290, 2, 293, 0)
    match.insert_match(
        dtutil.parse('10/26/2016 14:23:25', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 293, 2, 295, 1)
    match.insert_match(
        dtutil.parse('10/26/2016 15:46:29', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 293, 2, 291, 0)
    match.insert_match(
        dtutil.parse('10/29/2016 5:05:18', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 298, 2, 297, 0)
    match.insert_match(
        dtutil.parse('10/29/2016 16:36:58', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 253, 2, 274, 0)
    match.insert_match(
        dtutil.parse('10/29/2016 17:32:41', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 290, 2, 274, 0)
    match.insert_match(
        dtutil.parse('10/30/2016 14:54:02', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 298, 2, 293, 0)
    match.insert_match(
        dtutil.parse('10/30/2016 22:28:49', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 293, 2, 297, 0)
def test_now() -> None:
    then = dtutil.parse('2016-01-01', '%Y-%m-%d', dtutil.WOTC_TZ)
    now = dtutil.now()
    assert (now - then).total_seconds() > 0
def disabled():
    # Time is the earliest time that either player reported.
    match.insert_match(
        dtutil.parse('8/30/2016 20:13:27', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 141, 2, 140, 0)
    match.insert_match(
        dtutil.parse('8/31/2016 1:06:40', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        146, 2, 144, 0)
    match.insert_match(
        dtutil.parse('8/31/2016 1:32:28', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        144, 2, 148, 0)
    match.insert_match(
        dtutil.parse('8/31/2016 1:55:33', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        150, 2, 151, 0)
    match.insert_match(
        dtutil.parse('8/31/2016 1:59:12', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        149, 2, 152, 0)
    match.insert_match(
        dtutil.parse('8/31/2016 2:54:28', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        146, 2, 149, 1)
    match.insert_match(
        dtutil.parse('8/31/2016 3:26:32', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        153, 2, 150, 1)
    match.insert_match(
        dtutil.parse('8/31/2016 6:12:11', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        157, 2, 156, 0)
    match.insert_match(
        dtutil.parse('8/31/2016 12:43:09', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 157, 2, 146, 0)
    match.insert_match(
        dtutil.parse('8/31/2016 15:14:29', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 146, 2, 147, 1)
    match.insert_match(
        dtutil.parse('8/31/2016 15:59:13', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 147, 2, 150, 0)
    match.insert_match(
        dtutil.parse('8/31/2016 16:36:03', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 150, 2, 146, 1)
    match.insert_match(
        dtutil.parse('8/31/2016 16:46:57', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 147, 2, 144, 0)
    match.insert_match(
        dtutil.parse('8/31/2016 17:06:25', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 150, 2, 159, 0)
    match.insert_match(
        dtutil.parse('8/31/2016 20:13:20', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 141, 2, 144, 0)
    match.insert_match(
        dtutil.parse('8/31/2016 20:40:44', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 160, 2, 155, 1)
    match.insert_match(
        dtutil.parse('8/31/2016 22:33:14', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 140, 2, 151, 1)
    match.insert_match(
        dtutil.parse('8/31/2016 22:54:14', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 151, 2, 139, 0)
    match.insert_match(
        dtutil.parse('8/31/2016 23:13:44', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 144, 2, 139, 0)
    match.insert_match(
        dtutil.parse('8/31/2016 23:43:48', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 161, 2, 162, 1)
    match.insert_match(
        dtutil.parse('9/1/2016 0:04:23', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        163, 2, 161, 1)
    match.insert_match(
        dtutil.parse('9/1/2016 0:07:43', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        162, 2, 151, 1)
    match.insert_match(
        dtutil.parse('9/1/2016 0:25:10', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        158, 2, 151, 0)
    match.insert_match(
        dtutil.parse('9/1/2016 0:35:27', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        158, 2, 161, 0)
    match.insert_match(
        dtutil.parse('9/1/2016 1:09:46', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        164, 2, 161, 1)
    match.insert_match(
        dtutil.parse('9/1/2016 1:19:20', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        148, 2, 158, 1)
    match.insert_match(
        dtutil.parse('9/1/2016 1:39:18', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        163, 2, 164, 1)
    match.insert_match(
        dtutil.parse('9/1/2016 2:39:05', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        164, 2, 153, 1)
    match.insert_match(
        dtutil.parse('9/1/2016 13:09:47', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        157, 2, 163, 0)
    match.insert_match(
        dtutil.parse('9/1/2016 17:27:16', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        142, 2, 166, 1)
    match.insert_match(
        dtutil.parse('9/1/2016 18:29:24', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        166, 2, 162, 0)
    match.insert_match(
        dtutil.parse('9/1/2016 20:22:30', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        153, 2, 166, 0)
    match.insert_match(
        dtutil.parse('9/2/2016 17:02:22', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        167, 2, 147, 0)
    match.insert_match(
        dtutil.parse('9/2/2016 18:30:48', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        168, 2, 147, 0)
    match.insert_match(
        dtutil.parse('9/3/2016 2:04:24', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        169, 2, 164, 0)
    match.insert_match(
        dtutil.parse('9/3/2016 2:29:14', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        163, 2, 169, 1)
    match.insert_match(
        dtutil.parse('9/3/2016 17:27:07', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        171, 2, 166, 1)
    match.insert_match(
        dtutil.parse('9/3/2016 17:59:05', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        171, 2, 164, 0)
    match.insert_match(
        dtutil.parse('9/3/2016 19:09:12', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        160, 2, 166, 0)
    match.insert_match(
        dtutil.parse('9/3/2016 20:33:14', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        160, 2, 169, 1)
    match.insert_match(
        dtutil.parse('9/3/2016 22:38:57', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        172, 2, 160, 0)
    match.insert_match(
        dtutil.parse('9/3/2016 23:59:06', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        169, 2, 173, 1)
    match.insert_match(
        dtutil.parse('9/4/2016 1:12:04', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        172, 2, 169, 0)
    match.insert_match(
        dtutil.parse('9/4/2016 1:29:36', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        173, 2, 140, 0)
    match.insert_match(
        dtutil.parse('9/4/2016 1:55:01', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        174, 2, 173, 1)
    match.insert_match(
        dtutil.parse('9/4/2016 2:05:58', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        163, 2, 140, 0)
    match.insert_match(
        dtutil.parse('9/4/2016 12:46:16', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        157, 2, 174, 1)
    match.insert_match(
        dtutil.parse('9/4/2016 17:22:49', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        172, 2, 173, 1)
    match.insert_match(
        dtutil.parse('9/4/2016 20:06:53', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        174, 2, 172, 1)
    match.insert_match(
        dtutil.parse('9/5/2016 2:20:14', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        178, 2, 174, 1)
    match.insert_match(
        dtutil.parse('9/5/2016 3:13:32', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        178, 2, 172, 0)
    match.insert_match(
        dtutil.parse('9/5/2016 12:18:43', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        157, 2, 167, 1)
    match.insert_match(
        dtutil.parse('9/5/2016 13:05:56', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        168, 2, 167, 1)
    match.insert_match(
        dtutil.parse('9/6/2016 0:56:16', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        182, 2, 173, 0)
    match.insert_match(
        dtutil.parse('9/6/2016 1:24:56', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        174, 2, 182, 0)
    match.insert_match(
        dtutil.parse('9/6/2016 1:54:04', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        182, 2, 178, 1)
    match.insert_match(
        dtutil.parse('9/6/2016 18:35:04', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        173, 2, 182, 0)
    match.insert_match(
        dtutil.parse('9/6/2016 20:27:01', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        167, 2, 182, 0)
    match.insert_match(
        dtutil.parse('9/6/2016 20:51:18', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        160, 2, 182, 0)
    match.insert_match(
        dtutil.parse('9/6/2016 20:54:20', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        167, 2, 173, 0)
    match.insert_match(
        dtutil.parse('9/6/2016 21:24:24', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        170, 2, 161, 1)
    match.insert_match(
        dtutil.parse('9/6/2016 21:36:31', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        173, 2, 185, 1)
    match.insert_match(
        dtutil.parse('9/6/2016 22:34:24', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        173, 2, 180, 0)
    match.insert_match(
        dtutil.parse('9/6/2016 23:00:45', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        184, 2, 186, 0)
    match.insert_match(
        dtutil.parse('9/6/2016 23:54:40', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        186, 2, 140, 1)
    match.insert_match(
        dtutil.parse('9/7/2016 16:22:45', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        190, 2, 185, 0)
    match.insert_match(
        dtutil.parse('9/7/2016 18:06:36', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        185, 2, 189, 0)
    match.insert_match(
        dtutil.parse('9/7/2016 20:15:33', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        186, 2, 185, 1)
    match.insert_match(
        dtutil.parse('9/7/2016 21:57:38', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        187, 2, 178, 0)
    match.insert_match(
        dtutil.parse('9/8/2016 1:55:22', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        184, 2, 188, 1)
    match.insert_match(
        dtutil.parse('9/8/2016 21:04:55', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        173, 2, 192, 0)
    match.insert_match(
        dtutil.parse('9/8/2016 22:02:57', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        192, 2, 155, 0)
    match.insert_match(
        dtutil.parse('9/8/2016 22:24:55', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        194, 2, 193, 1)
    match.insert_match(
        dtutil.parse('9/8/2016 22:37:33', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        186, 2, 193, 0)
    match.insert_match(
        dtutil.parse('9/8/2016 23:41:50', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        194, 2, 192, 0)
    match.insert_match(
        dtutil.parse('9/8/2016 23:58:03', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        192, 2, 184, 1)
    match.insert_match(
        dtutil.parse('9/9/2016 0:20:28', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        184, 2, 185, 0)
    match.insert_match(
        dtutil.parse('9/9/2016 1:12:04', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        194, 2, 184, 0)
    match.insert_match(
        dtutil.parse('9/9/2016 16:50:39', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        190, 2, 193, 0)
    match.insert_match(
        dtutil.parse('9/9/2016 22:40:28', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        186, 2, 194, 1)
    match.insert_match(
        dtutil.parse('9/9/2016 22:47:49', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        196, 2, 192, 0)
    match.insert_match(
        dtutil.parse('9/10/2016 11:39:35', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 207, 2, 198, 1)
    match.insert_match(
        dtutil.parse('9/10/2016 12:53:54', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 181, 2, 155, 1)
    match.insert_match(
        dtutil.parse('9/10/2016 20:14:30', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 201, 2, 196, 0)
    match.insert_match(
        dtutil.parse('9/10/2016 20:49:09', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 202, 2, 170, 0)
    match.insert_match(
        dtutil.parse('9/11/2016 7:54:24', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        191, 2, 201, 1)
    match.insert_match(
        dtutil.parse('9/11/2016 12:32:42', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 181, 2, 199, 0)
    match.insert_match(
        dtutil.parse('9/11/2016 12:45:40', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 190, 2, 201, 1)
    match.insert_match(
        dtutil.parse('9/11/2016 13:29:05', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 181, 2, 207, 1)
    match.insert_match(
        dtutil.parse('9/11/2016 18:30:42', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 203, 2, 204, 1)
    match.insert_match(
        dtutil.parse('9/12/2016 22:23:12', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 196, 2, 207, 0)
    match.insert_match(
        dtutil.parse('9/12/2016 23:12:08', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 196, 2, 202, 1)
    match.insert_match(
        dtutil.parse('9/13/2016 0:19:39', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        170, 2, 193, 0)
    match.insert_match(
        dtutil.parse('9/13/2016 1:23:55', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        204, 2, 193, 1)
    match.insert_match(
        dtutil.parse('9/13/2016 17:48:01', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 203, 2, 181, 0)
    match.insert_match(
        dtutil.parse('9/13/2016 19:00:03', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 207, 2, 206, 1)
    match.insert_match(
        dtutil.parse('9/13/2016 21:15:43', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 207, 2, 187, 1)
    match.insert_match(
        dtutil.parse('9/14/2016 17:15:13', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 199, 2, 203, 0)
    match.insert_match(
        dtutil.parse('9/15/2016 2:13:18', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        208, 2, 210, 1)
    match.insert_match(
        dtutil.parse('9/16/2016 2:36:54', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        202, 2, 210, 1)
    match.insert_match(
        dtutil.parse('9/16/2016 10:22:41', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 213, 2, 214, 1)
    match.insert_match(
        dtutil.parse('9/16/2016 10:53:13', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 214, 2, 215, 1)
    match.insert_match(
        dtutil.parse('9/16/2016 11:09:06', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 213, 2, 197, 1)
    match.insert_match(
        dtutil.parse('9/16/2016 11:50:44', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 215, 2, 213, 1)
    match.insert_match(
        dtutil.parse('9/16/2016 14:29:28', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 213, 2, 196, 1)
    match.insert_match(
        dtutil.parse('9/17/2016 0:06:18', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        216, 2, 202, 0)
    match.insert_match(
        dtutil.parse('9/17/2016 0:39:13', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        216, 2, 210, 1)
    match.insert_match(
        dtutil.parse('9/18/2016 6:18:19', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        210, 2, 214, 0)
    match.insert_match(
        dtutil.parse('9/18/2016 6:45:47', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        213, 2, 210, 1)
    match.insert_match(
        dtutil.parse('9/18/2016 9:10:14', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        201, 2, 213, 1)
    match.insert_match(
        dtutil.parse('9/18/2016 11:16:10', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 218, 2, 216, 0)
    match.insert_match(
        dtutil.parse('9/18/2016 11:43:36', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 214, 2, 216, 0)
    match.insert_match(
        dtutil.parse('9/18/2016 12:56:54', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 214, 2, 217, 1)
    match.insert_match(
        dtutil.parse('9/19/2016 9:23:26', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        199, 2, 223, 1)
    match.insert_match(
        dtutil.parse('9/19/2016 12:31:28', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 218, 2, 203, 1)
    match.insert_match(
        dtutil.parse('9/19/2016 13:49:35', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 221, 2, 220, 0)
    match.insert_match(
        dtutil.parse('9/19/2016 16:31:42', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 215, 2, 194, 1)
    match.insert_match(
        dtutil.parse('9/19/2016 16:57:39', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 206, 2, 194, 1)
    match.insert_match(
        dtutil.parse('9/19/2016 17:18:28', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 222, 2, 206, 0)
    match.insert_match(
        dtutil.parse('9/19/2016 18:11:13', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 222, 2, 215, 1)
    match.insert_match(
        dtutil.parse('9/20/2016 15:50:49', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 190, 2, 220, 0)
    match.insert_match(
        dtutil.parse('9/20/2016 20:14:15', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 190, 2, 211, 1)
    match.insert_match(
        dtutil.parse('9/21/2016 3:02:24', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        178, 2, 155, 0)
    match.insert_match(
        dtutil.parse('9/21/2016 4:22:07', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        221, 2, 206, 0)
    match.insert_match(
        dtutil.parse('9/21/2016 18:19:02', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 215, 2, 221, 1)
    match.insert_match(
        dtutil.parse('9/21/2016 19:20:31', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 206, 2, 181, 0)
    match.insert_match(
        dtutil.parse('9/22/2016 7:39:53', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        223, 2, 221, 1)
    match.insert_match(
        dtutil.parse('9/22/2016 12:05:39', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 218, 2, 223, 0)
    match.insert_match(
        dtutil.parse('9/22/2016 12:12:55', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 222, 2, 221, 1)
    match.insert_match(
        dtutil.parse('9/22/2016 12:59:51', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 222, 2, 223, 0)
    match.insert_match(
        dtutil.parse('9/22/2016 13:56:12', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 224, 2, 222, 1)
    match.insert_match(
        dtutil.parse('9/23/2016 0:02:20', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        223, 2, 202, 0)
    match.insert_match(
        dtutil.parse('9/23/2016 13:33:09', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 155, 2, 226, 1)
    match.insert_match(
        dtutil.parse('9/23/2016 14:04:03', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 226, 2, 225, 1)
    match.insert_match(
        dtutil.parse('9/24/2016 13:36:55', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 226, 2, 212, 1)
    match.insert_match(
        dtutil.parse('9/24/2016 14:14:35', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 218, 2, 212, 1)
    match.insert_match(
        dtutil.parse('9/14/2016 18:04:15', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 209, 2, 199, 1)
    match.insert_match(
        dtutil.parse('9/18/2016 13:33:32', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 219, 2, 216, 1)
def vivify_date(s: str) -> datetime.datetime:
    return dtutil.parse(s, dtutil.GATHERLING_FORMAT, dtutil.GATHERLING_TZ)
def disabled() -> None:
    match.insert_match(
        dtutil.parse('11/1/2016 16:55:02', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 307, 2, 308, 0)
    match.insert_match(
        dtutil.parse('11/1/2016 17:46:07', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 307, 2, 309, 0)
    match.insert_match(
        dtutil.parse('11/2/2016 1:40:27', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        307, 2, 311, 0)
    match.insert_match(
        dtutil.parse('11/2/2016 23:14:54', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 308, 2, 310, 1)
    match.insert_match(
        dtutil.parse('11/2/2016 23:42:34', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 303, 2, 310, 0)
    match.insert_match(
        dtutil.parse('11/2/2016 23:58:52', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 307, 2, 310, 0)
    match.insert_match(
        dtutil.parse('11/3/2016 2:53:38', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        313, 2, 312, 0)
    match.insert_match(
        dtutil.parse('11/3/2016 4:04:58', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        307, 2, 315, 0)
    match.insert_match(
        dtutil.parse('11/3/2016 4:56:02', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        315, 2, 312, 0)
    match.insert_match(
        dtutil.parse('11/3/2016 15:21:40', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 313, 2, 310, 0)
    match.insert_match(
        dtutil.parse('11/3/2016 16:58:05', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 314, 2, 308, 0)
    match.insert_match(
        dtutil.parse('11/3/2016 18:01:07', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 313, 2, 317, 0)
    match.insert_match(
        dtutil.parse('11/4/2016 2:48:12', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        316, 2, 312, 0)
    match.insert_match(
        dtutil.parse('11/4/2016 3:08:13', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        314, 2, 312, 0)
    match.insert_match(
        dtutil.parse('11/4/2016 3:58:28', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        312, 2, 320, 0)
    match.insert_match(
        dtutil.parse('11/4/2016 5:02:45', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        315, 2, 316, 1)
    match.insert_match(
        dtutil.parse('11/4/2016 5:53:29', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        316, 2, 322, 0)
    match.insert_match(
        dtutil.parse('11/4/2016 11:36:01', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 303, 2, 323, 0)
    match.insert_match(
        dtutil.parse('11/4/2016 15:34:53', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 308, 2, 305, 1)
    match.insert_match(
        dtutil.parse('11/4/2016 22:04:09', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 311, 2, 316, 0)
    match.insert_match(
        dtutil.parse('11/4/2016 23:27:12', '%m/%d/%Y %H:%M:%S',
                     dtutil.WOTC_TZ), 316, 2, 321, 1)
    match.insert_match(
        dtutil.parse('11/5/2016 0:11:59', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        308, 2, 321, 0)
    match.insert_match(
        dtutil.parse('11/5/2016 1:46:10', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        313, 2, 325, 1)
    match.insert_match(
        dtutil.parse('11/5/2016 3:08:41', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        313, 2, 321, 1)
    match.insert_match(
        dtutil.parse('11/5/2016 3:31:58', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        326, 2, 321, 0)
    match.insert_match(
        dtutil.parse('11/5/2016 5:13:03', '%m/%d/%Y %H:%M:%S', dtutil.WOTC_TZ),
        323, 2, 321, 0)
def parse_rotation_date(setinfo):
    setinfo['enter_date'] = dtutil.parse(setinfo['enter_date'],
                                         '%Y-%m-%dT%H:%M:%S.%fZ',
                                         dtutil.WOTC_TZ)
    return setinfo
def parse_rotation_date(setinfo):
    setinfo["enter_date"] = dtutil.parse(setinfo["enter_date"], "%Y-%m-%dT%H:%M:%S.%fZ", dtutil.WOTC_TZ)
    return setinfo