Skip to content

Commit b522f7e

Browse files
authored
Merge pull request #83 from exponea/Add-option-to-use-requests.Session
Add option to use requests.session
2 parents 1d1e1d4 + 2653f35 commit b522f7e

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

pywebpush/__init__.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class WebPusher:
9595
"aes128gcm" # draft-httpbis-encryption-encoding-04
9696
]
9797

98-
def __init__(self, subscription_info):
98+
def __init__(self, subscription_info, requests_session=None):
9999
"""Initialize using the info provided by the client PushSubscription
100100
object (See
101101
https://developer.mozilla.org/en-US/docs/Web/API/PushManager/subscribe)
@@ -104,7 +104,16 @@ def __init__(self, subscription_info):
104104
the client.
105105
:type subscription_info: dict
106106
107+
:param requests_session: a requests.Session object to optimize requests
108+
to the same client.
109+
:type requests_session: requests.Session
110+
107111
"""
112+
if requests_session is None:
113+
self.requests_method = requests
114+
else:
115+
self.requests_method = requests_session
116+
108117
if 'endpoint' not in subscription_info:
109118
raise WebPushException("subscription_info missing endpoint URL")
110119
self.subscription_info = subscription_info
@@ -285,10 +294,10 @@ def send(self, data=None, headers=None, ttl=0, gcm_key=None, reg_id=None,
285294
# Authorization / Crypto-Key (VAPID headers)
286295
if curl:
287296
return self.as_curl(endpoint, encoded_data, headers)
288-
return requests.post(endpoint,
289-
data=encoded_data,
290-
headers=headers,
291-
timeout=timeout)
297+
return self.requests_method.post(endpoint,
298+
data=encoded_data,
299+
headers=headers,
300+
timeout=timeout)
292301

293302

294303
def webpush(subscription_info,

pywebpush/tests/test_webpush.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,3 +318,21 @@ def test_timeout(self, mock_post):
318318
eq_(mock_post.call_args[1].get('timeout'), 5.2)
319319
webpush(subscription_info, timeout=10.001)
320320
eq_(mock_post.call_args[1].get('timeout'), 10.001)
321+
322+
@patch("requests.Session")
323+
def test_send_using_requests_session(self, mock_session):
324+
subscription_info = self._gen_subscription_info()
325+
headers = {"Crypto-Key": "pre-existing",
326+
"Authentication": "bearer vapid"}
327+
data = "Mary had a little lamb"
328+
WebPusher(subscription_info,
329+
requests_session=mock_session).send(data, headers)
330+
eq_(subscription_info.get('endpoint'),
331+
mock_session.post.call_args[0][0])
332+
pheaders = mock_session.post.call_args[1].get('headers')
333+
eq_(pheaders.get('ttl'), '0')
334+
ok_('encryption' in pheaders)
335+
eq_(pheaders.get('AUTHENTICATION'), headers.get('Authentication'))
336+
ckey = pheaders.get('crypto-key')
337+
ok_('pre-existing' in ckey)
338+
eq_(pheaders.get('content-encoding'), 'aesgcm')

0 commit comments

Comments
 (0)