Skip to content

Commit 6fd1b4c

Browse files
committed
Raised failure exception is now always the first one of the caught exceptions. Improved timing in tests.
1 parent 8345373 commit 6fd1b4c

7 files changed

Lines changed: 59 additions & 50 deletions

File tree

DBUtils/SteadyDB.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ def _cursor(self, *args, **kwargs):
336336
if self._maxusage:
337337
if self._usage >= self._maxusage:
338338
# the connection was used too often
339-
raise self._dbapi.OperationalError
339+
raise self._failure
340340
cursor = self._con.cursor(*args, **kwargs) # try to get a cursor
341341
except self._failures, error: # error in getting cursor
342342
try: # try to reopen the connection
@@ -383,7 +383,10 @@ def __init__(self, con, *args, **kwargs):
383383
self._con = con
384384
self._args, self._kwargs = args, kwargs
385385
self._clearsizes()
386-
self._cursor = con._cursor(*args, **kwargs)
386+
try:
387+
self._cursor = con._cursor(*args, **kwargs)
388+
except AttributeError:
389+
raise TypeError("%r is not a SteadyDBConnection." % (con,))
387390
self._closed = False
388391

389392
def setinputsizes(self, sizes):
@@ -435,7 +438,7 @@ def tough_method(*args, **kwargs):
435438
if self._con._maxusage:
436439
if self._con._usage >= self._con._maxusage:
437440
# the connection was used too often
438-
raise self._con._dbapi.OperationalError
441+
raise self._con._failure
439442
if execute:
440443
self._setsizes()
441444
method = getattr(self._cursor, name)

DBUtils/Testing/TestPersistentDB.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def runQueries(i):
106106
cursor.close()
107107
r = '%d(%d): %s' % (i, db._usage, r)
108108
try:
109-
resultQueue[i].put(r, 1, 0.1)
109+
resultQueue[i].put(r, 1, 1)
110110
except TypeError:
111111
resultQueue[i].put(r, 1)
112112
db.close()
@@ -118,58 +118,58 @@ def runQueries(i):
118118
thread.start()
119119
for i in range(numThreads):
120120
try:
121-
queryQueue[i].put('ping', 1, 0.1)
121+
queryQueue[i].put('ping', 1, 1)
122122
except TypeError:
123123
queryQueue[i].put('ping', 1)
124124
for i in range(numThreads):
125125
try:
126-
r = resultQueue[i].get(1, 0.1)
126+
r = resultQueue[i].get(1, 1)
127127
except TypeError:
128128
r = resultQueue[i].get(1)
129129
self.assertEqual(r, '%d(0): ok - thread alive' % i)
130130
self.assert_(threads[i].isAlive())
131131
for i in range(numThreads):
132132
for j in range(i + 1):
133133
try:
134-
queryQueue[i].put('select test%d' % j, 1, 0.1)
135-
r = resultQueue[i].get(1, 0.1)
134+
queryQueue[i].put('select test%d' % j, 1, 1)
135+
r = resultQueue[i].get(1, 1)
136136
except TypeError:
137137
queryQueue[i].put('select test%d' % j, 1)
138138
r = resultQueue[i].get(1)
139139
self.assertEqual(r, '%d(%d): test%d' % (i, j + 1, j))
140140
try:
141-
queryQueue[1].put('select test4', 1, 0.1)
141+
queryQueue[1].put('select test4', 1, 1)
142142
except TypeError:
143143
queryQueue[1].put('select test4', 1)
144144
try:
145-
r = resultQueue[1].get(1, 0.1)
145+
r = resultQueue[1].get(1, 1)
146146
except TypeError:
147147
r = resultQueue[1].get(1)
148148
self.assertEqual(r, '1(3): test4')
149149
try:
150-
queryQueue[1].put('close', 1, 0.1)
151-
r = resultQueue[1].get(1, 0.1)
150+
queryQueue[1].put('close', 1, 1)
151+
r = resultQueue[1].get(1, 1)
152152
except TypeError:
153153
queryQueue[1].put('close', 1)
154154
r = resultQueue[1].get(1)
155155
self.assertEqual(r, '1(3): ok - connection closed')
156156
for j in range(2):
157157
try:
158-
queryQueue[1].put('select test%d' % j, 1, 0.1)
159-
r = resultQueue[1].get(1, 0.1)
158+
queryQueue[1].put('select test%d' % j, 1, 1)
159+
r = resultQueue[1].get(1, 1)
160160
except TypeError:
161161
queryQueue[1].put('select test%d' % j, 1)
162162
r = resultQueue[1].get(1)
163163
self.assertEqual(r, '1(%d): test%d' % (j + 1, j))
164164
for i in range(numThreads):
165165
self.assert_(threads[i].isAlive())
166166
try:
167-
queryQueue[i].put('ping', 1, 0.1)
167+
queryQueue[i].put('ping', 1, 1)
168168
except TypeError:
169169
queryQueue[i].put('ping', 1)
170170
for i in range(numThreads):
171171
try:
172-
r = resultQueue[i].get(1, 0.1)
172+
r = resultQueue[i].get(1, 1)
173173
except TypeError:
174174
r = resultQueue[i].get(1)
175175
self.assertEqual(r, '%d(%d): ok - thread alive' % (i, i + 1))

DBUtils/Testing/TestPersistentPg.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def runQueries(i):
8383
r = db.query(q)
8484
r = '%d(%d): %s' % (i, db._usage, r)
8585
try:
86-
resultQueue[i].put(r, 1, 0.1)
86+
resultQueue[i].put(r, 1, 1)
8787
except TypeError:
8888
resultQueue[i].put(r, 1)
8989
db.close()
@@ -95,56 +95,56 @@ def runQueries(i):
9595
thread.start()
9696
for i in range(numThreads):
9797
try:
98-
queryQueue[i].put('ping', 1, 0.1)
98+
queryQueue[i].put('ping', 1, 1)
9999
except TypeError:
100100
queryQueue[i].put('ping', 1)
101101
for i in range(numThreads):
102102
try:
103-
r = resultQueue[i].get(1, 0.1)
103+
r = resultQueue[i].get(1, 1)
104104
except TypeError:
105105
r = resultQueue[i].get(1)
106106
self.assertEqual(r, '%d(0): ok - thread alive' % i)
107107
self.assert_(threads[i].isAlive())
108108
for i in range(numThreads):
109109
for j in range(i + 1):
110110
try:
111-
queryQueue[i].put('select test%d' % j, 1, 0.1)
112-
r = resultQueue[i].get(1, 0.1)
111+
queryQueue[i].put('select test%d' % j, 1, 1)
112+
r = resultQueue[i].get(1, 1)
113113
except TypeError:
114114
queryQueue[i].put('select test%d' % j, 1)
115115
r = resultQueue[i].get(1)
116116
self.assertEqual(r, '%d(%d): test%d' % (i, j + 1, j))
117117
try:
118-
queryQueue[1].put('select test4', 1, 0.1)
119-
r = resultQueue[1].get(1, 0.1)
118+
queryQueue[1].put('select test4', 1, 1)
119+
r = resultQueue[1].get(1, 1)
120120
except TypeError:
121121
queryQueue[1].put('select test4', 1)
122122
r = resultQueue[1].get(1)
123123
self.assertEqual(r, '1(3): test4')
124124
try:
125-
queryQueue[1].put('close', 1, 0.1)
126-
r = resultQueue[1].get(1, 0.1)
125+
queryQueue[1].put('close', 1, 1)
126+
r = resultQueue[1].get(1, 1)
127127
except TypeError:
128128
queryQueue[1].put('close', 1)
129129
r = resultQueue[1].get(1)
130130
self.assertEqual(r, '1(3): ok - connection closed')
131131
for j in range(2):
132132
try:
133-
queryQueue[1].put('select test%d' % j, 1, 0.1)
134-
r = resultQueue[1].get(1, 0.1)
133+
queryQueue[1].put('select test%d' % j, 1, 1)
134+
r = resultQueue[1].get(1, 1)
135135
except TypeError:
136136
queryQueue[1].put('select test%d' % j, 1)
137137
r = resultQueue[1].get(1)
138138
self.assertEqual(r, '1(%d): test%d' % (j + 1, j))
139139
for i in range(numThreads):
140140
self.assert_(threads[i].isAlive())
141141
try:
142-
queryQueue[i].put('ping', 1, 0.1)
142+
queryQueue[i].put('ping', 1, 1)
143143
except TypeError:
144144
queryQueue[i].put('ping', 1)
145145
for i in range(numThreads):
146146
try:
147-
r = resultQueue[i].get(1, 0.1)
147+
r = resultQueue[i].get(1, 1)
148148
except TypeError:
149149
r = resultQueue[i].get(1)
150150
self.assertEqual(r, '%d(%d): ok - thread alive' % (i, i + 1))

DBUtils/Testing/TestPooledDB.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -798,22 +798,24 @@ def test12_MaxConnections(self):
798798
self.assertEqual(len(pool._idle_cache), 0)
799799
def connection():
800800
db = pool.connection()
801-
cursor=db.cursor()
801+
cursor = db.cursor()
802802
cursor.execute('set thread')
803803
cursor.close()
804804
db.close()
805805
from threading import Thread
806-
Thread(target=connection).start()
807-
from time import sleep
808-
sleep(0.1)
806+
thread = Thread(target=connection)
807+
thread.start()
808+
thread.join(0.1)
809+
self.assert_(thread.isAlive())
809810
self.assertEqual(pool._connections, 1)
810811
self.assertEqual(len(pool._idle_cache), 0)
811812
if shareable:
812813
self.assertEqual(len(pool._shared_cache), 0)
813814
session = db._con._con.session
814815
self.assertEqual(session, ['rollback'])
815816
del db
816-
sleep(0.1)
817+
thread.join(0.1)
818+
self.assert_(not thread.isAlive())
817819
self.assertEqual(pool._connections, 0)
818820
self.assertEqual(len(pool._idle_cache), 1)
819821
if shareable:
@@ -952,15 +954,15 @@ def test16_ThreeThreadsTwoConnections(self):
952954
queue = Queue(3)
953955
def connection():
954956
try:
955-
queue.put(pool.connection(), 1, 0.1)
957+
queue.put(pool.connection(), 1, 1)
956958
except Exception:
957959
queue.put(pool.connection(), 1)
958960
from threading import Thread
959961
for i in range(3):
960962
Thread(target=connection).start()
961963
try:
962-
db1 = queue.get(1, 0.1)
963-
db2 = queue.get(1, 0.1)
964+
db1 = queue.get(1, 1)
965+
db2 = queue.get(1, 1)
964966
except TypeError:
965967
db1 = queue.get(1)
966968
db2 = queue.get(1)
@@ -974,7 +976,7 @@ def connection():
974976
self.assertRaises(Empty, queue.get, 0)
975977
del db1
976978
try:
977-
db1 = queue.get(1, 0.1)
979+
db1 = queue.get(1, 1)
978980
except TypeError:
979981
db1 = queue.get(1)
980982
self.assertNotEqual(db1, db2)
@@ -994,7 +996,7 @@ def connection():
994996
self.assertRaises(Empty, queue.get, 0)
995997
del db1
996998
try:
997-
db1 = queue.get(1, 0.1)
999+
db1 = queue.get(1, 1)
9981000
except TypeError:
9991001
db1 = queue.get(1)
10001002
self.assertNotEqual(db1, db2)

DBUtils/Testing/TestPooledPg.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -198,14 +198,16 @@ def test4_MaxConnections(self):
198198
def connection():
199199
pool.connection().query('set thread')
200200
from threading import Thread
201-
Thread(target=connection).start()
202-
from time import sleep
203-
sleep(0.1)
201+
thread = Thread(target=connection)
202+
thread.start()
203+
thread.join(0.1)
204+
self.assert_(thread.isAlive())
204205
self.assertEqual(pool._cache.qsize(), 0)
205206
session = db._con.session
206207
self.assertEqual(session, [])
207208
del db
208-
sleep(0.1)
209+
thread.join(0.1)
210+
self.assert_(not thread.isAlive())
209211
self.assertEqual(pool._cache.qsize(), 1)
210212
db = pool.connection()
211213
self.assertEqual(pool._cache.qsize(), 0)
@@ -240,15 +242,15 @@ def test6_ThreeThreadsTwoConnections(self):
240242
queue = Queue(3)
241243
def connection():
242244
try:
243-
queue.put(pool.connection(), 1, 0.1)
245+
queue.put(pool.connection(), 1, 1)
244246
except TypeError:
245247
queue.put(pool.connection(), 1)
246248
from threading import Thread
247249
for i in range(3):
248250
Thread(target=connection).start()
249251
try:
250-
db1 = queue.get(1, 0.1)
251-
db2 = queue.get(1, 0.1)
252+
db1 = queue.get(1, 1)
253+
db2 = queue.get(1, 1)
252254
except TypeError:
253255
db1 = queue.get(1)
254256
db2 = queue.get(1)
@@ -262,7 +264,7 @@ def connection():
262264
self.assertRaises(Empty, queue.get, 0)
263265
del db1
264266
try:
265-
db1 = queue.get(1, 0.1)
267+
db1 = queue.get(1, 1)
266268
except TypeError:
267269
db1 = queue.get(1)
268270
self.assertNotEqual(db1, db2)

DBUtils/Testing/TestSteadyDB.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ def __del__(self):
120120

121121
sys.path.insert(1, '../..')
122122
from DBUtils.SteadyDB import connect as SteadyDBconnect
123-
from DBUtils.SteadyDB import SteadyDBConnection
123+
from DBUtils.SteadyDB import SteadyDBConnection, SteadyDBCursor
124124

125125

126126
class TestSteadyDB(unittest.TestCase):
@@ -192,6 +192,8 @@ def test1_MockedDBConnection(self):
192192
self.assertRaises(InternalError, db.cursor)
193193

194194
def test2_BrokenDBConnection(self):
195+
self.assertRaises(TypeError, SteadyDBConnection, None)
196+
self.assertRaises(TypeError, SteadyDBCursor, None)
195197
db = SteadyDBconnect(dbapi, database='ok')
196198
for i in range(3):
197199
db.close()

DBUtils/Testing/TestSteadyPg.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,13 +181,13 @@ def test1_MockedPgConnection(self):
181181
self.assertRaises(InternalError, db.get_tables)
182182

183183
def test2_BrokenPgConnection(self):
184+
self.assertRaises(TypeError, SteadyPgConnection, 'wrong')
184185
db = SteadyPgConnection(dbname='ok')
185186
InternalError = sys.modules[db._con.__module__].InternalError
186187
for i in range(3):
187188
db.close()
188189
del db
189-
self.assertRaises(InternalError, SteadyPgConnection,
190-
dbname='error')
190+
self.assertRaises(InternalError, SteadyPgConnection, dbname='error')
191191

192192
def test3_SteadyPgClose(self):
193193
for closeable in (False, True):

0 commit comments

Comments
 (0)