From 919bb598592ee986f63134b494dd5d6556511329 Mon Sep 17 00:00:00 2001 From: Pierre-Louis Bonicoli Date: Sun, 21 Jul 2024 15:18:52 +0200 Subject: [PATCH] reviewstats: don't write 'None' if duration is unset Keep the current reviewstats format: when review duration is unset/unknown, the line contains only two values separated by one tab and then EOL. Another way to test/reproduce the fixed issue: 1. add 'lllll : !stats' to tests/datas/irc.txt 2. run 'pytest tests/test_review_stats.py' --- review/stats.py | 46 +++++++++++++++++++---------------- tests/datas/reviewstats_2.csv | 18 +++++++------- tests/test_review_data.py | 8 ++++++ 3 files changed, 42 insertions(+), 30 deletions(-) create mode 100644 tests/test_review_data.py diff --git a/review/stats.py b/review/stats.py index 472a175..b559a79 100644 --- a/review/stats.py +++ b/review/stats.py @@ -9,6 +9,29 @@ class ReviewData: user_count: int duration: int + def __str__(self): + return ( + f"{self.date.strftime('%Y%m%d-%Hh%M')}\t{self.user_count}" + f"{f'\t{self.duration}' if self.duration is not None else ''}" + "\n" + ) + + @staticmethod + def load(line: str): + datas = re.split(r"\s+", line.strip()) + if len(datas) == 2: + return ReviewData( + datetime.strptime(datas[0], "%Y%m%d-%Hh%M"), + int(datas[1]), + None, + ) + + return ReviewData( + datetime.strptime(datas[0], "%Y%m%d-%Hh%M"), + int(datas[1]), + int(datas[2]), + ) + class Board: def __init__(self, datas={}): @@ -148,23 +171,7 @@ class ReviewStats: lines = file_handle.read().splitlines() for line in lines: if line.strip() != "": - datas = re.split(r"\s+", line) - if len(datas) == 2: - self.datas.append( - ReviewData( - datetime.strptime(datas[0], "%Y%m%d-%Hh%M"), - int(datas[1]), - None, - ) - ) - else: - self.datas.append( - ReviewData( - datetime.strptime(datas[0], "%Y%m%d-%Hh%M"), - int(datas[1]), - int(datas[2]) if datas[2]!="" else None, - ) - ) + self.datas.append(ReviewData.load(line)) except FileNotFoundError: # no file, no stats pass @@ -174,7 +181,4 @@ class ReviewStats: def save(self): with open(self.filepath, "w") as file_handle: for data in self.datas: - file_handle.write( - f"{data.date.strftime('%Y%m%d-%Hh%M')}\t" - f"{data.user_count}\t{data.duration}\n" - ) + file_handle.write(str(data)) diff --git a/tests/datas/reviewstats_2.csv b/tests/datas/reviewstats_2.csv index 5747357..9c71663 100644 --- a/tests/datas/reviewstats_2.csv +++ b/tests/datas/reviewstats_2.csv @@ -1,12 +1,12 @@ -20110930-12h00 1 -20111007-12h00 2 -20111014-12h00 4 -20111021-12h00 5 -20111028-12h00 10 -20111104-12h00 6 -20111111-12h00 1 -20111118-12h00 2 -20111125-12h00 4 +20110930-12h00 1 +20111007-12h00 2 +20111014-12h00 4 +20111021-12h00 5 +20111028-12h00 10 +20111104-12h00 6 +20111111-12h00 1 +20111118-12h00 2 +20111125-12h00 4 20111202-12h00 5 3 20111209-12h00 1 7 20111216-12h00 2 17 diff --git a/tests/test_review_data.py b/tests/test_review_data.py new file mode 100644 index 0000000..9785024 --- /dev/null +++ b/tests/test_review_data.py @@ -0,0 +1,8 @@ +from review.stats import ReviewData + + +def test_reviewdata(): + for filename in ("reviewstats_1.csv", "reviewstats_2.csv"): + with open(f"tests/datas/{filename}", "r") as review: + for line in review: + assert line == str(ReviewData.load(line))