Skip to content

Commit 77e1174

Browse files
committed
Update warning when invalid delivery is set
1 parent 294dc20 commit 77e1174

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

bugsnag/configuration.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,25 @@ def delivery(self):
273273
def delivery(self, value):
274274
if hasattr(value, 'deliver') and callable(value.deliver):
275275
self._delivery = value
276+
277+
# deliver_sessions is _technically_ optional in that if you disable
278+
# session tracking it will never be called
279+
# this should be made mandatory in the next major release
280+
if (
281+
hasattr(value, 'deliver_sessions') and
282+
callable(value.deliver_sessions)
283+
):
284+
parameter_names = value.deliver_sessions.__code__.co_varnames
285+
286+
if 'options' not in parameter_names:
287+
warnings.warn(
288+
'delivery.deliver_sessions should accept an ' +
289+
'"options" parameter to allow for synchronous ' +
290+
'delivery, sessions may be lost when the process ' +
291+
'exits',
292+
DeprecationWarning
293+
)
294+
276295
else:
277296
message = ('delivery should implement Delivery interface, got ' +
278297
'{0}. This will be an error in a future release.')

tests/test_configuration.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,13 @@ class BadDelivery(object):
195195
def deliv(self, *args, **kwargs):
196196
pass
197197

198+
class OkDelivery:
199+
def deliver(self, *args, **kwargs):
200+
pass
201+
202+
def deliver_sessions(self, config, payload):
203+
pass
204+
198205
class GoodDelivery(object):
199206
def deliver(self, *args, **kwargs):
200207
pass
@@ -213,6 +220,20 @@ def deliver(self, *args, **kwargs):
213220
assert len(record) == 1
214221
assert c.delivery == good
215222

223+
with pytest.warns(DeprecationWarning) as record:
224+
ok = OkDelivery()
225+
226+
c.configure(delivery=ok)
227+
228+
assert len(record) == 1
229+
assert str(record[0].message) == (
230+
'delivery.deliver_sessions should accept an "options" ' +
231+
'parameter to allow for synchronous delivery, sessions ' +
232+
'may be lost when the process exits'
233+
)
234+
235+
assert c.delivery == ok
236+
216237
def test_validate_hostname(self):
217238
c = Configuration()
218239
with pytest.warns(RuntimeWarning) as record:

0 commit comments

Comments
 (0)