forked from mindiell/hebdobot
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:
parent
c4a3e78967
commit
919bb59859
@ -9,6 +9,29 @@ class ReviewData:
|
|||||||
user_count: int
|
user_count: int
|
||||||
duration: 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:
|
class Board:
|
||||||
def __init__(self, datas={}):
|
def __init__(self, datas={}):
|
||||||
@ -148,23 +171,7 @@ class ReviewStats:
|
|||||||
lines = file_handle.read().splitlines()
|
lines = file_handle.read().splitlines()
|
||||||
for line in lines:
|
for line in lines:
|
||||||
if line.strip() != "":
|
if line.strip() != "":
|
||||||
datas = re.split(r"\s+", line)
|
self.datas.append(ReviewData.load(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,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
# no file, no stats
|
# no file, no stats
|
||||||
pass
|
pass
|
||||||
@ -174,7 +181,4 @@ class ReviewStats:
|
|||||||
def save(self):
|
def save(self):
|
||||||
with open(self.filepath, "w") as file_handle:
|
with open(self.filepath, "w") as file_handle:
|
||||||
for data in self.datas:
|
for data in self.datas:
|
||||||
file_handle.write(
|
file_handle.write(str(data))
|
||||||
f"{data.date.strftime('%Y%m%d-%Hh%M')}\t"
|
|
||||||
f"{data.user_count}\t{data.duration}\n"
|
|
||||||
)
|
|
||||||
|
8
tests/test_review_data.py
Normal file
8
tests/test_review_data.py
Normal 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))
|
Loading…
Reference in New Issue
Block a user