Very strange issues with collections.Mapping

Jason Swails jason.swails at gmail.com
Thu Jan 18 16:37:18 EST 2018


Hello!

I am running into a very perplexing issue that is very rare, but creeps up
and is crashing my app.

The root cause of the issue comes down to the following check returning
true:

isinstance([], collections.Mapping)

Obviously you can get this behavior if you register `list` as a subclass of
the Mapping ABC, but I'm not doing that.  Because the issue is so rare (but
still common enough that I need to address it), it's hard to reproduce in a
bench test.

What I am going to try is to essentially monkey-patch
collections.Mapping.register with a method that dumps a stack trace
whenever it's called at the time of initial import so I can get an idea of
where this method could *possibly* be getting called with a list as its
argument.

The annoying thing here is that wherever the bug is happening, the crash
happens *way* far away (in a third-party library).  I've also determined it
as the root cause of two crashes that seem completely unrelated (except
that the crash is caused by a list not behaving like a dict shortly after
isinstance(obj, collections.Mapping) returns True).  These are the
libraries I'm using:

amqp
billiard
celery
dj-database-url
Django
django-redis-cache
enum34
gunicorn
kombu
newrelic
psycopg2
pyasn1
pytz
redis
requests
rsa
six
vine
voluptuous

It's a web application, as you can probably tell.  The main reason I ask
here is because I'm wondering if anybody has encountered this before and
managed to hunt down which of these libraries is doing something naughty?

Thanks!
Jason

-- 
Jason M. Swails



More information about the Python-list mailing list