8
8
# For Pythons w/distutils pybsddb
15
if sys.version_info[0] >= 3 :
16
charset = "iso8859-1" # Full 8 bit
18
class cursor_py3k(object) :
19
def __init__(self, db, *args, **kwargs) :
20
self._dbcursor = db.cursor(*args, **kwargs)
22
def __getattr__(self, v) :
23
return getattr(self._dbcursor, v)
26
if v == None : return None
28
if isinstance(key, bytes) :
29
key = key.decode(charset)
30
return (key, value.decode(charset))
33
v = getattr(self._dbcursor, "next")()
39
v = self._dbcursor.previous()
43
v = self._dbcursor.last()
47
if isinstance(k, str) :
49
v = self._dbcursor.set(k)
52
def set_recno(self, num) :
53
v = self._dbcursor.set_recno(num)
56
def set_range(self, k, dlen=-1, doff=-1) :
57
if isinstance(k, str) :
59
v = self._dbcursor.set_range(k, dlen=dlen, doff=doff)
62
def dup(self, flags=0) :
63
cursor = self._dbcursor.dup(flags)
64
return dup_cursor_py3k(cursor)
67
v = self._dbcursor.next_dup()
70
def next_nodup(self) :
71
v = self._dbcursor.next_nodup()
74
def put(self, key, value, flags=0, dlen=-1, doff=-1) :
75
if isinstance(key, str) :
76
key = bytes(key, charset)
77
if isinstance(value, str) :
78
value = bytes(value, charset)
79
return self._dbcursor.put(key, value, flags=flags, dlen=dlen,
82
def current(self, flags=0, dlen=-1, doff=-1) :
83
v = self._dbcursor.current(flags=flags, dlen=dlen, doff=doff)
87
v = self._dbcursor.first()
90
def pget(self, key=None, data=None, flags=0) :
91
# Incorrect because key can be a bare number,
92
# but enough to pass testsuite
93
if isinstance(key, int) and (data==None) and (flags==0) :
96
if isinstance(key, str) :
97
key = bytes(key, charset)
98
if isinstance(data, int) and (flags==0) :
101
if isinstance(data, str) :
102
data = bytes(data, charset)
103
v=self._dbcursor.pget(key=key, data=data, flags=flags)
106
if isinstance(v1, bytes) :
107
v1 = v1.decode(charset)
108
if isinstance(v2, bytes) :
109
v2 = v2.decode(charset)
111
v = (v1, v2, v3.decode(charset))
115
def join_item(self) :
116
v = self._dbcursor.join_item()
118
v = v.decode(charset)
121
def get(self, *args, **kwargs) :
125
if isinstance(k, str) :
126
k = bytes(k, "iso8859-1")
130
if isinstance(k, str) :
131
k = bytes(k, charset)
132
if isinstance(d, str) :
133
d = bytes(d, charset)
136
v = self._dbcursor.get(*args, **kwargs)
139
if isinstance(k, bytes) :
140
k = k.decode(charset)
141
v = (k, v.decode(charset))
144
def get_both(self, key, value) :
145
if isinstance(key, str) :
146
key = bytes(key, charset)
147
if isinstance(value, str) :
148
value = bytes(value, charset)
149
v=self._dbcursor.get_both(key, value)
152
class dup_cursor_py3k(cursor_py3k) :
153
def __init__(self, dbcursor) :
154
self._dbcursor = dbcursor
156
class DB_py3k(object) :
157
def __init__(self, *args, **kwargs) :
160
if isinstance(i, DBEnv_py3k) :
164
for k, v in kwargs.items() :
165
if isinstance(v, DBEnv_py3k) :
168
self._db = bsddb._db.DB_orig(*args, **kwargs)
170
def __contains__(self, k) :
171
if isinstance(k, str) :
172
k = bytes(k, charset)
173
return getattr(self._db, "has_key")(k)
175
def __getitem__(self, k) :
176
if isinstance(k, str) :
177
k = bytes(k, charset)
180
v = v.decode(charset)
183
def __setitem__(self, k, v) :
184
if isinstance(k, str) :
185
k = bytes(k, charset)
186
if isinstance(v, str) :
187
v = bytes(v, charset)
190
def __delitem__(self, k) :
191
if isinstance(k, str) :
192
k = bytes(k, charset)
195
def __getattr__(self, v) :
196
return getattr(self._db, v)
201
def has_key(self, k, txn=None) :
202
if isinstance(k, str) :
203
k = bytes(k, charset)
204
return self._db.has_key(k, txn=txn)
206
def put(self, key, value, txn=None, flags=0, dlen=-1, doff=-1) :
207
if isinstance(key, str) :
208
key = bytes(key, charset)
209
if isinstance(value, str) :
210
value = bytes(value, charset)
211
return self._db.put(key, value, flags=flags, txn=txn, dlen=dlen,
214
def append(self, value, txn=None) :
215
if isinstance(value, str) :
216
value = bytes(value, charset)
217
return self._db.append(value, txn=txn)
219
def get_size(self, key) :
220
if isinstance(key, str) :
221
key = bytes(key, charset)
222
return self._db.get_size(key)
224
def get(self, key, default="MagicCookie", txn=None, flags=0, dlen=-1, doff=-1) :
225
if isinstance(key, str) :
226
key = bytes(key, charset)
227
if default != "MagicCookie" : # Magic for 'test_get_none.py'
228
v=self._db.get(key, default=default, txn=txn, flags=flags,
229
dlen=dlen, doff=doff)
231
v=self._db.get(key, txn=txn, flags=flags,
232
dlen=dlen, doff=doff)
233
if (v != None) and isinstance(v, bytes) :
234
v = v.decode(charset)
237
def pget(self, key, txn=None) :
238
if isinstance(key, str) :
239
key = bytes(key, charset)
240
v=self._db.pget(key, txn=txn)
243
if isinstance(v1, bytes) :
244
v1 = v1.decode(charset)
246
v = (v1, v2.decode(charset))
249
def get_both(self, key, value, txn=None, flags=0) :
250
if isinstance(key, str) :
251
key = bytes(key, charset)
252
if isinstance(value, str) :
253
value = bytes(value, charset)
254
v=self._db.get_both(key, value, txn=txn, flags=flags)
256
v = v.decode(charset)
259
def delete(self, key, txn=None) :
260
if isinstance(key, str) :
261
key = bytes(key, charset)
262
return self._db.delete(key, txn=txn)
266
if len(k) and isinstance(k[0], bytes) :
267
return [i.decode(charset) for i in self._db.keys()]
272
data = self._db.items()
273
if not len(data) : return data
276
if isinstance(k, bytes) :
277
k = k.decode(charset)
278
data2.append((k, v.decode(charset)))
281
def associate(self, secondarydb, callback, flags=0, txn=None) :
282
class associate_callback(object) :
283
def __init__(self, callback) :
284
self._callback = callback
286
def callback(self, key, data) :
287
if isinstance(key, str) :
288
key = key.decode(charset)
289
data = data.decode(charset)
290
key = self._callback(key, data)
291
if (key != bsddb._db.DB_DONOTINDEX) and isinstance(key,
293
key = bytes(key, charset)
296
return self._db.associate(secondarydb._db,
297
associate_callback(callback).callback, flags=flags, txn=txn)
299
def cursor(self, txn=None, flags=0) :
300
return cursor_py3k(self._db, txn=txn, flags=flags)
302
def join(self, cursor_list) :
303
cursor_list = [i._dbcursor for i in cursor_list]
304
return dup_cursor_py3k(self._db.join(cursor_list))
306
class DBEnv_py3k(object) :
307
def __init__(self, *args, **kwargs) :
308
self._dbenv = bsddb._db.DBEnv_orig(*args, **kwargs)
310
def __getattr__(self, v) :
311
return getattr(self._dbenv, v)
313
class DBSequence_py3k(object) :
314
def __init__(self, db, *args, **kwargs) :
316
self._dbsequence = bsddb._db.DBSequence_orig(db._db, *args, **kwargs)
318
def __getattr__(self, v) :
319
return getattr(self._dbsequence, v)
321
def open(self, key, *args, **kwargs) :
322
return self._dbsequence.open(bytes(key, charset), *args, **kwargs)
325
return self._dbsequence.get_key().decode(charset)
331
string.letters=[chr(i) for i in xrange(65,91)]
333
bsddb._db.DBEnv_orig = bsddb._db.DBEnv
334
bsddb._db.DB_orig = bsddb._db.DB
335
bsddb._db.DBSequence_orig = bsddb._db.DBSequence
337
def do_proxy_db_py3k(flag) :
338
flag2 = do_proxy_db_py3k.flag
339
do_proxy_db_py3k.flag = flag
341
bsddb.DBEnv = bsddb.db.DBEnv = bsddb._db.DBEnv = DBEnv_py3k
342
bsddb.DB = bsddb.db.DB = bsddb._db.DB = DB_py3k
343
bsddb._db.DBSequence = DBSequence_py3k
345
bsddb.DBEnv = bsddb.db.DBEnv = bsddb._db.DBEnv = bsddb._db.DBEnv_orig
346
bsddb.DB = bsddb.db.DB = bsddb._db.DB = bsddb._db.DB_orig
347
bsddb._db.DBSequence = bsddb._db.DBSequence_orig
350
do_proxy_db_py3k.flag = False
351
do_proxy_db_py3k(True)
354
# For Pythons w/distutils pybsddb
355
from bsddb3 import db, dbtables, dbutils, dbshelve, \
356
hashopen, btopen, rnopen, dbobj
359
from bsddb import db, dbtables, dbutils, dbshelve, \
360
hashopen, btopen, rnopen, dbobj
15
363
from bsddb3 import test_support
16
364
except ImportError:
17
from test import test_support
365
if sys.version_info[0] < 3 :
366
from test import test_support
368
from test import support as test_support
372
if sys.version_info[0] < 3 :
373
from threading import Thread, currentThread
374
del Thread, currentThread
376
from threading import Thread, current_thread
377
del Thread, current_thread
20
383
if 'verbose' in sys.argv: