10c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi"""Run all test cases. 20c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi""" 30c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 40c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport sys 50c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport os 60c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport unittest 70c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitry: 80c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # For Pythons w/distutils pybsddb 90c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import bsddb3 as bsddb 100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiexcept ImportError: 110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # For Python 2.3 120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import bsddb 130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiif sys.version_info[0] >= 3 : 160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi charset = "iso8859-1" # Full 8 bit 170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class logcursor_py3k(object) : 190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, env) : 200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._logcursor = env.log_cursor() 210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __getattr__(self, v) : 230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return getattr(self._logcursor, v) 240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __next__(self) : 260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = getattr(self._logcursor, "next")() 270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if v is not None : 280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = (v[0], v[1].decode(charset)) 290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return v 300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi next = __next__ 320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def first(self) : 340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._logcursor.first() 350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if v is not None : 360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = (v[0], v[1].decode(charset)) 370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return v 380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def last(self) : 400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._logcursor.last() 410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if v is not None : 420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = (v[0], v[1].decode(charset)) 430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return v 440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def prev(self) : 460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._logcursor.prev() 470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if v is not None : 480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = (v[0], v[1].decode(charset)) 490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return v 500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def current(self) : 520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._logcursor.current() 530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if v is not None : 540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = (v[0], v[1].decode(charset)) 550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return v 560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def set(self, lsn) : 580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._logcursor.set(lsn) 590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if v is not None : 600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = (v[0], v[1].decode(charset)) 610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return v 620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class cursor_py3k(object) : 640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, db, *args, **kwargs) : 650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._dbcursor = db.cursor(*args, **kwargs) 660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __getattr__(self, v) : 680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return getattr(self._dbcursor, v) 690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def _fix(self, v) : 710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if v is None : return None 720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key, value = v 730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(key, bytes) : 740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = key.decode(charset) 750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return (key, value.decode(charset)) 760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __next__(self) : 780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = getattr(self._dbcursor, "next")() 790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._fix(v) 800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi next = __next__ 820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def previous(self) : 840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._dbcursor.previous() 850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._fix(v) 860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def last(self) : 880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._dbcursor.last() 890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._fix(v) 900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def set(self, k) : 920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(k, str) : 930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k = bytes(k, charset) 940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._dbcursor.set(k) 950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._fix(v) 960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def set_recno(self, num) : 980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._dbcursor.set_recno(num) 990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._fix(v) 1000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def set_range(self, k, dlen=-1, doff=-1) : 1020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(k, str) : 1030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k = bytes(k, charset) 1040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._dbcursor.set_range(k, dlen=dlen, doff=doff) 1050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._fix(v) 1060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def dup(self, flags=0) : 1080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi cursor = self._dbcursor.dup(flags) 1090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return dup_cursor_py3k(cursor) 1100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def next_dup(self) : 1120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._dbcursor.next_dup() 1130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._fix(v) 1140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def next_nodup(self) : 1160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._dbcursor.next_nodup() 1170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._fix(v) 1180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def put(self, key, data, flags=0, dlen=-1, doff=-1) : 1200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(key, str) : 1210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = bytes(key, charset) 1220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(data, str) : 1230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi value = bytes(data, charset) 1240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._dbcursor.put(key, data, flags=flags, dlen=dlen, 1250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi doff=doff) 1260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def current(self, flags=0, dlen=-1, doff=-1) : 1280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._dbcursor.current(flags=flags, dlen=dlen, doff=doff) 1290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._fix(v) 1300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def first(self) : 1320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._dbcursor.first() 1330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._fix(v) 1340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def pget(self, key=None, data=None, flags=0) : 1360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Incorrect because key can be a bare number, 1370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # but enough to pass testsuite 1380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(key, int) and (data is None) and (flags == 0) : 1390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi flags = key 1400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = None 1410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(key, str) : 1420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = bytes(key, charset) 1430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(data, int) and (flags==0) : 1440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi flags = data 1450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi data = None 1460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(data, str) : 1470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi data = bytes(data, charset) 1480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v=self._dbcursor.pget(key=key, data=data, flags=flags) 1490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if v is not None : 1500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v1, v2, v3 = v 1510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(v1, bytes) : 1520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v1 = v1.decode(charset) 1530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(v2, bytes) : 1540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v2 = v2.decode(charset) 1550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = (v1, v2, v3.decode(charset)) 1570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return v 1590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def join_item(self) : 1610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._dbcursor.join_item() 1620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if v is not None : 1630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = v.decode(charset) 1640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return v 1650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get(self, *args, **kwargs) : 1670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi l = len(args) 1680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if l == 2 : 1690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k, f = args 1700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(k, str) : 1710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k = bytes(k, "iso8859-1") 1720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args = (k, f) 1730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi elif l == 3 : 1740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k, d, f = args 1750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(k, str) : 1760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k = bytes(k, charset) 1770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(d, str) : 1780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi d = bytes(d, charset) 1790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args =(k, d, f) 1800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._dbcursor.get(*args, **kwargs) 1820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if v is not None : 1830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k, v = v 1840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(k, bytes) : 1850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k = k.decode(charset) 1860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = (k, v.decode(charset)) 1870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return v 1880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_both(self, key, value) : 1900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(key, str) : 1910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = bytes(key, charset) 1920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(value, str) : 1930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi value = bytes(value, charset) 1940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v=self._dbcursor.get_both(key, value) 1950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._fix(v) 1960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class dup_cursor_py3k(cursor_py3k) : 1980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, dbcursor) : 1990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._dbcursor = dbcursor 2000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class DB_py3k(object) : 2020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, *args, **kwargs) : 2030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args2=[] 2040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for i in args : 2050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(i, DBEnv_py3k) : 2060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi i = i._dbenv 2070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args2.append(i) 2080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi args = tuple(args2) 2090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for k, v in kwargs.items() : 2100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(v, DBEnv_py3k) : 2110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi kwargs[k] = v._dbenv 2120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._db = bsddb._db.DB_orig(*args, **kwargs) 2140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __contains__(self, k) : 2160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(k, str) : 2170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k = bytes(k, charset) 2180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return getattr(self._db, "has_key")(k) 2190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __getitem__(self, k) : 2210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(k, str) : 2220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k = bytes(k, charset) 2230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = self._db[k] 2240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if v is not None : 2250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = v.decode(charset) 2260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return v 2270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __setitem__(self, k, v) : 2290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(k, str) : 2300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k = bytes(k, charset) 2310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(v, str) : 2320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = bytes(v, charset) 2330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._db[k] = v 2340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __delitem__(self, k) : 2360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(k, str) : 2370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k = bytes(k, charset) 2380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del self._db[k] 2390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __getattr__(self, v) : 2410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return getattr(self._db, v) 2420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __len__(self) : 2440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return len(self._db) 2450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def has_key(self, k, txn=None) : 2470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(k, str) : 2480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k = bytes(k, charset) 2490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._db.has_key(k, txn=txn) 2500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def set_re_delim(self, c) : 2520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(c, str) : # We can use a numeric value byte too 2530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi c = bytes(c, charset) 2540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._db.set_re_delim(c) 2550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def set_re_pad(self, c) : 2570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(c, str) : # We can use a numeric value byte too 2580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi c = bytes(c, charset) 2590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._db.set_re_pad(c) 2600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_re_source(self) : 2620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi source = self._db.get_re_source() 2630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return source.decode(charset) 2640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def put(self, key, data, txn=None, flags=0, dlen=-1, doff=-1) : 2660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(key, str) : 2670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = bytes(key, charset) 2680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(data, str) : 2690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi value = bytes(data, charset) 2700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._db.put(key, data, flags=flags, txn=txn, dlen=dlen, 2710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi doff=doff) 2720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def append(self, value, txn=None) : 2740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(value, str) : 2750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi value = bytes(value, charset) 2760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._db.append(value, txn=txn) 2770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_size(self, key) : 2790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(key, str) : 2800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = bytes(key, charset) 2810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._db.get_size(key) 2820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def exists(self, key, *args, **kwargs) : 2840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(key, str) : 2850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = bytes(key, charset) 2860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._db.exists(key, *args, **kwargs) 2870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get(self, key, default="MagicCookie", txn=None, flags=0, dlen=-1, doff=-1) : 2890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(key, str) : 2900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = bytes(key, charset) 2910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if default != "MagicCookie" : # Magic for 'test_get_none.py' 2920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v=self._db.get(key, default=default, txn=txn, flags=flags, 2930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi dlen=dlen, doff=doff) 2940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else : 2950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v=self._db.get(key, txn=txn, flags=flags, 2960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi dlen=dlen, doff=doff) 2970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if (v is not None) and isinstance(v, bytes) : 2980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = v.decode(charset) 2990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return v 3000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def pget(self, key, txn=None) : 3020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(key, str) : 3030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = bytes(key, charset) 3040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v=self._db.pget(key, txn=txn) 3050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if v is not None : 3060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v1, v2 = v 3070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(v1, bytes) : 3080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v1 = v1.decode(charset) 3090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = (v1, v2.decode(charset)) 3110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return v 3120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_both(self, key, value, txn=None, flags=0) : 3140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(key, str) : 3150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = bytes(key, charset) 3160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(value, str) : 3170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi value = bytes(value, charset) 3180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v=self._db.get_both(key, value, txn=txn, flags=flags) 3190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if v is not None : 3200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi v = v.decode(charset) 3210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return v 3220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def delete(self, key, txn=None) : 3240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(key, str) : 3250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = bytes(key, charset) 3260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._db.delete(key, txn=txn) 3270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def keys(self) : 3290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k = self._db.keys() 3300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if len(k) and isinstance(k[0], bytes) : 3310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return [i.decode(charset) for i in self._db.keys()] 3320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else : 3330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return k 3340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def items(self) : 3360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi data = self._db.items() 3370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if not len(data) : return data 3380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi data2 = [] 3390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for k, v in data : 3400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(k, bytes) : 3410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi k = k.decode(charset) 3420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi data2.append((k, v.decode(charset))) 3430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return data2 3440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def associate(self, secondarydb, callback, flags=0, txn=None) : 3460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class associate_callback(object) : 3470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, callback) : 3480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._callback = callback 3490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def callback(self, key, data) : 3510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(key, str) : 3520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = key.decode(charset) 3530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi data = data.decode(charset) 3540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = self._callback(key, data) 3550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if (key != bsddb._db.DB_DONOTINDEX) : 3560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(key, str) : 3570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = bytes(key, charset) 3580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi elif isinstance(key, list) : 3590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key2 = [] 3600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for i in key : 3610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if isinstance(i, str) : 3620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi i = bytes(i, charset) 3630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key2.append(i) 3640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi key = key2 3650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return key 3660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._db.associate(secondarydb._db, 3680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi associate_callback(callback).callback, flags=flags, 3690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi txn=txn) 3700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def cursor(self, txn=None, flags=0) : 3720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return cursor_py3k(self._db, txn=txn, flags=flags) 3730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def join(self, cursor_list) : 3750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi cursor_list = [i._dbcursor for i in cursor_list] 3760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return dup_cursor_py3k(self._db.join(cursor_list)) 3770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class DBEnv_py3k(object) : 3790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, *args, **kwargs) : 3800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._dbenv = bsddb._db.DBEnv_orig(*args, **kwargs) 3810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __getattr__(self, v) : 3830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return getattr(self._dbenv, v) 3840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def log_cursor(self, flags=0) : 3860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return logcursor_py3k(self._dbenv) 3870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_lg_dir(self) : 3890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._dbenv.get_lg_dir().decode(charset) 3900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_tmp_dir(self) : 3920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._dbenv.get_tmp_dir().decode(charset) 3930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_data_dirs(self) : 3950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return tuple( 3960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi (i.decode(charset) for i in self._dbenv.get_data_dirs())) 3970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class DBSequence_py3k(object) : 3990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, db, *args, **kwargs) : 4000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._db=db 4010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self._dbsequence = bsddb._db.DBSequence_orig(db._db, *args, **kwargs) 4020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __getattr__(self, v) : 4040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return getattr(self._dbsequence, v) 4050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def open(self, key, *args, **kwargs) : 4070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._dbsequence.open(bytes(key, charset), *args, **kwargs) 4080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_key(self) : 4100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._dbsequence.get_key().decode(charset) 4110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def get_dbp(self) : 4130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return self._db 4140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import string 4160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi string.letters=[chr(i) for i in xrange(65,91)] 4170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bsddb._db.DBEnv_orig = bsddb._db.DBEnv 4190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bsddb._db.DB_orig = bsddb._db.DB 4200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if bsddb.db.version() <= (4, 3) : 4210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bsddb._db.DBSequence_orig = None 4220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else : 4230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bsddb._db.DBSequence_orig = bsddb._db.DBSequence 4240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def do_proxy_db_py3k(flag) : 4260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi flag2 = do_proxy_db_py3k.flag 4270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi do_proxy_db_py3k.flag = flag 4280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if flag : 4290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bsddb.DBEnv = bsddb.db.DBEnv = bsddb._db.DBEnv = DBEnv_py3k 4300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bsddb.DB = bsddb.db.DB = bsddb._db.DB = DB_py3k 4310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bsddb._db.DBSequence = DBSequence_py3k 4320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else : 4330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bsddb.DBEnv = bsddb.db.DBEnv = bsddb._db.DBEnv = bsddb._db.DBEnv_orig 4340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bsddb.DB = bsddb.db.DB = bsddb._db.DB = bsddb._db.DB_orig 4350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bsddb._db.DBSequence = bsddb._db.DBSequence_orig 4360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return flag2 4370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi do_proxy_db_py3k.flag = False 4390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi do_proxy_db_py3k(True) 4400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitry: 4420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # For Pythons w/distutils pybsddb 4430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi from bsddb3 import db, dbtables, dbutils, dbshelve, \ 4440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi hashopen, btopen, rnopen, dbobj 4450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiexcept ImportError: 4460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # For Python 2.3 4470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi from bsddb import db, dbtables, dbutils, dbshelve, \ 4480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi hashopen, btopen, rnopen, dbobj 4490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitry: 4510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi from bsddb3 import test_support 4520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiexcept ImportError: 4530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if sys.version_info[0] < 3 : 4540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi from test import test_support 4550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else : 4560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi from test import support as test_support 4570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitry: 4600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if sys.version_info[0] < 3 : 4610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi from threading import Thread, currentThread 4620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del Thread, currentThread 4630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else : 4640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi from threading import Thread, current_thread 4650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del Thread, current_thread 4660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi have_threads = True 4670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiexcept ImportError: 4680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi have_threads = False 4690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiverbose = 0 4710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiif 'verbose' in sys.argv: 4720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi verbose = 1 4730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi sys.argv.remove('verbose') 4740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiif 'silent' in sys.argv: # take care of old flag, just in case 4760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi verbose = 0 4770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi sys.argv.remove('silent') 4780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef print_versions(): 4810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print 4820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print '-=' * 38 4830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print db.DB_VERSION_STRING 4840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print 'bsddb.db.version(): %s' % (db.version(), ) 4850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if db.version() >= (5, 0) : 4860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print 'bsddb.db.full_version(): %s' %repr(db.full_version()) 4870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print 'bsddb.db.__version__: %s' % db.__version__ 4880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print 'bsddb.db.cvsid: %s' % db.cvsid 4890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Workaround for allowing generating an EGGs as a ZIP files. 4910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi suffix="__" 4920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print 'py module: %s' % getattr(bsddb, "__file"+suffix) 4930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print 'extension module: %s' % getattr(bsddb, "__file"+suffix) 4940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print 'python version: %s' % sys.version 4960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print 'My pid: %s' % os.getpid() 4970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print '-=' * 38 4980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef get_new_path(name) : 5010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi get_new_path.mutex.acquire() 5020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try : 5030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import os 5040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi path=os.path.join(get_new_path.prefix, 5050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi name+"_"+str(os.getpid())+"_"+str(get_new_path.num)) 5060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi get_new_path.num+=1 5070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi finally : 5080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi get_new_path.mutex.release() 5090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return path 5100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef get_new_environment_path() : 5120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi path=get_new_path("environment") 5130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import os 5140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 5150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi os.makedirs(path,mode=0700) 5160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi except os.error: 5170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_support.rmtree(path) 5180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi os.makedirs(path) 5190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return path 5200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef get_new_database_path() : 5220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi path=get_new_path("database") 5230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import os 5240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if os.path.exists(path) : 5250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi os.remove(path) 5260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return path 5270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# This path can be overriden via "set_test_path_prefix()". 5300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport os, os.path 5310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiget_new_path.prefix=os.path.join(os.environ.get("TMPDIR", 5320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi os.path.join(os.sep,"tmp")), "z-Berkeley_DB") 5330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiget_new_path.num=0 5340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef get_test_path_prefix() : 5360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return get_new_path.prefix 5370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef set_test_path_prefix(path) : 5390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi get_new_path.prefix=path 5400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef remove_test_path_directory() : 5420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_support.rmtree(get_new_path.prefix) 5430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiif have_threads : 5450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import threading 5460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi get_new_path.mutex=threading.Lock() 5470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del threading 5480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yielse : 5490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class Lock(object) : 5500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def acquire(self) : 5510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 5520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def release(self) : 5530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 5540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi get_new_path.mutex=Lock() 5550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del Lock 5560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass PrintInfoFakeTest(unittest.TestCase): 5600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def testPrintVersions(self): 5610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print_versions() 5620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# This little hack is for when this module is run as main and all the 5650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# other modules import it so they will still be able to get the right 5660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# verbose setting. It's confusing but it works. 5670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiif sys.version_info[0] < 3 : 5680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import test_all 5690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_all.verbose = verbose 5700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yielse : 5710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import sys 5720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print >>sys.stderr, "Work to do!" 5730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef suite(module_prefix='', timing_check=None): 5760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_modules = [ 5770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_associate', 5780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_basics', 5790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_dbenv', 5800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_db', 5810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_compare', 5820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_compat', 5830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_cursor_pget_bug', 5840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_dbobj', 5850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_dbshelve', 5860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_dbtables', 5870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_distributed_transactions', 5880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_early_close', 5890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_fileid', 5900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_get_none', 5910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_join', 5920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_lock', 5930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_misc', 5940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_pickle', 5950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_queue', 5960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_recno', 5970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_replication', 5980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_sequence', 5990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'test_thread', 6000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 6010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi alltests = unittest.TestSuite() 6030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for name in test_modules: 6040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi #module = __import__(name) 6050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Do it this way so that suite may be called externally via 6060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # python's Lib/test/test_bsddb3. 6070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi module = __import__(module_prefix+name, globals(), locals(), name) 6080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi alltests.addTest(module.test_suite()) 6100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if timing_check: 6110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi alltests.addTest(unittest.makeSuite(timing_check)) 6120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return alltests 6130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef test_suite(): 6160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi suite = unittest.TestSuite() 6170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi suite.addTest(unittest.makeSuite(PrintInfoFakeTest)) 6180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return suite 6190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiif __name__ == '__main__': 6220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print_versions() 6230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi unittest.main(defaultTest='suite') 624