honeybadger-io / honeybadger-python

Send Python and Django errors to Honeybadger.
https://www.honeybadger.io/
MIT License
15 stars 25 forks source link

Cannot pickle TextIOWrapper #172

Closed jbennett closed 2 months ago

jbennett commented 2 months ago

I inherited a Django app with very poor code quality and wanted to at least get some logging setup on it. I'm mostly a Rails developer so I'm a little out of my depths. I'm getting an error "can't pickle '_io.TextIOWrapper' object".

I did spin up the test Django app from this repo and I am getting the same error there too, even after setting up and venv for it. Trace below if that helps:


Traceback (most recent call last):
  File "/.../honeybadger-python/examples/django_app/vevn/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/.../honeybadger-python/examples/django_app/vevn/lib/python3.11/site-packages/django/core/handlers/base.py", line 199, in _get_response
    response = self.process_exception_by_middleware(e, request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/.../honeybadger-python/examples/django_app/vevn/lib/python3.11/site-packages/django/core/handlers/base.py", line 362, in process_exception_by_middleware
    response = middleware_method(request, exception)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/.../honeybadger-python/examples/django_app/vevn/lib/python3.11/site-packages/honeybadger/contrib/django.py", line 129, in process_exception
    honeybadger.notify(exception)
  File "/.../honeybadger-python/examples/django_app/vevn/lib/python3.11/site-packages/honeybadger/core.py", line 64, in notify
    return self._send_notice(exception, context=merged_context, fingerprint=fingerprint)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/.../honeybadger-python/examples/django_app/vevn/lib/python3.11/site-packages/honeybadger/core.py", line 24, in _send_notice
    payload = create_payload(exception, exc_traceback, config=self.config, context=context, fingerprint=fingerprint)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/.../honeybadger-python/examples/django_app/vevn/lib/python3.11/site-packages/honeybadger/payload.py", line 144, in create_payload
    return default_plugin_manager.generate_payload(payload, config, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/.../honeybadger-python/examples/django_app/vevn/lib/python3.11/site-packages/honeybadger/plugins.py", line 75, in generate_payload
    default_payload = plugin.generate_payload(default_payload, config, context)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/.../honeybadger-python/examples/django_app/vevn/lib/python3.11/site-packages/honeybadger/contrib/django.py", line 84, in generate_payload
    'cgi_data': filter_dict(request.META, config.params_filters),
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/.../honeybadger-python/examples/django_app/vevn/lib/python3.11/site-packages/honeybadger/utils.py", line 18, in filter_dict
    data_copy = copy.deepcopy(data)
                ^^^^^^^^^^^^^^^^^^^
  File "/.../.asdf/installs/python/3.11.5/lib/python3.11/copy.py", line 146, in deepcopy
    y = copier(x, memo)
        ^^^^^^^^^^^^^^^
  File "/.../.asdf/installs/python/3.11.5/lib/python3.11/copy.py", line 231, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
                             ^^^^^^^^^^^^^^^^^^^^^
  File "/.../.asdf/installs/python/3.11.5/lib/python3.11/copy.py", line 161, in deepcopy
    rv = reductor(4)
jbennett commented 2 months ago

Did a little more poking around and it looks like 0.19.0 does work but 0.19.1 is when the pickle issue begins.

stympy commented 2 months ago

Thanks for the report! We'll take a look.

leeatchison commented 2 months ago

I have the exact same problem and it's keeping me from getting HoneyBadger to work for Python. I tried going back to 0.19.0, but I'm getting an SSL certificate error for that version...so I'm stuck.

stympy commented 2 months ago

Version 0.20.1 of the package has been released with this fix. Thanks for reporting the problem!

dotysan commented 2 months ago

Same here. Been noticing this for a few weeks now, but thought it was a local config issue. Thx for the fix!

jbennett commented 1 month ago

Looks good for me too. Thanks so much