#32039 closed Bug (needsinfo)
psycop2.extras.register_default_jsonb() crashes with TypeError in Django 3.1.1.
| Reported by: | elliottyates | Owned by: | nobody |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 3.1 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
In a project that I recently upgraded from Django 3.1.0 to 3.1.1 I'm seeing the following traceback:
Traceback (most recent call last):
File "manage.py", line 19, in <module>
execute_from_command_line(sys.argv)
File "/opt/libs/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/opt/libs/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/opt/libs/lib/python3.8/site-packages/django/core/management/base.py", line 330, in run_from_argv
self.execute(*args, **cmd_options)
File "/opt/libs/lib/python3.8/site-packages/django/core/management/base.py", line 371, in execute
output = self.handle(*args, **options)
File "/opt/libs/lib/python3.8/site-packages/django/core/management/base.py", line 85, in wrapped
res = handle_func(*args, **kwargs)
File "/opt/libs/lib/python3.8/site-packages/django/core/management/commands/migrate.py", line 92, in handle
executor = MigrationExecutor(connection, self.migration_progress_callback)
File "/opt/libs/lib/python3.8/site-packages/django/db/migrations/executor.py", line 18, in __init__
self.loader = MigrationLoader(self.connection)
File "/opt/libs/lib/python3.8/site-packages/django/db/migrations/loader.py", line 53, in __init__
self.build_graph()
File "/opt/libs/lib/python3.8/site-packages/django/db/migrations/loader.py", line 216, in build_graph
self.applied_migrations = recorder.applied_migrations()
File "/opt/libs/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 77, in applied_migrations
if self.has_table():
File "/opt/libs/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 55, in has_table
with self.connection.cursor() as cursor:
File "/opt/libs/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/opt/libs/lib/python3.8/site-packages/django/db/backends/base/base.py", line 259, in cursor
return self._cursor()
File "/opt/libs/lib/python3.8/site-packages/django/db/backends/base/base.py", line 235, in _cursor
self.ensure_connection()
File "/opt/libs/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/opt/libs/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/opt/libs/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/opt/libs/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect
self.connection = self.get_new_connection(conn_params)
File "/opt/libs/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/opt/libs/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 206, in get_new_connection
psycopg2.extras.register_default_jsonb(conn_or_curs=connection, loads=lambda x: x)
File "/opt/libs/lib/python3.8/site-packages/psycopg2/_json.py", line 155, in register_default_jsonb
return register_json(conn_or_curs=conn_or_curs, globally=globally,
File "/opt/libs/lib/python3.8/site-packages/psycopg2/_json.py", line 125, in register_json
register_type(JSON, not globally and conn_or_curs or None)
TypeError: argument 2 must be a connection, cursor or None
Calling views results in a similar traceback on the first ORM call:
File "/opt/libs/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/opt/libs/lib/python3.8/site-packages/django/db/models/query.py", line 425, in get
num = len(clone)
File "/opt/libs/lib/python3.8/site-packages/django/db/models/query.py", line 269, in __len__
self._fetch_all()
File "/opt/libs/lib/python3.8/site-packages/django/db/models/query.py", line 1303, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "/opt/libs/lib/python3.8/site-packages/django/db/models/query.py", line 53, in __iter__
results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
File "/opt/libs/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1154, in execute_sql
cursor = self.connection.cursor()
File "/opt/libs/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/opt/libs/lib/python3.8/site-packages/django/db/backends/base/base.py", line 259, in cursor
return self._cursor()
File "/opt/libs/lib/python3.8/site-packages/django/db/backends/base/base.py", line 235, in _cursor
self.ensure_connection()
File "/opt/libs/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/opt/libs/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/opt/libs/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/opt/libs/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect
self.connection = self.get_new_connection(conn_params)
File "/opt/libs/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/opt/libs/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 206, in get_new_connection
psycopg2.extras.register_default_jsonb(conn_or_curs=connection, loads=lambda x: x)
File "/opt/libs/lib/python3.8/site-packages/psycopg2/_json.py", line 155, in register_default_jsonb
return register_json(conn_or_curs=conn_or_curs, globally=globally,
File "/opt/libs/lib/python3.8/site-packages/psycopg2/_json.py", line 125, in register_json
register_type(JSON, not globally and conn_or_curs or None)
TypeError: argument 2 must be a connection, cursor or None
This happens with psycop2 2.8.5 and 2.8.6.
Reverting to Django 3.1.0 seems to fix it.
Perhaps related to: https://github.com/django/django/pull/13358/files#diff-aef216ccdc37941bfed98ea3c80f7642L203 from https://code.djangoproject.com/ticket/31956.
Thanks! Happy to provide more info with some guidance.
Change History (5)
comment:1 by , 5 years ago
| Resolution: | → needsinfo |
|---|---|
| Status: | new → closed |
| Summary: | Django 3.1.1 psycop2.extras.register_default_jsonb in db.backends.postgresl.base failing with TypeError → psycop2.extras.register_default_jsonb() crashes with TypeError in Django 3.1.1. |
| Type: | Uncategorized → Bug |
comment:2 by , 5 years ago
Thank you @felixxm. I'm not sure I'd be able to reproduce on a trivial project either. If I see what's happening I'll include more here. Hopefully it is either something else in my project or others will be able to provide corroborating details.
(I'm not sure why, but this is being flagged as spam by the Trac platform -- I'm going to try submitting again...)
comment:4 by , 5 years ago
We're having exactly same issue in 3.1.3 while 3.1.0 works fine.
I'll try to come up with minimal sample project.
comment:5 by , 5 years ago
After long long debugging session – async debugging is hard – I've figured the main source of this issue was use of install_all_patches from opentracing_instrumentation.
Thanks for this ticket, however I cannot reproduce this issue. Can you provide a small sample project?