Skip to content

Releases: bugsnag/bugsnag-python

v3.4.1

22 Feb 15:12

Choose a tag to compare

3.4.1 (2018-02-22)

Fixes

  • Ensure correct usage of is_authenticated in Django applications
    #143

  • Allow exception option to override a logged exception in handler callbacks
    #141

v3.4.0

10 Jan 04:30

Choose a tag to compare

Enhancements

  • Add support for tracking sessions and overall crash rate by setting
    auto_capture_sessions in configuration options
    Alex Moinet
    #135

v3.3.0

02 Nov 12:00

Choose a tag to compare

3.3.0 (2017-11-02)

Enhancements

  • Adds support for Django 2.0
    Denis
    #130

  • Updates and improves Python examples
    #128

v3.2.0

27 Sep 13:03

Choose a tag to compare

3.2.0 (2017-09-27)

Enhancements

  • Track difference between handled and unhandled exceptions
    #127

v3.1.2

18 Sep 13:11

Choose a tag to compare

3.1.2 (2017-09-18)

Enhancements

  • Added flask example app
    #122

  • Added example for using celery with django
    #124

  • Added issue template
    #125

Bug fixes

  • Fixed context being overridden in flask notifier
    #123

v3.1.1

08 Jun 21:15

Choose a tag to compare

Bug fixes

  • Fix possible stack overflow when using a log handler and not specifying an
    API key
    #120

  • Fix traceback_excludes_modules when using compiled Python modules
    Kobi Meirson
    #119

v3.1.0

25 Feb 02:16

Choose a tag to compare

Enhancements

Bug fixes

  • Fix over-filtering of payload data when filters matched payload fields
    #116
    #117

v3.0.0

31 Oct 21:18

Choose a tag to compare

This is a major release adding a number of new features and deprecating some
lesser used parts of the library. See UPGRADING.md for upgrade instructions.

Enhancements

  • Add compatibility with Django 1.10
    Jonny Pickett
    #108

  • Support customizing delivery and sending error reports using
    requests.

    The new Delivery class is a generic way of sending a serialized payload to
    Bugsnag. The Configuration class now has a delivery property which should
    be an instance of Delivery. By default, if requests is installed, reports
    are sent via bugsnag.delivery.RequestsDelivery rather than
    bugsnag.delivery.UrllibDelivery.

    To enforce using urllib2/urllib3, use UrllibDelivery:

    from bugsnag.delivery import UrllibDelivery
    
    bugsnag.configure(delivery=UrllibDelivery())

    To use a custom Delivery:

    from bugsnag.delivery import Delivery
    
    class SomeSpecialDelivery(Delivery):
    
        def deliver(self, config, payload):
            send_to_my_queue(config.get_endpoint(), config.proxy_host, payload)
    
    bugsnag.configure(delivery=SomeSpecialDelivery())

    Graham Campbell
    Delisa Mason
    #86

  • Support multiple clients in a single environment using bugsnag.Client. A new
    client can be initialized using a Configuration or options passed to
    Client(). By default, a client is installed as the system exception hook.
    To disable this behavior, set install_sys_hook to False.

    client = Client(api_key='...')
    config = Configuration(api_key='...')
    client = Client(config)

    Kyle Fuller
    #101

  • Support running a block of code within a client's context. Any exception
    raised will be reported.

    with client.capture():
        raise Exception('an exception reported to Bugsnag then reraised')

    Specific types of exceptions can be captured by adding exceptions as a
    tuple.

    with client.capture((TypeError,)):
        raise Exception('an exception which does not get captured')

    Additional options can be passed to th resulting error report, such as
    attached metadata or severity.

    with client.capture(account_id='123', severity='info'):
        raise Exception('failed to validate record')

    Functions can be decorated to capture any exceptions thrown during execution.

    @client.capture
    def foo():
        raise Exception('an exception passed to Bugsnag then reraised')
    
    @client.capture((TypeError,))
    def bar():
        raise Exception('an exception which does not get captured')
    
    @client.capture(test_slice='B')
    def baz():
        raise Exception('an exception passed to Bugsnag then reraised')

    Kyle Fuller
    Delisa Mason
    #101

  • Support creating a log handler from a client, and forwarding logged messages
    to Bugsnag.

    client = Client(api_key='...')
    logger = logging.getLogger(__name__)
    
    logger.addHandler(client.log_handler())

    Log messages can also be customized using additional information from the
    log record and callbacks:

    client = Client(api_key='...')
    logger = logging.getLogger(__name__)
    handler = client.log_handler()
    
    def add_extra_info(record, options):
        if 'meta_data' not in options:
            options['meta_data'] = {}
    
        options['meta_data']['stats'] = {
          'account_id': record.account_id,
          'ab_test_slice': record.slice_name
        }
    
    handler.add_callback(add_extra_info)
    logger.addHandler(handler)

    BugsnagHandler argument api_key was deprecated as a part of this change.

    Delisa Mason
    #103

  • Replace existing logging with a logger. Logs from bugsnag can now be
    controlled by setting the log level of logging.getLogger('bugsnag').
    Kyle Fuller
    #95

  • Wrap non-Exception objects passed to notify() in a RuntimeError
    Delisa Mason
    #98

Bug fixes

  • Fix proxy configuration setting a global opener
    Kyle Fuller
    #97
  • Fix dropped reports during fatal errors occuring before threads join
    Delisa Mason
    #99
  • Fix missing error reports when invoking a function decorated with a Bugsnag
    client using the wrong arguments
    Delisa Mason
    #110

v3.0.0 beta 2

08 Oct 00:12

Choose a tag to compare

v3.0.0 beta 2 Pre-release
Pre-release

Enhancements

Bug fixes

  • Fix missing error reports when invoking a function decorated with a Bugsnag
    client using the wrong arguments
    Delisa Mason
    #110