From 7bcabea021f26770bd333211c165614bfec1bb0e Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 7 Oct 2020 13:05:49 +0100 Subject: [PATCH] Move news daemon functions --- daemon.py | 4 ++-- newsdaemon.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ newswire.py | 50 +++++------------------------------------------ posts.py | 35 +++++++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+), 47 deletions(-) create mode 100644 newsdaemon.py diff --git a/daemon.py b/daemon.py index 9b75dde1..a3651370 100644 --- a/daemon.py +++ b/daemon.py @@ -205,8 +205,8 @@ from devices import E2EEdevicesCollection from devices import E2EEvalidDevice from devices import E2EEaddDevice from newswire import getRSSfromDict -from newswire import runNewswireWatchdog -from newswire import runNewswireDaemon +from newsdaemon import runNewswireWatchdog +from newsdaemon import runNewswireDaemon import os diff --git a/newsdaemon.py b/newsdaemon.py new file mode 100644 index 00000000..708a7dac --- /dev/null +++ b/newsdaemon.py @@ -0,0 +1,54 @@ +__filename__ = "newsdaemon.py" +__author__ = "Bob Mottram" +__license__ = "AGPL3+" +__version__ = "1.1.0" +__maintainer__ = "Bob Mottram" +__email__ = "bob@freedombone.net" +__status__ = "Production" + +import time +from newswire import getDictFromNewswire + + +def runNewswireDaemon(baseDir: str, httpd, unused: str): + """Periodically updates RSS feeds + """ + # initial sleep to allow the system to start up + time.sleep(50) + while True: + # has the session been created yet? + if not httpd.session: + print('Newswire daemon waiting for session') + time.sleep(60) + continue + + # try to update the feeds + newNewswire = None + try: + newNewswire = getDictFromNewswire(httpd.session, baseDir) + except Exception as e: + print('WARN: unable to update newswire ' + str(e)) + time.sleep(120) + continue + + httpd.newswire = newNewswire + print('Newswire updated') + # wait a while before the next feeds update + time.sleep(1200) + + +def runNewswireWatchdog(projectVersion: str, httpd) -> None: + """This tries to keep the newswire update thread running even if it dies + """ + print('Starting newswire watchdog') + newswireOriginal = \ + httpd.thrPostSchedule.clone(runNewswireDaemon) + httpd.thrNewswireDaemon.start() + while True: + time.sleep(50) + if not httpd.thrNewswireDaemon.isAlive(): + httpd.thrNewswireDaemon.kill() + httpd.thrNewswireDaemon = \ + newswireOriginal.clone(runNewswireDaemon) + httpd.thrNewswireDaemon.start() + print('Restarting newswire daemon...') diff --git a/newswire.py b/newswire.py index f5d9eaa4..1b86ef6e 100644 --- a/newswire.py +++ b/newswire.py @@ -70,6 +70,10 @@ def xml2StrToDict(xmlStr: str) -> {}: continue title = rssItem.split('')[1] title = title.split('')[0] + description = '' + if '' in rssItem and '' in rssItem: + description = rssItem.split('')[1] + description = description.split('')[0] link = rssItem.split('')[1] link = link.split('')[0] pubDate = rssItem.split('')[1] @@ -78,7 +82,7 @@ def xml2StrToDict(xmlStr: str) -> {}: try: publishedDate = \ datetime.strptime(pubDate, "%a, %d %b %Y %H:%M:%S %z") - result[str(publishedDate)] = [title, link, [], ''] + result[str(publishedDate)] = [title, link, [], '', description] parsed = True except BaseException: pass @@ -316,47 +320,3 @@ def getDictFromNewswire(session, baseDir: str) -> {}: # sort into chronological order, latest first sortedResult = OrderedDict(sorted(result.items(), reverse=True)) return sortedResult - - -def runNewswireDaemon(baseDir: str, httpd, unused: str): - """Periodically updates RSS feeds - """ - # initial sleep to allow the system to start up - time.sleep(50) - while True: - # has the session been created yet? - if not httpd.session: - print('Newswire daemon waiting for session') - time.sleep(60) - continue - - # try to update the feeds - newNewswire = None - try: - newNewswire = getDictFromNewswire(httpd.session, baseDir) - except Exception as e: - print('WARN: unable to update newswire ' + str(e)) - time.sleep(120) - continue - - httpd.newswire = newNewswire - print('Newswire updated') - # wait a while before the next feeds update - time.sleep(1200) - - -def runNewswireWatchdog(projectVersion: str, httpd) -> None: - """This tries to keep the newswire update thread running even if it dies - """ - print('Starting newswire watchdog') - newswireOriginal = \ - httpd.thrPostSchedule.clone(runNewswireDaemon) - httpd.thrNewswireDaemon.start() - while True: - time.sleep(50) - if not httpd.thrNewswireDaemon.isAlive(): - httpd.thrNewswireDaemon.kill() - httpd.thrNewswireDaemon = \ - newswireOriginal.clone(runNewswireDaemon) - httpd.thrNewswireDaemon.start() - print('Restarting newswire daemon...') diff --git a/posts.py b/posts.py index 739f565c..1e265ff6 100644 --- a/posts.py +++ b/posts.py @@ -1193,6 +1193,41 @@ def createBlogPost(baseDir: str, return blog +def createNewsPost(baseDir: str, + nickname: str, domain: str, port: int, httpPrefix: str, + rssTitle: str, rssDescription: str, + attachImageFilename: str, mediaType: str, + imageDescription: str, useBlurhash: bool) -> {}: + """Converts title and description from an rss feed into a post + """ + inReplyTo = None + inReplyToAtomUri = None + schedulePost = False + eventDate = None + eventTime = None + location = None + schedulePost = False + eventDate = None + eventTime = None + location = None + clientToServer = False + saveToFile = False + followersOnly = False + + blog = \ + createPublicPost(baseDir, + nickname, domain, port, httpPrefix, + rssDescription, followersOnly, saveToFile, + clientToServer, + attachImageFilename, mediaType, + imageDescription, useBlurhash, + inReplyTo, inReplyToAtomUri, rssTitle, + schedulePost, + eventDate, eventTime, location) + blog['object']['type'] = 'Article' + return blog + + def createQuestionPost(baseDir: str, nickname: str, domain: str, port: int, httpPrefix: str, content: str, qOptions: [],