opentracing-contrib / python-dbapi

OpenTracing instrumentation for the Python DB API
Other
0 stars 4 forks source link

Crash with psycopg and cursor keyword arguments #5

Open seilting opened 4 years ago

seilting commented 4 years ago

With a psycopg2 connection using PsycopgConnectionTracing, creating a psycopg2 cursor with keyword arguments (like Django does for queryset.iterator() cursors) crashes with the following traceback:

Traceback (most recent call last):
  File "./crash", line 13, in <module>
    cur = tracing.cursor("Name", scrollable=False, withhold=True)  # crashes
  File "/Users/simoneilting/.pyenv/versions/tracing/lib/python3.8/site-packages/dbapi_opentracing/psycopg2_tracing.py", line 115, in cursor
    return PsycopgCursorTracing(conn=self, name=name, cursor_factory=cursor_factory, tracer=self._self_tracer,
  File "/Users/simoneilting/.pyenv/versions/tracing/lib/python3.8/site-packages/dbapi_opentracing/psycopg2_tracing.py", line 88, in __new__
    return _cursor_factory_classes[factory](*args, **kwargs)
  File "/Users/simoneilting/.pyenv/versions/tracing/lib/python3.8/site-packages/dbapi_opentracing/psycopg2_tracing.py", line 83, in __init__
    factory.__init__(self, conn, *a, **kw)
TypeError: function takes at most 2 arguments (3 given)

Minimal example to reproduce:

from dbapi_opentracing import PsycopgConnectionTracing
import psycopg2

tracing = psycopg2.connect(
    dbname='crashy',
    user='crashy',
    password='crashy',
    host='localhost',
    connection_factory=PsycopgConnectionTracing,
)

tracing.cursor("Name", scrollable=False)  # crashes

Full example here

antonio-antuan commented 4 years ago

fixed here