Skip to content
This repository was archived by the owner on Jul 21, 2021. It is now read-only.

Commit 0456ab1

Browse files
committed
Report an error when registering an engine and all are traced already.
1 parent 4c9c845 commit 0456ab1

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

sqlalchemy_opentracing/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44

55
g_tracer = None
66
g_trace_all_queries = False
7+
g_trace_all_engines = False
78

89
def init_tracing(tracer, trace_all_engines=False, trace_all_queries=False):
910
'''
1011
Set our global tracer.
1112
Tracer objects from our pyramid/flask/django libraries
1213
can be passed as well.
1314
'''
14-
global g_tracer, g_trace_all_queries
15+
global g_tracer, g_trace_all_engines, g_trace_all_queries
1516

1617
if hasattr(tracer, '_tracer'):
1718
tracer = tracer._tracer
@@ -20,6 +21,7 @@ def init_tracing(tracer, trace_all_engines=False, trace_all_queries=False):
2021

2122
g_tracer = tracer
2223
g_trace_all_queries = trace_all_queries
24+
g_trace_all_engines = trace_all_engines
2325

2426
if trace_all_engines:
2527
register_engine(Engine)
@@ -83,6 +85,8 @@ def register_engine(obj):
8385
'''
8486
if g_tracer is None:
8587
raise RuntimeError('The tracer is not properly set')
88+
if g_trace_all_engines and obj != Engine:
89+
raise RuntimeError('Tracing all engines already')
8690

8791
listen(obj, 'before_cursor_execute', _engine_before_cursor_handler)
8892
listen(obj, 'after_cursor_execute', _engine_after_cursor_handler)

tests/test_api.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import unittest
22
from mock import patch
33
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
4+
from sqlalchemy.engine import Engine
45
from sqlalchemy.exc import OperationalError
56
from sqlalchemy.schema import CreateTable
67

@@ -72,3 +73,12 @@ def test_register_no_tracer(self):
7273
with self.assertRaises(RuntimeError):
7374
sqlalchemy_opentracing.register_engine(engine)
7475

76+
def test_register_dup(self):
77+
engine = create_engine('sqlite:///:memory:')
78+
sqlalchemy_opentracing.init_tracing(DummyTracer(), trace_all_engines=True)
79+
with self.assertRaises(RuntimeError):
80+
sqlalchemy_opentracing.register_engine(engine)
81+
82+
# Manually clear the Engine from listening events.
83+
sqlalchemy_opentracing.unregister_engine(Engine)
84+

0 commit comments

Comments
 (0)