mirror of
https://codeberg.org/langfingaz/bbb-status
synced 2024-11-21 20:23:17 +01:00
refactor: timedelta - filter recent BbbStatus objects
This commit is contained in:
parent
1e5b44f2c9
commit
d240d4e82f
@ -2,7 +2,8 @@ from functools import total_ordering
|
|||||||
from typing import List
|
from typing import List
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from xml.etree import ElementTree
|
from xml.etree import ElementTree
|
||||||
from datetime import datetime
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from langfingaz import loadData
|
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')]
|
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
|
: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)
|
dataStr, t = loadData.loadData(file)
|
||||||
meetings: List[Meeting] = parseMeetingsData(dataStr)
|
meetings: List[Meeting] = parseMeetingsData(dataStr)
|
||||||
bbbStati.append(BbbStatus(meetings, t))
|
bbbStati.append(BbbStatus(meetings, t))
|
||||||
|
|
||||||
if (len(bbbStati) < 1):
|
if (len(bbbStati) < 1):
|
||||||
print("No bbbStatus objects were found in data directory: " + str(dataDir))
|
print("No bbbStatus objects were found in data directory: " + str(dataDir))
|
||||||
|
return []
|
||||||
|
|
||||||
# sort by date
|
# 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
|
||||||
|
@ -22,19 +22,10 @@ def plotMeetings(dataDir: Path = fileUtil.getDataDir()):
|
|||||||
plot BBB meetings of the last month
|
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:
|
if len(bbbStati) < 1:
|
||||||
return
|
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)
|
image: Path = doPlotMeetings(bbbStati)
|
||||||
print("saved image at " + str(image))
|
print("saved image at " + str(image))
|
||||||
|
|
||||||
|
@ -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
|
: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:
|
if len(bbbStati) < 1:
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user