refactor: timedelta - filter recent BbbStatus objects

This commit is contained in:
Daniel Langbein 2021-03-02 15:00:20 +01:00
parent 1e5b44f2c9
commit d240d4e82f
3 changed files with 20 additions and 15 deletions

View File

@ -2,7 +2,8 @@ from functools import total_ordering
from typing import List
from pathlib import Path
from xml.etree import ElementTree
from datetime import datetime
from datetime import datetime, timedelta
import logging
from langfingaz import loadData
@ -142,8 +143,9 @@ def parseMeetingsData(dataStr: str) -> List[Meeting]:
return [Meeting(xml_meeting) for xml_meeting in xml_meetings.iter('meeting')]
def readBbbStatiFromDir(dataDir: Path = fileUtil.getDataDir()) -> List[BbbStatus]:
def readBbbStatiFromDir(dataDir: Path = fileUtil.getDataDir(), delta: timedelta = None) -> List[BbbStatus]:
"""
:arg delta: (optional) Only return BbbStatus objects in the time-range now-delta and now. Example: timedelta(days=28)
:return: List of BbbStatus objects, sorted by date
"""
@ -155,9 +157,21 @@ def readBbbStatiFromDir(dataDir: Path = fileUtil.getDataDir()) -> List[BbbStatus
dataStr, t = loadData.loadData(file)
meetings: List[Meeting] = parseMeetingsData(dataStr)
bbbStati.append(BbbStatus(meetings, t))
if (len(bbbStati) < 1):
print("No bbbStatus objects were found in data directory: " + str(dataDir))
return []
# sort by date
return sorted(bbbStati, key=BbbStatus.getKey)
bbbStati = sorted(bbbStati, key=BbbStatus.getKey)
if delta is not None and len(bbbStati) > 1:
# filter: take only bbbStatus objects of the last month (4 weeks)
#
# start: datetime = bbbStati[0].pointOfTime
# end: datetime = bbbStati[-1].pointOfTime
# delta: timedelta = end-start
end: datetime = bbbStati[-1].pointOfTime
monthBeforeEnd: datetime = end - delta
bbbStati = [bbbStatus for bbbStatus in bbbStati if bbbStatus.pointOfTime >= monthBeforeEnd]
return bbbStati

View File

@ -22,19 +22,10 @@ def plotMeetings(dataDir: Path = fileUtil.getDataDir()):
plot BBB meetings of the last month
"""
bbbStati: List[BbbStatus] = parseMeetings.readBbbStatiFromDir(dataDir)
bbbStati: List[BbbStatus] = parseMeetings.readBbbStatiFromDir(dataDir=dataDir, delta=timedelta(days=28))
if len(bbbStati) < 1:
return
# filter: take only bbbStatus objects of the last month (4 weeks)
#
# start: datetime = bbbStati[0].pointOfTime
# end: datetime = bbbStati[-1].pointOfTime
# delta: timedelta = end-start
end: datetime = bbbStati[-1].pointOfTime
monthBeforeEnd: datetime = end - timedelta(days=28)
bbbStati = [bbbStatus for bbbStatus in bbbStati if bbbStatus.pointOfTime >= monthBeforeEnd]
image: Path = doPlotMeetings(bbbStati)
print("saved image at " + str(image))

View File

@ -27,7 +27,7 @@ def getModerators(dataDir: Path = fileUtil.getDataDir()) -> Dict[parseMeetings.U
:return: Dict[User, count-how-often-as-moderator] sorted by User.fullName
"""
bbbStati: List[BbbStatus] = parseMeetings.readBbbStatiFromDir(dataDir)
bbbStati: List[BbbStatus] = parseMeetings.readBbbStatiFromDir(dataDir=dataDir, delta=timedelta(days=28))
if len(bbbStati) < 1:
return {}