Files
@ c6a258063801
Branch filter:
Location: Rank-Progress/rank_progress.py - annotation
c6a258063801
1.5 KiB
text/x-python
a better CLI
ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 c6a258063801 c6a258063801 c6a258063801 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 ddeb551e1404 | import re
from itertools import groupby
from datetime import datetime
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("since", help="a date in YYYYMMDD format")
parser.add_argument("to", nargs="?", help="a date in YYYYMMDD format")
parser.add_argument("-c", "--country-code", default="CZ", help="a two letter country code, default=CZ")
args = parser.parse_args()
def parse_record(record):
types = [int, str, str, str, str, str, int, int, int, int]
columns = [f(token) for (f, token) in zip(types, record)] + [datetime.strptime(record[5][1:7], "%y%m%d")]
return tuple(columns)
def round_rating(r):
return (r+50)//100*100
since = datetime.strptime(args.since, "%Y%m%d")
to = datetime.strptime(args.to, "%Y%m%d") if args.to else datetime.now()
with open("/tmp/all.hst") as f:
s = f.read()
records = [re.split(r" {2,}", line.strip()) for line in s.splitlines()]
records = filter(lambda rec: len(rec) == 10, records)
records = map(parse_record, records)
national_records = filter(lambda rec: rec[2] == args.country_code, records)
players = groupby(national_records, lambda rec: rec[0])
for (pin, recs) in players:
tourneys = list(recs)
rounded_rating = round_rating(tourneys[0][9])
steps = []
for r in tourneys:
if rounded_rating != round_rating(r[8]):
rounded_rating = round_rating(r[8])
if r[9]-rounded_rating >= 50 or rounded_rating-r[9] > 100:
steps.append(r)
rounded_rating = round_rating(r[9])
steps = [r for r in steps if since <= r[10] <= to]
if steps:
print(steps)
|