#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 , 4 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 , 4 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 , 4 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 , 4 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?