Allow setting multiple proxies + some cleanup

This commit is contained in:
Hugo van Kemenade 2022-01-24 17:23:08 +02:00
parent da2e7152ba
commit 1a45c3b919
2 changed files with 17 additions and 23 deletions

View file

@ -19,6 +19,8 @@
# #
# https://github.com/pylast/pylast # https://github.com/pylast/pylast
from __future__ import annotations
import collections import collections
import hashlib import hashlib
import html.entities import html.entities
@ -194,7 +196,6 @@ class _Network:
self.urls = urls self.urls = urls
self.cache_backend = None self.cache_backend = None
self.proxy_enabled = False
self.proxy = None self.proxy = None
self.last_call_time = 0 self.last_call_time = 0
self.limit_rate = False self.limit_rate = False
@ -394,26 +395,20 @@ class _Network:
return seq return seq
def enable_proxy(self, host, port): def enable_proxy(self, proxy: str | dict) -> None:
"""Enable a default web proxy""" """Enable default web proxy.
Multiple proxies can be passed as a `dict`, see
https://www.python-httpx.org/advanced/#http-proxying
"""
self.proxy = proxy
self.proxy = f"{host}:{_number(port)}" def disable_proxy(self) -> None:
self.proxy_enabled = True
def disable_proxy(self):
"""Disable using the web proxy""" """Disable using the web proxy"""
self.proxy = None
self.proxy_enabled = False def is_proxy_enabled(self) -> bool:
"""Returns True if web proxy is enabled."""
def is_proxy_enabled(self): return self.proxy is not None
"""Returns True if a web proxy is enabled."""
return self.proxy_enabled
def _get_proxy(self):
"""Returns proxy details."""
return self.proxy
def enable_rate_limit(self): def enable_rate_limit(self):
"""Enables rate limiting for this network""" """Enables rate limiting for this network"""
@ -922,7 +917,7 @@ class _Request:
verify=SSL_CONTEXT, verify=SSL_CONTEXT,
base_url=f"https://{host_name}", base_url=f"https://{host_name}",
headers=HEADERS, headers=HEADERS,
proxies=f"http://{self.network._get_proxy()}", proxies=self.network.proxy,
) )
else: else:
client = httpx.Client( client = httpx.Client(

View file

@ -296,13 +296,12 @@ class TestPyLastNetwork(TestPyLastWithLastFm):
def test_proxy(self): def test_proxy(self):
# Arrange # Arrange
host = "example.com" proxy = "http://example.com:1234"
port = 1234
# Act / Assert # Act / Assert
self.network.enable_proxy(host, port) self.network.enable_proxy(proxy)
assert self.network.is_proxy_enabled() assert self.network.is_proxy_enabled()
assert self.network._get_proxy() == "example.com:1234" assert self.network.proxy == "http://example.com:1234"
self.network.disable_proxy() self.network.disable_proxy()
assert not self.network.is_proxy_enabled() assert not self.network.is_proxy_enabled()