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'
This commit is contained in:
Pierre-Louis Bonicoli 2024-07-21 15:18:52 +02:00
parent c4a3e78967
commit 919bb59859
Signed by: pilou
GPG Key ID: 06914C4A5EDAA6DD
3 changed files with 42 additions and 30 deletions

View File

@ -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))

View File

@ -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))