aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_networking.py
diff options
context:
space:
mode:
authorcoletdjnz <coletdjnz@protonmail.com>2023-08-05 10:17:48 +1200
committerGitHub <noreply@github.com>2023-08-04 22:17:48 +0000
commitdb7b054a6111ca387220d0eb87bf342f9c130eb8 (patch)
treeed433e2cfa1fae8468603e19aea8264761dec75f /test/test_networking.py
parentdb9743894071760f994f640a4c24358f749a78c0 (diff)
downloadhypervideo-pre-db7b054a6111ca387220d0eb87bf342f9c130eb8.tar.lz
hypervideo-pre-db7b054a6111ca387220d0eb87bf342f9c130eb8.tar.xz
hypervideo-pre-db7b054a6111ca387220d0eb87bf342f9c130eb8.zip
[networking] Add request handler preference framework (#7603)
Preference functions that take a request and a request handler instance can be registered to prioritize different request handlers per request. Authored by: coletdjnz Co-authored-by: pukkandan <pukkandan.ytdlp@gmail.com>
Diffstat (limited to 'test/test_networking.py')
-rw-r--r--test/test_networking.py29
1 files changed, 25 insertions, 4 deletions
diff --git a/test/test_networking.py b/test/test_networking.py
index 9c33b0d4c..2622d24da 100644
--- a/test/test_networking.py
+++ b/test/test_networking.py
@@ -1035,17 +1035,17 @@ class TestRequestDirector:
assert isinstance(director.send(Request('http://')), FakeResponse)
def test_unsupported_handlers(self):
- director = RequestDirector(logger=FakeLogger())
- director.add_handler(FakeRH(logger=FakeLogger()))
-
class SupportedRH(RequestHandler):
_SUPPORTED_URL_SCHEMES = ['http']
def _send(self, request: Request):
return Response(fp=io.BytesIO(b'supported'), headers={}, url=request.url)
- # This handler should by default take preference over FakeRH
+ director = RequestDirector(logger=FakeLogger())
director.add_handler(SupportedRH(logger=FakeLogger()))
+ director.add_handler(FakeRH(logger=FakeLogger()))
+
+ # First should take preference
assert director.send(Request('http://')).read() == b'supported'
assert director.send(Request('any://')).read() == b''
@@ -1072,6 +1072,27 @@ class TestRequestDirector:
director.add_handler(UnexpectedRH(logger=FakeLogger))
assert director.send(Request('any://'))
+ def test_preference(self):
+ director = RequestDirector(logger=FakeLogger())
+ director.add_handler(FakeRH(logger=FakeLogger()))
+
+ class SomeRH(RequestHandler):
+ _SUPPORTED_URL_SCHEMES = ['http']
+
+ def _send(self, request: Request):
+ return Response(fp=io.BytesIO(b'supported'), headers={}, url=request.url)
+
+ def some_preference(rh, request):
+ return (0 if not isinstance(rh, SomeRH)
+ else 100 if 'prefer' in request.headers
+ else -1)
+
+ director.add_handler(SomeRH(logger=FakeLogger()))
+ director.preferences.add(some_preference)
+
+ assert director.send(Request('http://')).read() == b''
+ assert director.send(Request('http://', headers={'prefer': '1'})).read() == b'supported'
+
# XXX: do we want to move this to test_YoutubeDL.py?
class TestYoutubeDLNetworking: