flake8 format

merge-requests/30/head
Bob Mottram 2020-04-03 11:53:31 +00:00
parent 283a4d54c1
commit 34abcb54c2
1 changed files with 164 additions and 158 deletions

View File

@ -1,13 +1,11 @@
__filename__="happening.py" __filename__ = "happening.py"
__author__="Bob Mottram" __author__ = "Bob Mottram"
__license__="AGPL3+" __license__ = "AGPL3+"
__version__="1.1.0" __version__ = "1.1.0"
__maintainer__="Bob Mottram" __maintainer__ = "Bob Mottram"
__email__="bob@freedombone.net" __email__ = "bob@freedombone.net"
__status__="Production" __status__ = "Production"
import json
import time
import os import os
from datetime import datetime from datetime import datetime
@ -16,15 +14,17 @@ from utils import locatePost
from utils import daysInMonth from utils import daysInMonth
from utils import mergeDicts from utils import mergeDicts
def isHappeningEvent(tag: {}) -> bool: def isHappeningEvent(tag: {}) -> bool:
"""Is this tag an Event or Place ActivityStreams type? """Is this tag an Event or Place ActivityStreams type?
""" """
if not tag.get('type'): if not tag.get('type'):
return False return False
if tag['type']!='Event' and tag['type']!='Place': if tag['type'] != 'Event' and tag['type'] != 'Place':
return False return False
return True return True
def isHappeningPost(postJsonObject: {}) -> bool: def isHappeningPost(postJsonObject: {}) -> bool:
"""Is this a post with tags? """Is this a post with tags?
""" """
@ -38,68 +38,69 @@ def isHappeningPost(postJsonObject: {}) -> bool:
return False return False
return True return True
def getTodaysEvents(baseDir: str,nickname: str,domain: str, \
currYear=None,currMonthNumber=None, \ def getTodaysEvents(baseDir: str, nickname: str, domain: str,
currYear=None, currMonthNumber=None,
currDayOfMonth=None) -> {}: currDayOfMonth=None) -> {}:
"""Retrieves calendar events for today """Retrieves calendar events for today
Returns a dictionary of lists containing Event and Place activities Returns a dictionary of lists containing Event and Place activities
""" """
now=datetime.now() now = datetime.now()
if not currYear: if not currYear:
year=now.year year = now.year
else: else:
year=currYear year = currYear
if not currMonthNumber: if not currMonthNumber:
monthNumber=now.month monthNumber = now.month
else: else:
monthNumber=currMonthNumber monthNumber = currMonthNumber
if not currDayOfMonth: if not currDayOfMonth:
dayNumber=now.day dayNumber = now.day
else: else:
dayNumber=currDayOfMonth dayNumber = currDayOfMonth
calendarFilename= \ calendarFilename = \
baseDir+'/accounts/'+nickname+'@'+domain+ \ baseDir + '/accounts/' + nickname + '@' + domain + \
'/calendar/'+str(year)+'/'+str(monthNumber)+'.txt' '/calendar/' + str(year) + '/' + str(monthNumber) + '.txt'
events={} events = {}
if not os.path.isfile(calendarFilename): if not os.path.isfile(calendarFilename):
return events return events
calendarPostIds=[] calendarPostIds = []
recreateEventsFile=False recreateEventsFile = False
with open(calendarFilename,'r') as eventsFile: with open(calendarFilename, 'r') as eventsFile:
for postId in eventsFile: for postId in eventsFile:
postId=postId.replace('\n','') postId = postId.replace('\n', '')
postFilename=locatePost(baseDir,nickname,domain,postId) postFilename = locatePost(baseDir, nickname, domain, postId)
if not postFilename: if not postFilename:
recreateEventsFile=True recreateEventsFile = True
continue continue
postJsonObject=loadJson(postFilename) postJsonObject = loadJson(postFilename)
if not isHappeningPost(postJsonObject): if not isHappeningPost(postJsonObject):
continue continue
postEvent=[] postEvent = []
dayOfMonth=None dayOfMonth = None
for tag in postJsonObject['object']['tag']: for tag in postJsonObject['object']['tag']:
if not isHappeningEvent(tag): if not isHappeningEvent(tag):
continue continue
# this tag is an event or a place # this tag is an event or a place
if tag['type']=='Event': if tag['type'] == 'Event':
# tag is an event # tag is an event
if not tag.get('startTime'): if not tag.get('startTime'):
continue continue
eventTime= \ eventTime = \
datetime.strptime(tag['startTime'], \ datetime.strptime(tag['startTime'],
"%Y-%m-%dT%H:%M:%S%z") "%Y-%m-%dT%H:%M:%S%z")
if int(eventTime.strftime("%Y"))==year and \ if int(eventTime.strftime("%Y")) == year and \
int(eventTime.strftime("%m"))==monthNumber and \ int(eventTime.strftime("%m")) == monthNumber and \
int(eventTime.strftime("%d"))==dayNumber: int(eventTime.strftime("%d")) == dayNumber:
dayOfMonth=str(int(eventTime.strftime("%d"))) dayOfMonth = str(int(eventTime.strftime("%d")))
if '#statuses#' in postId: if '#statuses#' in postId:
# link to the id so that the event can be # link to the id so that the event can be
# easily deleted # easily deleted
tag['postId']=postId.split('#statuses#')[1] tag['postId'] = postId.split('#statuses#')[1]
postEvent.append(tag) postEvent.append(tag)
else: else:
# tag is a place # tag is a place
@ -107,41 +108,42 @@ def getTodaysEvents(baseDir: str,nickname: str,domain: str, \
if postEvent and dayOfMonth: if postEvent and dayOfMonth:
calendarPostIds.append(postId) calendarPostIds.append(postId)
if not events.get(dayOfMonth): if not events.get(dayOfMonth):
events[dayOfMonth]=[] events[dayOfMonth] = []
events[dayOfMonth].append(postEvent) events[dayOfMonth].append(postEvent)
# if some posts have been deleted then regenerate the calendar file # if some posts have been deleted then regenerate the calendar file
if recreateEventsFile: if recreateEventsFile:
calendarFile=open(calendarFilename, "w") calendarFile = open(calendarFilename, "w")
for postId in calendarPostIds: for postId in calendarPostIds:
calendarFile.write(postId+'\n') calendarFile.write(postId+'\n')
calendarFile.close() calendarFile.close()
return events return events
def todaysEventsCheck(baseDir: str,nickname: str,domain: str) -> bool:
def todaysEventsCheck(baseDir: str, nickname: str, domain: str) -> bool:
"""Are there calendar events today? """Are there calendar events today?
""" """
now=datetime.now() now = datetime.now()
year=now.year year = now.year
monthNumber=now.month monthNumber = now.month
dayNumber=now.day dayNumber = now.day
calendarFilename= \ calendarFilename = \
baseDir+'/accounts/'+nickname+'@'+domain+ \ baseDir + '/accounts/' + nickname + '@' + domain + \
'/calendar/'+str(year)+'/'+str(monthNumber)+'.txt' '/calendar/' + str(year) + '/' + str(monthNumber) + '.txt'
if not os.path.isfile(calendarFilename): if not os.path.isfile(calendarFilename):
return False return False
eventsExist=False eventsExist = False
with open(calendarFilename,'r') as eventsFile: with open(calendarFilename, 'r') as eventsFile:
for postId in eventsFile: for postId in eventsFile:
postId=postId.replace('\n','') postId = postId.replace('\n', '')
postFilename=locatePost(baseDir,nickname,domain,postId) postFilename = locatePost(baseDir, nickname, domain, postId)
if not postFilename: if not postFilename:
continue continue
postJsonObject=loadJson(postFilename) postJsonObject = loadJson(postFilename)
if not isHappeningPost(postJsonObject): if not isHappeningPost(postJsonObject):
continue continue
@ -149,45 +151,46 @@ def todaysEventsCheck(baseDir: str,nickname: str,domain: str) -> bool:
if not isHappeningEvent(tag): if not isHappeningEvent(tag):
continue continue
# this tag is an event or a place # this tag is an event or a place
if tag['type']!='Event': if tag['type'] != 'Event':
continue continue
# tag is an event # tag is an event
if not tag.get('startTime'): if not tag.get('startTime'):
continue continue
eventTime= \ eventTime = \
datetime.strptime(tag['startTime'], \ datetime.strptime(tag['startTime'],
"%Y-%m-%dT%H:%M:%S%z") "%Y-%m-%dT%H:%M:%S%z")
if int(eventTime.strftime("%Y"))==year and \ if int(eventTime.strftime("%Y")) == year and \
int(eventTime.strftime("%m"))==monthNumber and \ int(eventTime.strftime("%m")) == monthNumber and \
int(eventTime.strftime("%d"))==dayNumber: int(eventTime.strftime("%d")) == dayNumber:
eventsExist=True eventsExist = True
break break
return eventsExist return eventsExist
def thisWeeksEventsCheck(baseDir: str,nickname: str,domain: str) -> bool:
def thisWeeksEventsCheck(baseDir: str, nickname: str, domain: str) -> bool:
"""Are there calendar events this week? """Are there calendar events this week?
""" """
now=datetime.now() now = datetime.now()
year=now.year year = now.year
monthNumber=now.month monthNumber = now.month
dayNumber=now.day dayNumber = now.day
calendarFilename= \ calendarFilename = \
baseDir+'/accounts/'+nickname+'@'+domain+ \ baseDir + '/accounts/' + nickname + '@' + domain + \
'/calendar/'+str(year)+'/'+str(monthNumber)+'.txt' '/calendar/' + str(year) + '/' + str(monthNumber) + '.txt'
if not os.path.isfile(calendarFilename): if not os.path.isfile(calendarFilename):
return False return False
eventsExist=False eventsExist = False
with open(calendarFilename,'r') as eventsFile: with open(calendarFilename, 'r') as eventsFile:
for postId in eventsFile: for postId in eventsFile:
postId=postId.replace('\n','') postId = postId.replace('\n', '')
postFilename=locatePost(baseDir,nickname,domain,postId) postFilename = locatePost(baseDir, nickname, domain, postId)
if not postFilename: if not postFilename:
continue continue
postJsonObject=loadJson(postFilename) postJsonObject = loadJson(postFilename)
if not isHappeningPost(postJsonObject): if not isHappeningPost(postJsonObject):
continue continue
@ -195,76 +198,77 @@ def thisWeeksEventsCheck(baseDir: str,nickname: str,domain: str) -> bool:
if not isHappeningEvent(tag): if not isHappeningEvent(tag):
continue continue
# this tag is an event or a place # this tag is an event or a place
if tag['type']!='Event': if tag['type'] != 'Event':
continue continue
# tag is an event # tag is an event
if not tag.get('startTime'): if not tag.get('startTime'):
continue continue
eventTime= \ eventTime = \
datetime.strptime(tag['startTime'], \ datetime.strptime(tag['startTime'],
"%Y-%m-%dT%H:%M:%S%z") "%Y-%m-%dT%H:%M:%S%z")
if int(eventTime.strftime("%Y"))==year and \ if (int(eventTime.strftime("%Y")) == year and
int(eventTime.strftime("%m"))==monthNumber and \ int(eventTime.strftime("%m")) == monthNumber and
(int(eventTime.strftime("%d"))>dayNumber and \ (int(eventTime.strftime("%d")) > dayNumber and
int(eventTime.strftime("%d"))<=dayNumber+6): int(eventTime.strftime("%d")) <= dayNumber + 6)):
eventsExist=True eventsExist = True
break break
return eventsExist return eventsExist
def getThisWeeksEvents(baseDir: str,nickname: str,domain: str) -> {}:
def getThisWeeksEvents(baseDir: str, nickname: str, domain: str) -> {}:
"""Retrieves calendar events for this week """Retrieves calendar events for this week
Returns a dictionary indexed by day number of lists containing Returns a dictionary indexed by day number of lists containing
Event and Place activities Event and Place activities
Note: currently not used but could be with a weekly calendar screen Note: currently not used but could be with a weekly calendar screen
""" """
now=datetime.now() now = datetime.now()
year=now.year year = now.year
monthNumber=now.month monthNumber = now.month
dayNumber=now.day dayNumber = now.day
calendarFilename= \ calendarFilename = \
baseDir+'/accounts/'+nickname+'@'+domain+ \ baseDir + '/accounts/' + nickname + '@' + domain + \
'/calendar/'+str(year)+'/'+str(monthNumber)+'.txt' '/calendar/' + str(year) + '/' + str(monthNumber) + '.txt'
events={} events = {}
if not os.path.isfile(calendarFilename): if not os.path.isfile(calendarFilename):
return events return events
calendarPostIds=[] calendarPostIds = []
recreateEventsFile=False recreateEventsFile = False
with open(calendarFilename,'r') as eventsFile: with open(calendarFilename, 'r') as eventsFile:
for postId in eventsFile: for postId in eventsFile:
postId=postId.replace('\n','') postId = postId.replace('\n', '')
postFilename=locatePost(baseDir,nickname,domain,postId) postFilename = locatePost(baseDir, nickname, domain, postId)
if not postFilename: if not postFilename:
recreateEventsFile=True recreateEventsFile = True
continue continue
postJsonObject=loadJson(postFilename) postJsonObject = loadJson(postFilename)
if not isHappeningPost(postJsonObject): if not isHappeningPost(postJsonObject):
continue continue
postEvent=[] postEvent = []
dayOfMonth=None dayOfMonth = None
weekDayIndex=None weekDayIndex = None
for tag in postJsonObject['object']['tag']: for tag in postJsonObject['object']['tag']:
if not isHappeningEvent(tag): if not isHappeningEvent(tag):
continue continue
# this tag is an event or a place # this tag is an event or a place
if tag['type']=='Event': if tag['type'] == 'Event':
# tag is an event # tag is an event
if not tag.get('startTime'): if not tag.get('startTime'):
continue continue
eventTime= \ eventTime = \
datetime.strptime(tag['startTime'], \ datetime.strptime(tag['startTime'],
"%Y-%m-%dT%H:%M:%S%z") "%Y-%m-%dT%H:%M:%S%z")
if int(eventTime.strftime("%Y"))==year and \ if (int(eventTime.strftime("%Y")) == year and
int(eventTime.strftime("%m"))==monthNumber and \ int(eventTime.strftime("%m")) == monthNumber and
(int(eventTime.strftime("%d"))>=dayNumber and \ (int(eventTime.strftime("%d")) >= dayNumber and
int(eventTime.strftime("%d"))<=dayNumber+6): int(eventTime.strftime("%d")) <= dayNumber + 6)):
dayOfMonth=str(int(eventTime.strftime("%d"))) dayOfMonth = str(int(eventTime.strftime("%d")))
weekDayIndex=dayOfMonth-dayNumber weekDayIndex = dayOfMonth - dayNumber
postEvent.append(tag) postEvent.append(tag)
else: else:
# tag is a place # tag is a place
@ -272,79 +276,80 @@ def getThisWeeksEvents(baseDir: str,nickname: str,domain: str) -> {}:
if postEvent and weekDayIndex: if postEvent and weekDayIndex:
calendarPostIds.append(postId) calendarPostIds.append(postId)
if not events.get(dayOfMonth): if not events.get(dayOfMonth):
events[weekDayIndex]=[] events[weekDayIndex] = []
events[dayOfMonth].append(postEvent) events[dayOfMonth].append(postEvent)
# if some posts have been deleted then regenerate the calendar file # if some posts have been deleted then regenerate the calendar file
if recreateEventsFile: if recreateEventsFile:
calendarFile=open(calendarFilename, "w") calendarFile = open(calendarFilename, "w")
for postId in calendarPostIds: for postId in calendarPostIds:
calendarFile.write(postId+'\n') calendarFile.write(postId + '\n')
calendarFile.close() calendarFile.close()
lastDayOfMonth=daysInMonth(year,monthNumber) lastDayOfMonth = daysInMonth(year, monthNumber)
if dayNumber+6 > lastDayOfMonth: if dayNumber+6 > lastDayOfMonth:
monthNumber+=1 monthNumber += 1
if monthNumber>12: if monthNumber > 12:
monthNumber=1 monthNumber = 1
year+=1 year += 1
for d in range(1,dayNumber+6-lastDayOfMonth): for d in range(1, dayNumber + 6 - lastDayOfMonth):
dailyEvents= \ dailyEvents = \
getTodaysEvents(baseDir,nickname,domain, \ getTodaysEvents(baseDir, nickname, domain,
year,monthNumber,d) year, monthNumber, d)
if dailyEvents: if dailyEvents:
if dailyEvents.get(d): if dailyEvents.get(d):
newEvents={} newEvents = {}
newEvents[d+(7-(dayNumber+6-lastDayOfMonth))]= \ newEvents[d + (7 - (dayNumber + 6 - lastDayOfMonth))] = \
dailyEvents[d] dailyEvents[d]
events=mergeDicts(events,newEvents) events = mergeDicts(events, newEvents)
return events return events
def getCalendarEvents(baseDir: str,nickname: str,domain: str, \
year: int,monthNumber: int) -> {}: def getCalendarEvents(baseDir: str, nickname: str, domain: str,
year: int, monthNumber: int) -> {}:
"""Retrieves calendar events """Retrieves calendar events
Returns a dictionary indexed by day number of lists containing Returns a dictionary indexed by day number of lists containing
Event and Place activities Event and Place activities
""" """
calendarFilename= \ calendarFilename = \
baseDir+'/accounts/'+nickname+'@'+domain+ \ baseDir + '/accounts/' + nickname + '@' + domain + \
'/calendar/'+str(year)+'/'+str(monthNumber)+'.txt' '/calendar/' + str(year) + '/' + str(monthNumber) + '.txt'
events={} events = {}
if not os.path.isfile(calendarFilename): if not os.path.isfile(calendarFilename):
return events return events
calendarPostIds=[] calendarPostIds = []
recreateEventsFile=False recreateEventsFile = False
with open(calendarFilename,'r') as eventsFile: with open(calendarFilename, 'r') as eventsFile:
for postId in eventsFile: for postId in eventsFile:
postId=postId.replace('\n','') postId = postId.replace('\n', '')
postFilename=locatePost(baseDir,nickname,domain,postId) postFilename = locatePost(baseDir, nickname, domain, postId)
if not postFilename: if not postFilename:
recreateEventsFile=True recreateEventsFile = True
continue continue
postJsonObject=loadJson(postFilename) postJsonObject = loadJson(postFilename)
if not isHappeningPost(postJsonObject): if not isHappeningPost(postJsonObject):
continue continue
postEvent=[] postEvent = []
dayOfMonth=None dayOfMonth = None
for tag in postJsonObject['object']['tag']: for tag in postJsonObject['object']['tag']:
if not isHappeningEvent(tag): if not isHappeningEvent(tag):
continue continue
# this tag is an event or a place # this tag is an event or a place
if tag['type']=='Event': if tag['type'] == 'Event':
# tag is an event # tag is an event
if not tag.get('startTime'): if not tag.get('startTime'):
continue continue
eventTime= \ eventTime = \
datetime.strptime(tag['startTime'], \ datetime.strptime(tag['startTime'],
"%Y-%m-%dT%H:%M:%S%z") "%Y-%m-%dT%H:%M:%S%z")
if int(eventTime.strftime("%Y"))==year and \ if int(eventTime.strftime("%Y")) == year and \
int(eventTime.strftime("%m"))==monthNumber: int(eventTime.strftime("%m")) == monthNumber:
dayOfMonth=str(int(eventTime.strftime("%d"))) dayOfMonth = str(int(eventTime.strftime("%d")))
postEvent.append(tag) postEvent.append(tag)
else: else:
# tag is a place # tag is a place
@ -353,34 +358,35 @@ def getCalendarEvents(baseDir: str,nickname: str,domain: str, \
if postEvent and dayOfMonth: if postEvent and dayOfMonth:
calendarPostIds.append(postId) calendarPostIds.append(postId)
if not events.get(dayOfMonth): if not events.get(dayOfMonth):
events[dayOfMonth]=[] events[dayOfMonth] = []
events[dayOfMonth].append(postEvent) events[dayOfMonth].append(postEvent)
# if some posts have been deleted then regenerate the calendar file # if some posts have been deleted then regenerate the calendar file
if recreateEventsFile: if recreateEventsFile:
calendarFile=open(calendarFilename, "w") calendarFile = open(calendarFilename, "w")
for postId in calendarPostIds: for postId in calendarPostIds:
calendarFile.write(postId+'\n') calendarFile.write(postId + '\n')
calendarFile.close() calendarFile.close()
return events return events
def removeCalendarEvent(baseDir: str,nickname: str,domain: str, \
year: int,monthNumber: int,messageId: str) -> None: def removeCalendarEvent(baseDir: str, nickname: str, domain: str,
year: int, monthNumber: int, messageId: str) -> None:
"""Removes a calendar event """Removes a calendar event
""" """
calendarFilename= \ calendarFilename = \
baseDir+'/accounts/'+nickname+'@'+domain+ \ baseDir + '/accounts/' + nickname + '@' + domain + \
'/calendar/'+str(year)+'/'+str(monthNumber)+'.txt' '/calendar/' + str(year) + '/' + str(monthNumber) + '.txt'
if not os.path.isfile(calendarFilename): if not os.path.isfile(calendarFilename):
return return
if '/' in messageId: if '/' in messageId:
messageId=messageId.replace('/','#') messageId = messageId.replace('/', '#')
if messageId not in open(calendarFilename).read(): if messageId not in open(calendarFilename).read():
return return
lines=None lines = None
with open(calendarFilename, "r") as f: with open(calendarFilename, "r") as f:
lines=f.readlines() lines = f.readlines()
if not lines: if not lines:
return return
with open(calendarFilename, "w+") as f: with open(calendarFilename, "w+") as f: