Skip to content

Commit 68906b9

Browse files
committed
feat(transport): add kwargs updater to the transport
Fix: #15
1 parent 723fb0b commit 68906b9

File tree

3 files changed

+46
-4
lines changed

3 files changed

+46
-4
lines changed

peasant/client/transport.py

+16-2
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
from __future__ import annotations
1616

1717
import logging
18-
import typing
18+
import typing as t
1919
from urllib.parse import urlencode, urlparse
2020

21-
if typing.TYPE_CHECKING:
21+
if t.TYPE_CHECKING:
2222
from peasant.client.protocol import Peasant
2323

2424
logger = logging.getLogger(__name__)
@@ -66,8 +66,17 @@ def fix_address(address):
6666

6767
class Transport:
6868

69+
_kwargs_updater: t.Callable = None
6970
_peasant: Peasant
7071

72+
@property
73+
def kwargs_updater(self) -> t.Callable:
74+
return self._kwargs_updater
75+
76+
@kwargs_updater.setter
77+
def kwargs_updater(self, callable: t.Callable):
78+
self._kwargs_updater = callable
79+
7180
@property
7281
def peasant(self) -> Peasant:
7382
return self._peasant
@@ -114,3 +123,8 @@ def new_nonce(self):
114123

115124
def is_registered(self):
116125
raise NotImplementedError
126+
127+
def update_kwargs(self, method, **kwargs):
128+
if self.kwargs_updater is None:
129+
return kwargs
130+
return self.kwargs_updater(method, **kwargs)

peasant/client/transport_requests.py

+15-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
import copy
1616
import logging
1717
from peasant import get_version
18-
from peasant.client.transport import Transport
18+
from peasant.client.transport import (METHOD_DELETE, METHOD_GET, METHOD_HEAD,
19+
METHOD_OPTIONS, METHOD_PATCH,
20+
METHOD_POST, METHOD_PUT, Transport)
1921

2022
logger = logging.getLogger(__name__)
2123

@@ -58,6 +60,11 @@ def get_headers(self, **kwargs):
5860
headers.update(_headers)
5961
return headers
6062

63+
def update_kwargs(self, method, **kwargs):
64+
if self.kwargs_updater is None:
65+
return kwargs
66+
return self.kwargs_updater(method, **kwargs)
67+
6168
def delete(self, path: str, **kwargs):
6269
""" Sends a delete method with basic headers.
6370
@@ -67,6 +74,7 @@ def delete(self, path: str, **kwargs):
6774
:return: :class:`requests.Response <Response>` object
6875
:rtype: requests.Response
6976
"""
77+
self.update_kwargs("DELETE", **kwargs)
7078
url = self.get_url(path, **kwargs)
7179
headers = self.get_headers(**kwargs)
7280
kwargs['headers'] = headers
@@ -83,6 +91,7 @@ def get(self, path, **kwargs):
8391
:return: :class:`requests.Response <Response>` object
8492
:rtype: requests.Response
8593
"""
94+
self.update_kwargs(METHOD_GET, **kwargs)
8695
url = self.get_url(path, **kwargs)
8796
headers = self.get_headers(**kwargs)
8897
kwargs['headers'] = headers
@@ -99,6 +108,7 @@ def head(self, path, **kwargs):
99108
:return: :class:`requests.Response <Response>` object
100109
:rtype: requests.Response
101110
"""
111+
self.update_kwargs(METHOD_HEAD, **kwargs)
102112
url = self.get_url(path, **kwargs)
103113
headers = self.get_headers(**kwargs)
104114
kwargs['headers'] = headers
@@ -115,6 +125,7 @@ def options(self, path, **kwargs):
115125
:return: :class:`requests.Response <Response>` object
116126
:rtype: requests.Response
117127
"""
128+
self.update_kwargs(METHOD_OPTIONS, **kwargs)
118129
url = self.get_url(path, **kwargs)
119130
headers = self.get_headers(**kwargs)
120131
kwargs['headers'] = headers
@@ -131,6 +142,7 @@ def patch(self, path, **kwargs):
131142
:return: :class:`requests.Response <Response>` object
132143
:rtype: requests.Response
133144
"""
145+
self.update_kwargs(METHOD_PATCH, **kwargs)
134146
url = self.get_url(path, **kwargs)
135147
headers = self.get_headers(**kwargs)
136148
kwargs['headers'] = headers
@@ -147,6 +159,7 @@ def post(self, path, **kwargs):
147159
:return: :class:`requests.Response <Response>` object
148160
:rtype: requests.Response
149161
"""
162+
self.update_kwargs(METHOD_POST, **kwargs)
150163
url = self.get_url(path, **kwargs)
151164
headers = self.get_headers(**kwargs)
152165
kwargs['headers'] = headers
@@ -163,6 +176,7 @@ def put(self, path, **kwargs):
163176
:return: :class:`requests.Response <Response>` object
164177
:rtype: requests.Response
165178
"""
179+
self.update_kwargs(METHOD_PUT, **kwargs)
166180
url = self.get_url(path, **kwargs)
167181
headers = self.get_headers(**kwargs)
168182
kwargs['headers'] = headers

tests/transport_test.py

+15-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
from peasant.client.transport import concat_url, fix_address
15+
from peasant.client.transport import (concat_url, fix_address, METHOD_POST,
16+
Transport)
1617
from unittest import TestCase
1718

1819

@@ -75,3 +76,16 @@ def test_fix_address(self):
7576
expected_address = "http://localhost/a/path"
7677
fixed_address = fix_address(address)
7778
self.assertEqual(expected_address, fixed_address)
79+
80+
def test_kwargs_updater(self):
81+
transport = Transport()
82+
83+
def kwargs_updater(method, **kwargs):
84+
kwargs['test'] = method
85+
return kwargs
86+
87+
kwargs = {}
88+
transport.kwargs_updater = kwargs_updater
89+
kwargs = transport.update_kwargs(METHOD_POST, **kwargs)
90+
self.assertTrue("test" in kwargs)
91+
self.assertEqual(METHOD_POST, kwargs['test'])

0 commit comments

Comments
 (0)