diff --git a/changedetectionio/__init__.py b/changedetectionio/__init__.py index 5b8a38af..07242bf3 100644 --- a/changedetectionio/__init__.py +++ b/changedetectionio/__init__.py @@ -1444,12 +1444,7 @@ def ticker_thread_check_time_launch_checks(): if not uuid in running_uuids and uuid not in [q_uuid for p,q_uuid in update_q.queue]: # Proxies can be set to have a limit on seconds between which they can be called - watch_proxy = watch.get('proxy') - if not watch_proxy: - watch_proxy = datastore.data['settings']['requests']['proxy'] - if not watch_proxy: - watch_proxy = list(datastore.proxy_list.keys())[0] - + watch_proxy = datastore.get_preferred_proxy_for_watch(uuid=uuid) if watch_proxy and watch_proxy in list(datastore.proxy_list.keys()): # Proxy may also have some threshold minimum proxy_list_reuse_time_minimum = int(datastore.proxy_list.get(watch_proxy, {}).get('reuse_time_minimum', 0)) diff --git a/changedetectionio/fetch_site_status.py b/changedetectionio/fetch_site_status.py index 26113353..79e282b5 100644 --- a/changedetectionio/fetch_site_status.py +++ b/changedetectionio/fetch_site_status.py @@ -20,36 +20,6 @@ class perform_site_check(): super().__init__(*args, **kwargs) self.datastore = datastore - # If there was a proxy list enabled, figure out what proxy_args/which proxy to use - # Returns the proxy as a URL - # if watch.proxy use that - # fetcher.proxy_override = watch.proxy or main config proxy - # Allows override the proxy on a per-request basis - # ALWAYS use the first one is nothing selected - - def set_proxy_from_list(self, watch): - proxy_args = None - if self.datastore.proxy_list is None: - return None - - # If its a valid one - if watch['proxy'] and watch['proxy'] in list(self.datastore.proxy_list.keys()): - proxy_args = self.datastore.proxy_list.get(watch['proxy']).get('url') - - # not valid (including None), try the system one - else: - system_proxy = self.datastore.data['settings']['requests']['proxy'] - # Is not None and exists - if self.datastore.proxy_list.get(system_proxy): - proxy_args = self.datastore.proxy_list.get(system_proxy).get('url') - - # Fallback - Did not resolve anything, use the first available - if proxy_args is None: - first_default = list(self.datastore.proxy_list)[0] - proxy_args = self.datastore.proxy_list.get(first_default).get('url') - - return proxy_args - # Doesn't look like python supports forward slash auto enclosure in re.findall # So convert it to inline flag "foobar(?i)" type configuration def forward_slash_enclosed_regex_to_options(self, regex): @@ -114,9 +84,12 @@ class perform_site_check(): # If the klass doesnt exist, just use a default klass = getattr(content_fetcher, "html_requests") - proxy_url = self.set_proxy_from_list(watch) - if proxy_url: + proxy_id = self.datastore.get_preferred_proxy_for_watch(uuid=uuid) + proxy_url = None + if proxy_id: + proxy_url = self.datastore.proxy_list.get(proxy_id).get('url') print ("UUID {} Using proxy {}".format(uuid, proxy_url)) + fetcher = klass(proxy_override=proxy_url) # Configurable per-watch or global extra delay before extracting text (for webDriver types) diff --git a/changedetectionio/store.py b/changedetectionio/store.py index 11f25283..4eb5dcd0 100644 --- a/changedetectionio/store.py +++ b/changedetectionio/store.py @@ -440,6 +440,36 @@ class ChangeDetectionStore: print ("Registered proxy list", list(self.proxy_list.keys())) + def get_preferred_proxy_for_watch(self, uuid): + """ + Returns the preferred proxy by ID key + :param uuid: UUID + :return: proxy "key" id + """ + + proxy_id = None + if self.proxy_list is None: + return None + + # If its a valid one + watch = self.data['watching'].get(uuid) + + if watch.get('proxy') and watch.get('proxy') in list(self.proxy_list.keys()): + return watch.get('proxy') + + # not valid (including None), try the system one + else: + system_proxy_id = self.data['settings']['requests'].get('proxy') + # Is not None and exists + if self.proxy_list.get(system_proxy_id): + return system_proxy_id + + # Fallback - Did not resolve anything, use the first available + if system_proxy_id is None: + first_default = list(self.proxy_list)[0] + return first_default + + return None # Run all updates # IMPORTANT - Each update could be run even when they have a new install and the schema is correct