Libraries refactor and add some sinks #4
|
@ -2,7 +2,6 @@
|
|||
# Twisted/Klein imports
|
||||
from twisted.logger import Logger
|
||||
from twisted.internet import reactor
|
||||
from twisted.internet.task import LoopingCall, deferLater
|
||||
from klein import Klein
|
||||
|
||||
# Other library imports
|
||||
|
@ -76,18 +75,6 @@ class WebApp(object):
|
|||
return dumps(True)
|
||||
|
||||
|
||||
def setup_call_loops(token_setting, function_init, function_continuous, delay, function_post_start=None):
|
||||
if token_setting == "1":
|
||||
deferLater(reactor, 1, function_init)
|
||||
else:
|
||||
deferLater(reactor, 1, function_continuous, True)
|
||||
if function_post_start:
|
||||
deferLater(reactor, 4, function_post_start)
|
||||
|
||||
lc = LoopingCall(function_continuous)
|
||||
lc.start(delay)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
init_map = {
|
||||
"notify": Notify(),
|
||||
|
@ -103,16 +90,18 @@ if __name__ == "__main__":
|
|||
"webapp": WebApp(),
|
||||
"money": Money(),
|
||||
}
|
||||
# Merge all classes into each other
|
||||
util.xmerge_attrs(init_map)
|
||||
|
||||
setup_call_loops(
|
||||
# Setup the authcode -> refresh token and refresh_token -> auth_token stuff
|
||||
util.setup_call_loops(
|
||||
token_setting=settings.Revolut.SetupToken,
|
||||
function_init=init_map["revolut"].setup_auth,
|
||||
function_continuous=init_map["revolut"].get_new_token,
|
||||
delay=int(settings.Revolut.RefreshSec),
|
||||
function_post_start=init_map["revolut"].setup_webhook,
|
||||
)
|
||||
setup_call_loops(
|
||||
util.setup_call_loops(
|
||||
token_setting=settings.TrueLayer.SetupToken,
|
||||
function_init=init_map["truelayer"].setup_auth,
|
||||
function_continuous=init_map["truelayer"].get_new_token,
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# Twisted/Klein imports
|
||||
from twisted.logger import Logger
|
||||
from twisted.internet import reactor
|
||||
from twisted.internet.task import LoopingCall, deferLater
|
||||
|
||||
# Other library imports
|
||||
from httpx import ReadTimeout, ReadError, RemoteProtocolError
|
||||
|
@ -9,6 +11,12 @@ log = Logger("util.global")
|
|||
|
||||
|
||||
def xmerge_attrs(init_map):
|
||||
"""
|
||||
Given a dictionary of strings and classes, set all corresponding class.<string> attributes
|
||||
on each class, to every other class.
|
||||
"a": A(), "b": B() -> A.b = B_instance, B.a = A_instance
|
||||
:param init_map: dict of class names to classes
|
||||
"""
|
||||
for classname, object_instance in init_map.items():
|
||||
# notify, Notify
|
||||
for classname_inside, object_instance_inside in init_map.items():
|
||||
|
@ -17,6 +25,26 @@ def xmerge_attrs(init_map):
|
|||
setattr(object_instance, classname_inside, object_instance_inside)
|
||||
|
||||
|
||||
def setup_call_loops(token_setting, function_init, function_continuous, delay, function_post_start=None):
|
||||
"""
|
||||
Setup the loops for dealing with access, refresh and auth tokens for various providers.
|
||||
:param token_setting: the setting for whether to do the initial authentication
|
||||
:param function_init: the initial authentication function
|
||||
:param function_continuous: the ongoing authentication function (refresh_token -> access_token)
|
||||
:param delay: time in seconds to wait between calls to function_continuous
|
||||
:param function_post_start: an optional function to run after the access token is obtained
|
||||
"""
|
||||
if token_setting == "1":
|
||||
deferLater(reactor, 1, function_init)
|
||||
else:
|
||||
deferLater(reactor, 1, function_continuous, True)
|
||||
if function_post_start:
|
||||
deferLater(reactor, 4, function_post_start)
|
||||
|
||||
lc = LoopingCall(function_continuous)
|
||||
lc.start(delay)
|
||||
|
||||
|
||||
def convert(data):
|
||||
"""
|
||||
Recursively convert a dictionary.
|
||||
|
@ -48,7 +76,19 @@ def last_online_recent(date):
|
|||
|
||||
|
||||
def handle_exceptions(func):
|
||||
"""
|
||||
Wrapper helper to handle Agora API errors.
|
||||
:param func: function to wrap
|
||||
:rtype: func
|
||||
:return: the wrapped function
|
||||
"""
|
||||
|
||||
def inner_function(*args, **kwargs):
|
||||
"""
|
||||
Inner wrapper helper.
|
||||
:rtype: any or bool
|
||||
:return: False or the normal return
|
||||
"""
|
||||
try:
|
||||
rtrn = func(*args, **kwargs)
|
||||
except (ReadTimeout, ReadError, RemoteProtocolError):
|
||||
|
|
Loading…
Reference in New Issue