diff options
author | coletdjnz <coletdjnz@protonmail.com> | 2023-08-05 10:17:48 +1200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-04 22:17:48 +0000 |
commit | db7b054a6111ca387220d0eb87bf342f9c130eb8 (patch) | |
tree | ed433e2cfa1fae8468603e19aea8264761dec75f /test/test_networking.py | |
parent | db9743894071760f994f640a4c24358f749a78c0 (diff) | |
download | hypervideo-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.py | 29 |
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: |