Skip to content

Commit 8e6f5f9

Browse files
committed
Add proxy support
1 parent c318750 commit 8e6f5f9

File tree

4 files changed

+52
-4
lines changed

4 files changed

+52
-4
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import detectlanguage
2222

2323
detectlanguage.configuration.api_key = "YOUR API KEY"
2424

25-
# Enable secure mode (SSL) if you are passing sensitive data
26-
# detectlanguage.configuration.secure = True
25+
# You can use proxy if needed
26+
# detectlanguage.configuration.proxies = {'https': 'https://user:[email protected]:8080'}
2727
```
2828

2929
## Usage

detectlanguage/client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ def __init__(self, configuration):
1313
self.configuration = configuration
1414

1515
def get(self, path, payload = {}):
16-
r = requests.get(self.url(path), params=payload, headers = self.headers(), timeout = self.configuration.timeout)
16+
r = requests.get(self.url(path), params=payload, headers = self.headers(), timeout = self.configuration.timeout, proxies = self.configuration.proxies)
1717
return self.handle_response(r)
1818

1919
def post(self, path, payload):
20-
r = requests.post(self.url(path), json=payload, headers = self.headers(), timeout = self.configuration.timeout)
20+
r = requests.post(self.url(path), json=payload, headers = self.headers(), timeout = self.configuration.timeout, proxies = self.configuration.proxies)
2121
return self.handle_response(r)
2222

2323
def handle_response(self, r):

detectlanguage/configuration.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ class Configuration:
66
host = 'ws.detectlanguage.com'
77
user_agent = 'Detect Language API Python Client ' + detectlanguage.__version__
88
timeout = 5
9+
proxies = None # e.g., {'https': 'https://proxy.example.com:8080'}

tests/test_proxy.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import unittest
2+
from unittest.mock import patch, MagicMock
3+
import detectlanguage
4+
5+
6+
class TestProxyConfiguration(unittest.TestCase):
7+
def setUp(self):
8+
detectlanguage.configuration.proxies = None
9+
10+
def test_proxy_configuration(self):
11+
"""Test proxy configuration"""
12+
detectlanguage.configuration.proxies = {'https': 'https://proxy.example.com:8080'}
13+
self.assertEqual(detectlanguage.configuration.proxies, {'https': 'https://proxy.example.com:8080'})
14+
15+
@patch('requests.get')
16+
def test_client_uses_proxy(self, mock_get):
17+
"""Test that client uses configured proxy"""
18+
detectlanguage.configuration.proxies = {'https': 'https://proxy.example.com:8080'}
19+
20+
mock_response = MagicMock()
21+
mock_response.json.return_value = {'test': 'data'}
22+
mock_response.raise_for_status.return_value = None
23+
mock_get.return_value = mock_response
24+
25+
detectlanguage.account_status()
26+
27+
mock_get.assert_called_once()
28+
self.assertEqual(mock_get.call_args[1]['proxies'], {'https': 'https://proxy.example.com:8080'})
29+
30+
@patch('requests.get')
31+
def test_client_no_proxy_when_disabled(self, mock_get):
32+
"""Test that client doesn't use proxy when disabled"""
33+
detectlanguage.configuration.proxies = None
34+
35+
mock_response = MagicMock()
36+
mock_response.json.return_value = {'test': 'data'}
37+
mock_response.raise_for_status.return_value = None
38+
mock_get.return_value = mock_response
39+
40+
detectlanguage.account_status()
41+
42+
mock_get.assert_called_once()
43+
self.assertIsNone(mock_get.call_args[1]['proxies'])
44+
45+
46+
if __name__ == '__main__':
47+
unittest.main()

0 commit comments

Comments
 (0)