Skip to content

Commit 5641bb6

Browse files
authored
refactor download_videos to use proxies (#551)
* refactor download_videos to use proxies
1 parent 97be9c5 commit 5641bb6

File tree

2 files changed

+758
-463
lines changed

2 files changed

+758
-463
lines changed

backend/lib/proxied_requests.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@ class FailedProxiedRequest:
1515
A delegated request that has failed for whatever reason
1616
1717
The failure context (usually the exception) is stored in the `context`
18-
property.
18+
property. We also keep track of the proxy URL that serviced the request so
19+
downstream consumers can make informed retry decisions.
1920
"""
2021

2122
context = None
23+
proxy_url = None
2224

23-
def __init__(self, context=None):
25+
def __init__(self, context=None, proxy_url=None):
2426
self.context = context
27+
self.proxy_url = proxy_url
2528

2629

2730
class NoProxiesAvailableError(Exception):
@@ -561,6 +564,13 @@ def manage_requests(self):
561564
self.log.info(f"Removed proxy {proxy_url} (completed all active requests)")
562565
try:
563566
response = url_metadata.proxied.request.result()
567+
# annotate the response so processors can see which
568+
# proxy (if any) handled the request
569+
setattr(
570+
response,
571+
"_4cat_proxy",
572+
url_metadata.proxied.proxy.proxy_url,
573+
)
564574
url_metadata.proxied.result = response
565575

566576
except requests.exceptions.ProxyError as e:
@@ -590,7 +600,9 @@ def manage_requests(self):
590600
urllib3.exceptions.HTTPError,
591601
) as e:
592602
# this is where timeouts, etc, go
593-
url_metadata.proxied.result = FailedProxiedRequest(e)
603+
url_metadata.proxied.result = FailedProxiedRequest(
604+
e, url_metadata.proxied.proxy.proxy_url
605+
)
594606

595607
finally:
596608
# success or fail, we can pass it on

0 commit comments

Comments
 (0)