Skip to content

Commit 4c9c845

Browse files
committed
Report an error when registering an engine without setting the tracer.
1 parent 0bf325d commit 4c9c845

4 files changed

Lines changed: 73 additions & 28 deletions

File tree

sqlalchemy_opentracing/__init__.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ def init_tracing(tracer, trace_all_engines=False, trace_all_queries=False):
1212
can be passed as well.
1313
'''
1414
global g_tracer, g_trace_all_queries
15+
1516
if hasattr(tracer, '_tracer'):
16-
g_tracer = tracer._tracer
17+
tracer = tracer._tracer
1718
else:
18-
g_tracer = tracer
19+
tracer = tracer
1920

21+
g_tracer = tracer
2022
g_trace_all_queries = trace_all_queries
2123

2224
if trace_all_engines:
@@ -79,6 +81,9 @@ def register_engine(obj):
7981
'''
8082
Register an engine to have its events be traced.
8183
'''
84+
if g_tracer is None:
85+
raise RuntimeError('The tracer is not properly set')
86+
8287
listen(obj, 'before_cursor_execute', _engine_before_cursor_handler)
8388
listen(obj, 'after_cursor_execute', _engine_after_cursor_handler)
8489
listen(obj, 'handle_error', _engine_error_handler)

tests/test_api.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ def setUp(self):
1515
Column('name', String),
1616
)
1717

18+
def tearDown(self):
19+
sqlalchemy_opentracing.g_tracer = None
20+
1821
def test_init(self):
1922
tracer = DummyTracer()
2023
sqlalchemy_opentracing.init_tracing(tracer)
@@ -64,3 +67,8 @@ def test_has_parent_none(self):
6467
self.assertEqual(False, sqlalchemy_opentracing.has_parent_span(stmt))
6568
self.assertEqual(None, sqlalchemy_opentracing.get_parent_span(stmt))
6669

70+
def test_register_no_tracer(self):
71+
engine = create_engine('sqlite:///:memory:')
72+
with self.assertRaises(RuntimeError):
73+
sqlalchemy_opentracing.register_engine(engine)
74+

tests/test_core.py

Lines changed: 43 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@ def setUp(self):
1515
Column('id', Integer, primary_key=True),
1616
Column('name', String),
1717
)
18-
sqlalchemy_opentracing.register_engine(self.engine)
18+
def tearDown(self):
19+
sqlalchemy_opentracing.g_tracer = None
1920

2021
def test_traced(self):
2122
tracer = DummyTracer()
22-
creat = CreateTable(self.users_table)
23-
2423
sqlalchemy_opentracing.init_tracing(tracer)
24+
sqlalchemy_opentracing.register_engine(self.engine)
25+
26+
creat = CreateTable(self.users_table)
2527
sqlalchemy_opentracing.set_traced(creat)
2628
self.engine.execute(creat)
2729

@@ -38,31 +40,32 @@ def test_traced(self):
3840

3941
def test_traced_none(self):
4042
tracer = DummyTracer()
41-
creat = CreateTable(self.users_table)
42-
4343
sqlalchemy_opentracing.init_tracing(tracer)
44+
sqlalchemy_opentracing.register_engine(self.engine)
45+
46+
creat = CreateTable(self.users_table)
4447
self.engine.execute(creat)
4548

4649
self.assertEqual(0, len(tracer.spans))
4750

4851
def test_traced_all_queries(self):
4952
tracer = DummyTracer()
50-
creat = CreateTable(self.users_table)
51-
5253
sqlalchemy_opentracing.init_tracing(tracer, trace_all_queries=True)
54+
sqlalchemy_opentracing.register_engine(self.engine)
55+
56+
creat = CreateTable(self.users_table)
5357
self.engine.execute(creat)
5458

5559
self.assertEqual(1, len(tracer.spans))
5660

5761
def test_traced_all_engines(self):
58-
# Create an engine that is not registered.
59-
e = create_engine('sqlite:///:memory:')
62+
# Don't register the engine explicitly.
6063
tracer = DummyTracer()
61-
creat = CreateTable(self.users_table)
62-
6364
sqlalchemy_opentracing.init_tracing(tracer, trace_all_engines=True)
65+
66+
creat = CreateTable(self.users_table)
6467
sqlalchemy_opentracing.set_traced(creat)
65-
e.execute(creat)
68+
self.engine.execute(creat)
6669

6770
# Unregister the main Engine class before doing our assertions,
6871
# in case we fail.
@@ -74,9 +77,10 @@ def test_traced_all_engines(self):
7477

7578
def test_traced_error(self):
7679
tracer = DummyTracer()
77-
creat = CreateTable(self.users_table)
78-
7980
sqlalchemy_opentracing.init_tracing(tracer)
81+
sqlalchemy_opentracing.register_engine(self.engine)
82+
83+
creat = CreateTable(self.users_table)
8084
self.engine.execute(creat)
8185
self.assertEqual(0, len(tracer.spans))
8286

@@ -100,8 +104,9 @@ def test_traced_error(self):
100104

101105
def test_trace_text(self):
102106
tracer = DummyTracer()
103-
104107
sqlalchemy_opentracing.init_tracing(tracer, trace_all_queries=True)
108+
sqlalchemy_opentracing.register_engine(self.engine)
109+
105110
self.engine.execute('CREATE TABLE users (id INTEGER NOT NULL, name VARCHAR, PRIMARY KEY (id))')
106111
self.assertEqual(1, len(tracer.spans))
107112
self.assertEqual(tracer.spans[0].operation_name, 'textclause')
@@ -115,8 +120,9 @@ def test_trace_text(self):
115120

116121
def test_trace_text_error(self):
117122
tracer = DummyTracer()
118-
119123
sqlalchemy_opentracing.init_tracing(tracer, trace_all_queries=True)
124+
sqlalchemy_opentracing.register_engine(self.engine)
125+
120126
try:
121127
self.engine.execute('SELECT name FROM users')
122128
except OperationalError:
@@ -136,11 +142,13 @@ def test_trace_text_error(self):
136142

137143
def test_traced_transaction(self):
138144
tracer = DummyTracer()
145+
sqlalchemy_opentracing.init_tracing(tracer)
146+
sqlalchemy_opentracing.register_engine(self.engine)
147+
139148
creat = CreateTable(self.users_table)
140149
ins = self.users_table.insert().values(name='John Doe')
141150
sel = select([self.users_table])
142151

143-
sqlalchemy_opentracing.init_tracing(tracer)
144152
parent_span = DummySpan('parent span')
145153
conn = self.engine.connect()
146154
with conn.begin() as trans:
@@ -157,11 +165,13 @@ def test_traced_transaction(self):
157165

158166
def test_traced_transaction_nested(self):
159167
tracer = DummyTracer()
168+
sqlalchemy_opentracing.init_tracing(tracer)
169+
sqlalchemy_opentracing.register_engine(self.engine)
170+
160171
creat = CreateTable(self.users_table)
161172
ins = self.users_table.insert().values(name='John Doe')
162173
sel = select([self.users_table])
163174

164-
sqlalchemy_opentracing.init_tracing(tracer)
165175
parent_span = DummySpan('parent span')
166176
conn = self.engine.connect()
167177

@@ -181,13 +191,15 @@ def test_traced_transaction_nested(self):
181191

182192
def test_traced_rollback(self):
183193
tracer = DummyTracer()
194+
sqlalchemy_opentracing.init_tracing(tracer)
195+
sqlalchemy_opentracing.register_engine(self.engine)
196+
184197
creat = CreateTable(self.users_table)
185198
ins = self.users_table.insert().values(name='John Doe')
186199

187200
# Don't trace this.
188201
self.engine.execute(creat)
189202

190-
sqlalchemy_opentracing.init_tracing(tracer)
191203
parent_span = DummySpan('parent span')
192204
conn = self.engine.connect()
193205
try:
@@ -208,9 +220,11 @@ def test_traced_rollback(self):
208220

209221
def test_traced_after_transaction(self):
210222
tracer = DummyTracer()
223+
sqlalchemy_opentracing.init_tracing(tracer)
224+
sqlalchemy_opentracing.register_engine(self.engine)
225+
211226
creat = CreateTable(self.users_table)
212227

213-
sqlalchemy_opentracing.init_tracing(tracer)
214228
conn = self.engine.connect()
215229
with conn.begin() as tx:
216230
sqlalchemy_opentracing.set_traced(conn)
@@ -229,10 +243,12 @@ def test_traced_after_transaction(self):
229243

230244
def test_traced_after_rollback(self):
231245
tracer = DummyTracer()
246+
sqlalchemy_opentracing.init_tracing(tracer)
247+
sqlalchemy_opentracing.register_engine(self.engine)
248+
232249
creat = CreateTable(self.users_table)
233250

234251
# Create a table, but don't trace it
235-
sqlalchemy_opentracing.init_tracing(tracer)
236252
conn = self.engine.connect()
237253
with conn.begin() as tx:
238254
conn.execute(creat)
@@ -257,11 +273,12 @@ def test_traced_after_rollback(self):
257273

258274
def test_traced_clear_connection(self):
259275
tracer = DummyTracer()
276+
sqlalchemy_opentracing.init_tracing(tracer)
277+
sqlalchemy_opentracing.register_engine(self.engine)
278+
260279
creat = CreateTable(self.users_table)
261280
ins = self.users_table.insert().values(name='John Doe')
262281

263-
sqlalchemy_opentracing.init_tracing(tracer)
264-
265282
conn = self.engine.connect()
266283
with conn.begin() as tx:
267284
sqlalchemy_opentracing.set_traced(conn)
@@ -277,9 +294,10 @@ def test_traced_clear_connection(self):
277294

278295
def test_unregister_engine(self):
279296
tracer = DummyTracer()
280-
creat = CreateTable(self.users_table)
281-
282297
sqlalchemy_opentracing.init_tracing(tracer, trace_all_queries=True)
298+
sqlalchemy_opentracing.register_engine(self.engine)
299+
300+
creat = CreateTable(self.users_table)
283301
self.engine.execute(creat)
284302
self.assertEqual(1, len(tracer.spans))
285303

tests/test_orm.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@ def setUp(self):
2121
self.session = sessionmaker(bind=self.engine)()
2222
User.metadata.create_all(self.engine)
2323

24-
sqlalchemy_opentracing.register_engine(self.engine)
24+
def tearDown(self):
25+
sqlalchemy_opentracing.g_tracer = None
2526

2627
def test_traced_simple(self):
2728
tracer = DummyTracer()
2829
sqlalchemy_opentracing.init_tracing(tracer)
30+
sqlalchemy_opentracing.register_engine(self.engine)
2931

3032
session = self.session
3133
sqlalchemy_opentracing.set_traced(session)
@@ -45,6 +47,7 @@ def test_traced_simple(self):
4547
def test_traced_none(self):
4648
tracer = DummyTracer()
4749
sqlalchemy_opentracing.init_tracing(tracer)
50+
sqlalchemy_opentracing.register_engine(self.engine)
4851

4952
session = self.session
5053
session.add(User(name='John Doe'))
@@ -57,6 +60,7 @@ def test_traced_none(self):
5760
def test_traced_all(self):
5861
tracer = DummyTracer()
5962
sqlalchemy_opentracing.init_tracing(tracer, trace_all_queries=True)
63+
sqlalchemy_opentracing.register_engine(self.engine)
6064

6165
session = self.session
6266
session.add(User(name='John Doe'))
@@ -71,6 +75,7 @@ def test_traced_all(self):
7175
def test_traced_error(self):
7276
tracer = DummyTracer()
7377
sqlalchemy_opentracing.init_tracing(tracer)
78+
sqlalchemy_opentracing.register_engine(self.engine)
7479

7580
# Don't trace this one.
7681
session = self.session
@@ -100,6 +105,7 @@ def test_traced_error(self):
100105
def test_traced_parent(self):
101106
tracer = DummyTracer()
102107
sqlalchemy_opentracing.init_tracing(tracer)
108+
sqlalchemy_opentracing.register_engine(self.engine)
103109

104110
session = self.session
105111
parent_span = DummySpan('parent')
@@ -116,6 +122,7 @@ def test_traced_parent(self):
116122
def test_traced_text(self):
117123
tracer = DummyTracer()
118124
sqlalchemy_opentracing.init_tracing(tracer)
125+
sqlalchemy_opentracing.register_engine(self.engine)
119126

120127
session = self.session
121128
span = DummySpan('parent span')
@@ -136,6 +143,7 @@ def test_traced_text(self):
136143
def test_traced_text_error(self):
137144
tracer = DummyTracer()
138145
sqlalchemy_opentracing.init_tracing(tracer)
146+
sqlalchemy_opentracing.register_engine(self.engine)
139147

140148
session = self.session
141149
span = DummySpan('parent span')
@@ -161,6 +169,7 @@ def test_traced_text_error(self):
161169
def test_traced_after_commit(self):
162170
tracer = DummyTracer()
163171
sqlalchemy_opentracing.init_tracing(tracer)
172+
sqlalchemy_opentracing.register_engine(self.engine)
164173

165174
session = self.session
166175
sqlalchemy_opentracing.set_traced(session)
@@ -181,6 +190,7 @@ def test_traced_after_commit(self):
181190
def test_traced_after_rollback(self):
182191
tracer = DummyTracer()
183192
sqlalchemy_opentracing.init_tracing(tracer)
193+
sqlalchemy_opentracing.register_engine(self.engine)
184194

185195
session = self.session
186196
sqlalchemy_opentracing.set_traced(session)
@@ -203,6 +213,7 @@ def test_traced_after_rollback(self):
203213
def test_traced_commit_repeat(self):
204214
tracer = DummyTracer()
205215
sqlalchemy_opentracing.init_tracing(tracer)
216+
sqlalchemy_opentracing.register_engine(self.engine)
206217

207218
parent_span1 = DummySpan('parent1')
208219
session = self.session
@@ -227,6 +238,7 @@ def test_traced_commit_repeat(self):
227238
def test_traced_savepoint(self):
228239
tracer = DummyTracer()
229240
sqlalchemy_opentracing.init_tracing(tracer)
241+
sqlalchemy_opentracing.register_engine(self.engine)
230242

231243
session = self.session
232244
sqlalchemy_opentracing.set_traced(session)
@@ -245,6 +257,7 @@ def test_traced_savepoint(self):
245257
def test_traced_bulk_insert(self):
246258
tracer = DummyTracer()
247259
sqlalchemy_opentracing.init_tracing(tracer)
260+
sqlalchemy_opentracing.register_engine(self.engine)
248261

249262
parent_span = DummySpan('parent')
250263
session = self.session
@@ -265,6 +278,7 @@ def test_traced_bulk_insert(self):
265278
def test_traced_clear_session(self):
266279
tracer = DummyTracer()
267280
sqlalchemy_opentracing.init_tracing(tracer)
281+
sqlalchemy_opentracing.register_engine(self.engine)
268282

269283
session = self.session
270284
sqlalchemy_opentracing.set_traced(session)

0 commit comments

Comments
 (0)