proper doc string for Notifier

This commit is contained in:
holger krekel 2024-03-31 12:37:14 +02:00
parent 1cca9aa441
commit 9da626dfc8
2 changed files with 25 additions and 6 deletions

View File

@ -125,7 +125,6 @@ def main():
socket, vmail_dir = sys.argv[1:] socket, vmail_dir = sys.argv[1:]
vmail_dir = Path(vmail_dir) vmail_dir = Path(vmail_dir)
if not vmail_dir.exists(): if not vmail_dir.exists():
logging.error("vmail dir does not exist: %r", vmail_dir) logging.error("vmail dir does not exist: %r", vmail_dir)
return 1 return 1

View File

@ -1,3 +1,28 @@
"""
This modules provides notification machinery for transmitting device tokens to
a central notification server which in turns contacts a phone's notification server
to trigger Delta Chat apps to retrieve messages and provide instant notifications to users.
The Notifier class arranges the queuing of tokens in separate PriorityQueues
from which NotifyThreads take and transmit them via HTTPS
to the `notifications.delta.chat` service
which in turns contacts a phone's providers's notification service
which in turn ewakes up the Delta Chat app on user devices.
The lack of proper HTTP2-support in Python lets us
use multiple threads and connections to the Rust-implemented `notifications.delta.chat`
which however uses HTTP2 and thus only a single connection to phone-notification providers.
If a token fails to cause a successful notification
it is moved to a retry-number specific PriorityQueue
which handles all tokens that failed a particular number of times
and which are scheduled for retry using exponential back-off timing.
If a token exceeds MAX_NUMBER_OF_TRIES it is dropped with a log warning.
Note that tokens are completely opaque to the notification machinery here
and will in the future be encrypted foreclosing all ability to distinguish
which device token ultimately goes to which phone-provider notification service.
"""
import time import time
import logging import logging
from threading import Thread from threading import Thread
@ -65,11 +90,6 @@ class NotifyThread(Thread):
pass pass
def retry_one(self, requests_session, sleep=time.sleep): def retry_one(self, requests_session, sleep=time.sleep):
# takes the next token from the per-retry-number PriorityQueue
# which is ordered by "when" (as set by add_token_for_retry()).
# If the request to notification server fails the token is
# queued to the next retry-number's PriorityQueue
# until it finally is dropped if MAX_NUMBER_OF_TRIES is exceeded
when, token = self.notifier.retry_queues[self.retry_num].get() when, token = self.notifier.retry_queues[self.retry_num].get()
if when is None: if when is None:
return False return False