From 845efb0719687699dc6b45a887ab6643f5b730b1 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 16 Dec 2020 09:42:12 -0500 Subject: [PATCH] Implement internal client system --- fHDHR/__init__.py | 2 +- fHDHR/api/__init__.py | 18 +++++++++++++++++- fHDHR/cli/run.py | 11 ++--------- fHDHR/tools/__init__.py | 5 +++++ fHDHR_web/__init__.py | 14 ++++++++------ fHDHR_web/api/startup_tasks.py | 20 +++++++++----------- 6 files changed, 42 insertions(+), 28 deletions(-) diff --git a/fHDHR/__init__.py b/fHDHR/__init__.py index 5e40adc..27edb8d 100644 --- a/fHDHR/__init__.py +++ b/fHDHR/__init__.py @@ -19,7 +19,7 @@ class fHDHR_INT_OBJ(): self.web = fHDHR.tools.WebReq() - self.api = fHDHR_API_URLs(settings) + self.api = fHDHR_API_URLs(settings, self.web) class fHDHR_OBJ(): diff --git a/fHDHR/api/__init__.py b/fHDHR/api/__init__.py index 17aae97..37651d9 100644 --- a/fHDHR/api/__init__.py +++ b/fHDHR/api/__init__.py @@ -1,10 +1,26 @@ import urllib.parse +class Fillin_Client(): + + def __init__(self, settings, web): + self.config = settings + self.web = web + + def __getattr__(self, name): + ''' will only get called for undefined attributes ''' + if hasattr(self.web.session, name): + return eval("self.web.session." + name) + + class fHDHR_API_URLs(): - def __init__(self, settings): + def __init__(self, settings, web): self.config = settings + self.web = web + + # Replaced later + self.client = Fillin_Client(settings, web) self.address = self.config.dict["fhdhr"]["address"] self.discovery_address = self.config.dict["fhdhr"]["discovery_address"] diff --git a/fHDHR/cli/run.py b/fHDHR/cli/run.py index 49be508..54c5e8c 100644 --- a/fHDHR/cli/run.py +++ b/fHDHR/cli/run.py @@ -70,17 +70,10 @@ def run(settings, logger, db, script_dir, fHDHR_web, origin, alternative_epg): if settings.dict["main"]["thread_method"] in ["multiprocessing", "threading"]: fhdhr_epg.start() - # Perform some actions now that HTTP Server is running, but don't wait for response - # Hit EPG Update API URL without waiting + # Perform some actions now that HTTP Server is running fhdhr.logger.info("Waiting 3 seconds to send startup tasks trigger.") time.sleep(3) - try: - fhdhr.web.session.get("%s/api/startup_tasks" % (fhdhr.api.base)) - except fhdhr.web.exceptions.ReadTimeout: - pass - except fhdhr.web.exceptions.ConnectionError as e: - fhdhr.logger.warning("Startup tasks failed: %s" % e) - pass + fhdhr.api.client.get("/api/startup_tasks") # wait forever while True: diff --git a/fHDHR/tools/__init__.py b/fHDHR/tools/__init__.py index 0295ad2..306db02 100644 --- a/fHDHR/tools/__init__.py +++ b/fHDHR/tools/__init__.py @@ -134,3 +134,8 @@ class WebReq(): def __init__(self): self.session = requests.Session() self.exceptions = requests.exceptions + + def __getattr__(self, name): + ''' will only get called for undefined attributes ''' + if hasattr(self.session, name): + return eval("self.session." + name) diff --git a/fHDHR_web/__init__.py b/fHDHR_web/__init__.py index 4371ba1..565ca74 100644 --- a/fHDHR_web/__init__.py +++ b/fHDHR_web/__init__.py @@ -21,7 +21,9 @@ class fHDHR_HTTP_Server(): self.fhdhr.logger.info("Loading Flask.") - self.app = Flask("fHDHR", template_folder=self.template_folder) + self.fhdhr.app = Flask("fHDHR", template_folder=self.template_folder) + self.fhdhr.app.testing = True + self.fhdhr.api.client = self.fhdhr.app.test_client() self.fhdhr.logger.info("Loading HTTP Pages Endpoints.") self.pages = fHDHR_Pages(fhdhr) @@ -47,9 +49,9 @@ class fHDHR_HTTP_Server(): self.origin_endpoints = self.fhdhr.originwrapper.origin.origin_web.fHDHR_Origin_Web(fhdhr) self.add_endpoints(self.origin_endpoints, "origin_endpoints") - self.app.before_request(self.before_request) - self.app.after_request(self.after_request) - self.app.before_first_request(self.before_first_request) + self.fhdhr.app.before_request(self.before_request) + self.fhdhr.app.after_request(self.after_request) + self.fhdhr.app.before_first_request(self.before_first_request) def before_first_request(self): self.fhdhr.logger.info("HTTP Server Online.") @@ -90,12 +92,12 @@ class fHDHR_HTTP_Server(): return True def add_endpoint(self, endpoint=None, endpoint_name=None, handler=None, methods=['GET']): - self.app.add_url_rule(endpoint, endpoint_name, handler, methods=methods) + self.fhdhr.app.add_url_rule(endpoint, endpoint_name, handler, methods=methods) def run(self): self.http = WSGIServer(self.fhdhr.api.address_tuple, - self.app.wsgi_app, + self.fhdhr.app.wsgi_app, log=self.fhdhr.logger) try: diff --git a/fHDHR_web/api/startup_tasks.py b/fHDHR_web/api/startup_tasks.py index 8191dbe..63c2c2f 100644 --- a/fHDHR_web/api/startup_tasks.py +++ b/fHDHR_web/api/startup_tasks.py @@ -16,20 +16,18 @@ class Startup_Tasks(): def get(self, *args): - # Hit Channel Update API URL without waiting unless we've never scanned before + # Hit Channel Update API haseverscanned = self.fhdhr.db.get_fhdhr_value("channels", "scanned_time") + updatechannels = False if not haseverscanned: - self.fhdhr.web.session.get(self.channel_update_url) + updatechannels = True elif self.fhdhr.config.dict["fhdhr"]["chanscan_on_start"]: - try: - self.fhdhr.web.session.get(self.channel_update_url, timeout=0.0000000001) - except self.fhdhr.web.exceptions.ReadTimeout: - pass + updatechannels = True - # Hit EPG Update API URL without waiting - try: - self.fhdhr.web.session.get(self.epg_update_url, timeout=0.0000000001) - except self.fhdhr.web.exceptions.ReadTimeout: - pass + if updatechannels: + self.fhdhr.api.client.get(self.channel_update_url) + + # Hit EPG Update API + self.fhdhr.api.client.get(self.epg_update_url) return "Success"