Skip to content

Commit 30c8e38

Browse files
authored
Adds proxies parameter to taiga client and requestmaker (#223)
* Add proxies parameter to taiga client * Update tests to pass proxies argument
1 parent fd2519a commit 30c8e38

15 files changed

+83
-14
lines changed

AUTHORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,4 @@ Robin Gustafsson <[email protected]>
2525
Daniel Federschmidt <[email protected]>
2626
Robert Dyer <[email protected]>
2727
Patrick Szczepański <[email protected]>
28+
Hassen Ben Tanfous <[email protected]>

changes/55.feature

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add proxies parameter to taiga client

taiga/client.py

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,21 +57,31 @@ class TaigaAPI:
5757
:param token_type: the token type
5858
:param tls_verify: verify server certificate
5959
:param auth_type: authentication type identifier
60+
:param proxies: a dictionary of proxies to use for requests
6061
"""
6162

6263
def __init__(
63-
self, host="https://api.taiga.io", token=None, token_type="Bearer", tls_verify=True, auth_type="normal"
64+
self,
65+
host="https://api.taiga.io",
66+
token=None,
67+
token_type="Bearer",
68+
tls_verify=True,
69+
auth_type="normal",
70+
proxies=None,
6471
):
6572
self.host = host
6673
self.token = token
6774
self.token_refresh = None
6875
self.token_type = token_type
6976
self.tls_verify = tls_verify
7077
self.auth_type = auth_type
78+
self.proxies = proxies
7179
if not self.tls_verify:
7280
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
7381
if token:
74-
self.raw_request = RequestMaker("/api/v1", self.host, self.token, self.token_type, self.tls_verify)
82+
self.raw_request = RequestMaker(
83+
"/api/v1", self.host, self.token, self.token_type, self.tls_verify, proxies=proxies
84+
)
7585
self._init_resources()
7686

7787
def _init_resources(self):
@@ -137,14 +147,18 @@ def auth(self, username, password):
137147
payload = {"type": self.auth_type, "username": username, "password": password}
138148
try:
139149
full_url = utils.urljoin(self.host, "/api/v1/auth")
140-
response = requests.post(full_url, data=json.dumps(payload), headers=headers, verify=self.tls_verify)
150+
response = requests.post(
151+
full_url, data=json.dumps(payload), headers=headers, verify=self.tls_verify, proxies=self.proxies
152+
)
141153
except RequestException:
142154
raise exceptions.TaigaRestException(full_url, 400, "NETWORK ERROR", "POST")
143155
if response.status_code != 200:
144156
raise exceptions.TaigaRestException(full_url, response.status_code, response.text, "POST")
145157
self.token = response.json()["auth_token"]
146158
self.token_refresh = response.json()["refresh"]
147-
self.raw_request = RequestMaker("/api/v1", self.host, self.token, "Bearer", self.tls_verify)
159+
self.raw_request = RequestMaker(
160+
"/api/v1", self.host, self.token, "Bearer", self.tls_verify, proxies=self.proxies
161+
)
148162
self._init_resources()
149163

150164
def auth_app(self, app_id, app_secret, auth_code, state=""):
@@ -159,7 +173,9 @@ def auth_app(self, app_id, app_secret, auth_code, state=""):
159173
payload = {"application": app_id, "auth_code": auth_code, "state": state}
160174
try:
161175
full_url = utils.urljoin(self.host, "/api/v1/application-tokens/validate")
162-
response = requests.post(full_url, data=json.dumps(payload), headers=headers, verify=self.tls_verify)
176+
response = requests.post(
177+
full_url, data=json.dumps(payload), headers=headers, verify=self.tls_verify, proxies=self.proxies
178+
)
163179
except RequestException:
164180
raise exceptions.TaigaRestException(full_url, 400, "NETWORK ERROR", "POST")
165181
if response.status_code != 200:
@@ -185,7 +201,9 @@ def auth_app(self, app_id, app_secret, auth_code, state=""):
185201
if self.token is None:
186202
raise exceptions.TaigaRestException(full_url, 400, "INVALID TOKEN", "POST")
187203

188-
self.raw_request = RequestMaker("/api/v1", self.host, self.token, "Application", self.tls_verify)
204+
self.raw_request = RequestMaker(
205+
"/api/v1", self.host, self.token, "Application", self.tls_verify, proxies=self.proxies
206+
)
189207
self._init_resources()
190208

191209
def refresh_token(self, token_refresh=""):
@@ -205,12 +223,16 @@ def refresh_token(self, token_refresh=""):
205223
payload = {"refresh": token_refresh}
206224
try:
207225
full_url = utils.urljoin(self.host, "/api/v1/auth/refresh")
208-
response = requests.post(full_url, data=json.dumps(payload), headers=headers, verify=self.tls_verify)
226+
response = requests.post(
227+
full_url, data=json.dumps(payload), headers=headers, verify=self.tls_verify, proxies=self.proxies
228+
)
209229
except RequestException:
210230
raise exceptions.TaigaRestException(full_url, 400, "NETWORK ERROR", "POST")
211231
if response.status_code != 200:
212232
raise exceptions.TaigaRestException(full_url, response.status_code, response.text, "POST")
213233
self.token = response.json()["auth_token"]
214234
self.token_refresh = response.json()["refresh"]
215-
self.raw_request = RequestMaker("/api/v1", self.host, self.token, "Bearer", self.tls_verify)
235+
self.raw_request = RequestMaker(
236+
"/api/v1", self.host, self.token, "Bearer", self.tls_verify, proxies=self.proxies
237+
)
216238
self._init_resources()

taiga/requestmaker.py

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,16 @@ class RequestMakerException(Exception): # noqa: N818
4949

5050

5151
class RequestMaker:
52-
def __init__(self, api_path, host, token, token_type="Bearer", tls_verify=True, enable_pagination=True):
52+
def __init__(
53+
self, api_path, host, token, token_type="Bearer", tls_verify=True, enable_pagination=True, proxies=None
54+
):
5355
self.api_path = api_path
5456
self.host = host
5557
self.token = token
5658
self.token_type = token_type
5759
self.tls_verify = tls_verify
5860
self.enable_pagination = enable_pagination
61+
self.proxies = proxies
5962
self._cache = RequestCache()
6063
if not self.tls_verify:
6164
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
@@ -99,7 +102,11 @@ def get(self, uri, query=None, cache=False, paginate=True, **parameters):
99102

100103
if not result:
101104
result = requests.get(
102-
full_url, headers=self.headers(paginate), params=query or {}, verify=self.tls_verify
105+
full_url,
106+
headers=self.headers(paginate),
107+
params=query or {},
108+
verify=self.tls_verify,
109+
proxies=self.proxies,
103110
)
104111
if cache:
105112
self._cache.put(full_url, result)
@@ -124,7 +131,13 @@ def post(self, uri, payload=None, query=None, files=None, **parameters):
124131
try:
125132
full_url = self.urljoin(self.host, self.api_path, uri.format(**parameters))
126133
result = requests.post(
127-
full_url, headers=headers, data=data, params=query or {}, files=files, verify=self.tls_verify
134+
full_url,
135+
headers=headers,
136+
data=data,
137+
params=query or {},
138+
files=files,
139+
verify=self.tls_verify,
140+
proxies=self.proxies,
128141
)
129142
except RequestException:
130143
raise exceptions.TaigaRestException(full_url, 400, "Network error!", "POST")
@@ -136,7 +149,9 @@ def post(self, uri, payload=None, query=None, files=None, **parameters):
136149
def delete(self, uri, query=None, **parameters):
137150
try:
138151
full_url = self.urljoin(self.host, self.api_path, uri.format(**parameters))
139-
result = requests.delete(full_url, headers=self.headers(), params=query or {}, verify=self.tls_verify)
152+
result = requests.delete(
153+
full_url, headers=self.headers(), params=query or {}, verify=self.tls_verify, proxies=self.proxies
154+
)
140155
except RequestException:
141156
raise exceptions.TaigaRestException(full_url, 400, "Network error!", "DELETE")
142157
if not self.is_bad_response(result):
@@ -148,7 +163,12 @@ def put(self, uri, payload=None, query=None, **parameters):
148163
try:
149164
full_url = self.urljoin(self.host, self.api_path, uri.format(**parameters))
150165
result = requests.put(
151-
full_url, headers=self.headers(), data=json.dumps(payload), params=query or {}, verify=self.tls_verify
166+
full_url,
167+
headers=self.headers(),
168+
data=json.dumps(payload),
169+
params=query or {},
170+
verify=self.tls_verify,
171+
proxies=self.proxies,
152172
)
153173
except RequestException:
154174
raise exceptions.TaigaRestException(full_url, 400, "Network error!", "PUT")
@@ -161,7 +181,12 @@ def patch(self, uri, payload=None, query=None, **parameters):
161181
try:
162182
full_url = self.urljoin(self.host, self.api_path, uri.format(**parameters))
163183
result = requests.patch(
164-
full_url, headers=self.headers(), data=json.dumps(payload), params=query or {}, verify=self.tls_verify
184+
full_url,
185+
headers=self.headers(),
186+
data=json.dumps(payload),
187+
params=query or {},
188+
verify=self.tls_verify,
189+
proxies=self.proxies,
165190
)
166191
except RequestException:
167192
raise exceptions.TaigaRestException(full_url, 400, "Network error!", "PATCH")

tests/test_auth.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ def test_refresh_token_passed_token(self, requests_post):
6767
data='{"refresh": "testToken"}',
6868
headers={"Content-type": "application/json"},
6969
verify=True,
70+
proxies=None,
7071
)
7172

7273
@patch("taiga.client.requests.post")

tests/test_issue_statuses.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def test_delete_issue_statuses(self, requests_delete):
2525
headers={"Content-type": "application/json", "Authorization": "Bearer f4k3", "x-lazy-pagination": "True"},
2626
params={"moveTo": 2},
2727
verify=True,
28+
proxies=None,
2829
)
2930

3031
@patch("taiga.requestmaker.requests.delete")
@@ -37,4 +38,5 @@ def test_delete_issue_status(self, requests_delete):
3738
headers={"Content-type": "application/json", "Authorization": "Bearer f4k3", "x-lazy-pagination": "True"},
3839
params={"moveTo": 2},
3940
verify=True,
41+
proxies=None,
4042
)

tests/test_issue_types.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def test_delete_issue_types(self, requests_delete):
2525
headers={"Content-type": "application/json", "Authorization": "Bearer f4k3", "x-lazy-pagination": "True"},
2626
params={"moveTo": 2},
2727
verify=True,
28+
proxies=None,
2829
)
2930

3031
@patch("taiga.requestmaker.requests.delete")
@@ -37,4 +38,5 @@ def test_delete_issue_type(self, requests_delete):
3738
headers={"Content-type": "application/json", "Authorization": "Bearer f4k3", "x-lazy-pagination": "True"},
3839
params={"moveTo": 2},
3940
verify=True,
41+
proxies=None,
4042
)

tests/test_model_base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ def test_call_model_base_list_elements_no_paginate_check_requests(self, mock_req
232232
"Content-type": "application/json",
233233
"Authorization": "Bearer faketoken",
234234
},
235+
proxies=None,
235236
)
236237
self.assertEqual(len(f_list), 9)
237238

@@ -253,6 +254,7 @@ def test_call_model_base_list_elements_paginate_check_requests(self, mock_reques
253254
"Content-type": "application/json",
254255
"Authorization": "Bearer faketoken",
255256
},
257+
proxies=None,
256258
)
257259
self.assertEqual(len(f_list), 9)
258260

tests/test_points.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def test_delete_points(self, requests_delete):
2525
headers={"Content-type": "application/json", "Authorization": "Bearer f4k3", "x-lazy-pagination": "True"},
2626
params={"moveTo": 2},
2727
verify=True,
28+
proxies=None,
2829
)
2930

3031
@patch("taiga.requestmaker.requests.delete")
@@ -37,4 +38,5 @@ def test_delete_point(self, requests_delete):
3738
headers={"Content-type": "application/json", "Authorization": "Bearer f4k3", "x-lazy-pagination": "True"},
3839
params={"moveTo": 2},
3940
verify=True,
41+
proxies=None,
4042
)

tests/test_priorities.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def test_delete_priorities(self, requests_delete):
2525
headers={"Content-type": "application/json", "Authorization": "Bearer f4k3", "x-lazy-pagination": "True"},
2626
params={"moveTo": 2},
2727
verify=True,
28+
proxies=None,
2829
)
2930

3031
@patch("taiga.requestmaker.requests.delete")
@@ -37,4 +38,5 @@ def test_delete_priority(self, requests_delete):
3738
headers={"Content-type": "application/json", "Authorization": "Bearer f4k3", "x-lazy-pagination": "True"},
3839
params={"moveTo": 2},
3940
verify=True,
41+
proxies=None,
4042
)

0 commit comments

Comments
 (0)