"""background_thread.py.""" import datetime import random import threading import time from warnings import warn from owsrequest import auth from owsrequest.constants import auth as auth_contants class ThreadingAsynch(object): """ThreadingAsynch class.""" def __init__(self, sender=None): """Create asynch threads to refresh data in cache at intervals.""" jwt_refresh_thread = threading.Thread(target=self.run_jwt_refresh) jwt_refresh_thread.daemon = True jwt_refresh_thread.start() thread_jwt_services = threading.Thread( target=self.run_jwt_services_refresh, args=(sender,)) thread_jwt_services.daemon = True thread_jwt_services.start() def run_jwt_refresh(self): """Run asynch thread for jwt cache refresh. Args: self (obj): Instance object. Returns: None """ warn( 'Shared M2M JWT is being deprecated. See PP-546, PP-547.', PendingDeprecationWarning, stacklevel=2) while True: cache_obj = auth.get_uwsgi_cache_object() if ( ( not cache_obj.has('jwt_token') or cache_obj.get('jwt_token') is None ) or cache_obj.get('jwt_expiration_time') - datetime.datetime.utcnow() <= datetime.timedelta(seconds=auth_contants.TOKEN_EXPIRATION_CHECK) ): auth.cache_jwt_token() time.sleep(random.randint(300, 900)) def run_jwt_services_refresh(self, sender): """Run asynch thread for jwt_enabled_services cache refresh. Args: self (obj): Instance object. Returns: None """ while True: auth.cache_jwt_enabled_services(sender) time.sleep(auth_contants.JWT_ENABLED_SERVICES_REFRESH_INTERVAL)