14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao"""Run all test cases. 24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao""" 34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport sys 54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport os 64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest 74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotry: 84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # For Pythons w/distutils pybsddb 94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import bsddb3 as bsddb 104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoexcept ImportError: 114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # For Python 2.3 124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import bsddb 134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif sys.version_info[0] >= 3 : 164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao charset = "iso8859-1" # Full 8 bit 174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class logcursor_py3k(object) : 194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, env) : 204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._logcursor = env.log_cursor() 214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __getattr__(self, v) : 234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return getattr(self._logcursor, v) 244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __next__(self) : 264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = getattr(self._logcursor, "next")() 274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if v is not None : 284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = (v[0], v[1].decode(charset)) 294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao next = __next__ 324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def first(self) : 344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._logcursor.first() 354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if v is not None : 364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = (v[0], v[1].decode(charset)) 374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def last(self) : 404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._logcursor.last() 414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if v is not None : 424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = (v[0], v[1].decode(charset)) 434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def prev(self) : 464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._logcursor.prev() 474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if v is not None : 484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = (v[0], v[1].decode(charset)) 494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def current(self) : 524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._logcursor.current() 534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if v is not None : 544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = (v[0], v[1].decode(charset)) 554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def set(self, lsn) : 584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._logcursor.set(lsn) 594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if v is not None : 604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = (v[0], v[1].decode(charset)) 614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class cursor_py3k(object) : 644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, db, *args, **kwargs) : 654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._dbcursor = db.cursor(*args, **kwargs) 664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __getattr__(self, v) : 684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return getattr(self._dbcursor, v) 694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def _fix(self, v) : 714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if v is None : return None 724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key, value = v 734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(key, bytes) : 744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = key.decode(charset) 754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return (key, value.decode(charset)) 764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __next__(self) : 784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = getattr(self._dbcursor, "next")() 794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._fix(v) 804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao next = __next__ 824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def previous(self) : 844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._dbcursor.previous() 854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._fix(v) 864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def last(self) : 884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._dbcursor.last() 894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._fix(v) 904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def set(self, k) : 924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(k, str) : 934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k = bytes(k, charset) 944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._dbcursor.set(k) 954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._fix(v) 964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def set_recno(self, num) : 984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._dbcursor.set_recno(num) 994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._fix(v) 1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def set_range(self, k, dlen=-1, doff=-1) : 1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(k, str) : 1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k = bytes(k, charset) 1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._dbcursor.set_range(k, dlen=dlen, doff=doff) 1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._fix(v) 1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def dup(self, flags=0) : 1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao cursor = self._dbcursor.dup(flags) 1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return dup_cursor_py3k(cursor) 1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def next_dup(self) : 1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._dbcursor.next_dup() 1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._fix(v) 1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def next_nodup(self) : 1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._dbcursor.next_nodup() 1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._fix(v) 1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def put(self, key, data, flags=0, dlen=-1, doff=-1) : 1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(key, str) : 1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = bytes(key, charset) 1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(data, str) : 1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao value = bytes(data, charset) 1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._dbcursor.put(key, data, flags=flags, dlen=dlen, 1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao doff=doff) 1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def current(self, flags=0, dlen=-1, doff=-1) : 1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._dbcursor.current(flags=flags, dlen=dlen, doff=doff) 1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._fix(v) 1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def first(self) : 1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._dbcursor.first() 1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._fix(v) 1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def pget(self, key=None, data=None, flags=0) : 1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Incorrect because key can be a bare number, 1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # but enough to pass testsuite 1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(key, int) and (data is None) and (flags == 0) : 1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao flags = key 1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = None 1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(key, str) : 1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = bytes(key, charset) 1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(data, int) and (flags==0) : 1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao flags = data 1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao data = None 1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(data, str) : 1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao data = bytes(data, charset) 1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v=self._dbcursor.pget(key=key, data=data, flags=flags) 1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if v is not None : 1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v1, v2, v3 = v 1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(v1, bytes) : 1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v1 = v1.decode(charset) 1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(v2, bytes) : 1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v2 = v2.decode(charset) 1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = (v1, v2, v3.decode(charset)) 1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def join_item(self) : 1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._dbcursor.join_item() 1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if v is not None : 1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = v.decode(charset) 1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get(self, *args, **kwargs) : 1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao l = len(args) 1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if l == 2 : 1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k, f = args 1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(k, str) : 1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k = bytes(k, "iso8859-1") 1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args = (k, f) 1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao elif l == 3 : 1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k, d, f = args 1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(k, str) : 1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k = bytes(k, charset) 1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(d, str) : 1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d = bytes(d, charset) 1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args =(k, d, f) 1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._dbcursor.get(*args, **kwargs) 1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if v is not None : 1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k, v = v 1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(k, bytes) : 1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k = k.decode(charset) 1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = (k, v.decode(charset)) 1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_both(self, key, value) : 1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(key, str) : 1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = bytes(key, charset) 1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(value, str) : 1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao value = bytes(value, charset) 1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v=self._dbcursor.get_both(key, value) 1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._fix(v) 1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class dup_cursor_py3k(cursor_py3k) : 1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, dbcursor) : 1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._dbcursor = dbcursor 2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class DB_py3k(object) : 2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, *args, **kwargs) : 2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args2=[] 2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in args : 2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(i, DBEnv_py3k) : 2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao i = i._dbenv 2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args2.append(i) 2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao args = tuple(args2) 2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for k, v in kwargs.items() : 2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(v, DBEnv_py3k) : 2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao kwargs[k] = v._dbenv 2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._db = bsddb._db.DB_orig(*args, **kwargs) 2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __contains__(self, k) : 2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(k, str) : 2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k = bytes(k, charset) 2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return getattr(self._db, "has_key")(k) 2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __getitem__(self, k) : 2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(k, str) : 2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k = bytes(k, charset) 2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = self._db[k] 2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if v is not None : 2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = v.decode(charset) 2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __setitem__(self, k, v) : 2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(k, str) : 2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k = bytes(k, charset) 2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(v, str) : 2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = bytes(v, charset) 2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._db[k] = v 2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __delitem__(self, k) : 2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(k, str) : 2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k = bytes(k, charset) 2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del self._db[k] 2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __getattr__(self, v) : 2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return getattr(self._db, v) 2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __len__(self) : 2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return len(self._db) 2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def has_key(self, k, txn=None) : 2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(k, str) : 2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k = bytes(k, charset) 2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._db.has_key(k, txn=txn) 2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def set_re_delim(self, c) : 2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(c, str) : # We can use a numeric value byte too 2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c = bytes(c, charset) 2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._db.set_re_delim(c) 2554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def set_re_pad(self, c) : 2574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(c, str) : # We can use a numeric value byte too 2584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c = bytes(c, charset) 2594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._db.set_re_pad(c) 2604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_re_source(self) : 2624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao source = self._db.get_re_source() 2634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return source.decode(charset) 2644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def put(self, key, data, txn=None, flags=0, dlen=-1, doff=-1) : 2664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(key, str) : 2674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = bytes(key, charset) 2684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(data, str) : 2694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao value = bytes(data, charset) 2704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._db.put(key, data, flags=flags, txn=txn, dlen=dlen, 2714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao doff=doff) 2724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def append(self, value, txn=None) : 2744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(value, str) : 2754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao value = bytes(value, charset) 2764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._db.append(value, txn=txn) 2774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_size(self, key) : 2794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(key, str) : 2804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = bytes(key, charset) 2814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._db.get_size(key) 2824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def exists(self, key, *args, **kwargs) : 2844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(key, str) : 2854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = bytes(key, charset) 2864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._db.exists(key, *args, **kwargs) 2874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get(self, key, default="MagicCookie", txn=None, flags=0, dlen=-1, doff=-1) : 2894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(key, str) : 2904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = bytes(key, charset) 2914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if default != "MagicCookie" : # Magic for 'test_get_none.py' 2924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v=self._db.get(key, default=default, txn=txn, flags=flags, 2934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao dlen=dlen, doff=doff) 2944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else : 2954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v=self._db.get(key, txn=txn, flags=flags, 2964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao dlen=dlen, doff=doff) 2974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if (v is not None) and isinstance(v, bytes) : 2984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = v.decode(charset) 2994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 3004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def pget(self, key, txn=None) : 3024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(key, str) : 3034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = bytes(key, charset) 3044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v=self._db.pget(key, txn=txn) 3054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if v is not None : 3064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v1, v2 = v 3074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(v1, bytes) : 3084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v1 = v1.decode(charset) 3094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = (v1, v2.decode(charset)) 3114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 3124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_both(self, key, value, txn=None, flags=0) : 3144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(key, str) : 3154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = bytes(key, charset) 3164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(value, str) : 3174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao value = bytes(value, charset) 3184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v=self._db.get_both(key, value, txn=txn, flags=flags) 3194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if v is not None : 3204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = v.decode(charset) 3214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return v 3224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def delete(self, key, txn=None) : 3244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(key, str) : 3254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = bytes(key, charset) 3264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._db.delete(key, txn=txn) 3274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def keys(self) : 3294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k = self._db.keys() 3304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if len(k) and isinstance(k[0], bytes) : 3314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return [i.decode(charset) for i in self._db.keys()] 3324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else : 3334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return k 3344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def items(self) : 3364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao data = self._db.items() 3374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if not len(data) : return data 3384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao data2 = [] 3394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for k, v in data : 3404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(k, bytes) : 3414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao k = k.decode(charset) 3424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao data2.append((k, v.decode(charset))) 3434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return data2 3444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def associate(self, secondarydb, callback, flags=0, txn=None) : 3464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class associate_callback(object) : 3474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, callback) : 3484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._callback = callback 3494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def callback(self, key, data) : 3514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(key, str) : 3524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = key.decode(charset) 3534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao data = data.decode(charset) 3544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = self._callback(key, data) 3554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if (key != bsddb._db.DB_DONOTINDEX) : 3564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(key, str) : 3574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = bytes(key, charset) 3584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao elif isinstance(key, list) : 3594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key2 = [] 3604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in key : 3614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(i, str) : 3624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao i = bytes(i, charset) 3634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key2.append(i) 3644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao key = key2 3654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return key 3664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._db.associate(secondarydb._db, 3684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao associate_callback(callback).callback, flags=flags, 3694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao txn=txn) 3704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def cursor(self, txn=None, flags=0) : 3724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return cursor_py3k(self._db, txn=txn, flags=flags) 3734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def join(self, cursor_list) : 3754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao cursor_list = [i._dbcursor for i in cursor_list] 3764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return dup_cursor_py3k(self._db.join(cursor_list)) 3774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class DBEnv_py3k(object) : 3794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, *args, **kwargs) : 3804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._dbenv = bsddb._db.DBEnv_orig(*args, **kwargs) 3814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __getattr__(self, v) : 3834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return getattr(self._dbenv, v) 3844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def log_cursor(self, flags=0) : 3864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return logcursor_py3k(self._dbenv) 3874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_lg_dir(self) : 3894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._dbenv.get_lg_dir().decode(charset) 3904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_tmp_dir(self) : 3924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._dbenv.get_tmp_dir().decode(charset) 3934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_data_dirs(self) : 3954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return tuple( 3964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (i.decode(charset) for i in self._dbenv.get_data_dirs())) 3974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class DBSequence_py3k(object) : 3994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, db, *args, **kwargs) : 4004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._db=db 4014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._dbsequence = bsddb._db.DBSequence_orig(db._db, *args, **kwargs) 4024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __getattr__(self, v) : 4044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return getattr(self._dbsequence, v) 4054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def open(self, key, *args, **kwargs) : 4074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._dbsequence.open(bytes(key, charset), *args, **kwargs) 4084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_key(self) : 4104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._dbsequence.get_key().decode(charset) 4114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def get_dbp(self) : 4134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return self._db 4144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import string 4164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao string.letters=[chr(i) for i in xrange(65,91)] 4174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bsddb._db.DBEnv_orig = bsddb._db.DBEnv 4194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bsddb._db.DB_orig = bsddb._db.DB 4204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if bsddb.db.version() <= (4, 3) : 4214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bsddb._db.DBSequence_orig = None 4224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else : 4234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bsddb._db.DBSequence_orig = bsddb._db.DBSequence 4244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def do_proxy_db_py3k(flag) : 4264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao flag2 = do_proxy_db_py3k.flag 4274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao do_proxy_db_py3k.flag = flag 4284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if flag : 4294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bsddb.DBEnv = bsddb.db.DBEnv = bsddb._db.DBEnv = DBEnv_py3k 4304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bsddb.DB = bsddb.db.DB = bsddb._db.DB = DB_py3k 4314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bsddb._db.DBSequence = DBSequence_py3k 4324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else : 4334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bsddb.DBEnv = bsddb.db.DBEnv = bsddb._db.DBEnv = bsddb._db.DBEnv_orig 4344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bsddb.DB = bsddb.db.DB = bsddb._db.DB = bsddb._db.DB_orig 4354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bsddb._db.DBSequence = bsddb._db.DBSequence_orig 4364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return flag2 4374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao do_proxy_db_py3k.flag = False 4394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao do_proxy_db_py3k(True) 4404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotry: 4424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # For Pythons w/distutils pybsddb 4434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from bsddb3 import db, dbtables, dbutils, dbshelve, \ 4444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao hashopen, btopen, rnopen, dbobj 4454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoexcept ImportError: 4464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # For Python 2.3 4474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from bsddb import db, dbtables, dbutils, dbshelve, \ 4484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao hashopen, btopen, rnopen, dbobj 4494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotry: 4514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from bsddb3 import test_support 4524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoexcept ImportError: 4534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if sys.version_info[0] < 3 : 4544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from test import test_support 4554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else : 4564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from test import support as test_support 4574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotry: 4604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if sys.version_info[0] < 3 : 4614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from threading import Thread, currentThread 4624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del Thread, currentThread 4634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else : 4644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from threading import Thread, current_thread 4654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del Thread, current_thread 4664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao have_threads = True 4674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoexcept ImportError: 4684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao have_threads = False 4694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoverbose = 0 4714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif 'verbose' in sys.argv: 4724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao verbose = 1 4734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sys.argv.remove('verbose') 4744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif 'silent' in sys.argv: # take care of old flag, just in case 4764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao verbose = 0 4774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao sys.argv.remove('silent') 4784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef print_versions(): 4814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print 4824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print '-=' * 38 4834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print db.DB_VERSION_STRING 4844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print 'bsddb.db.version(): %s' % (db.version(), ) 4854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if db.version() >= (5, 0) : 4864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print 'bsddb.db.full_version(): %s' %repr(db.full_version()) 4874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print 'bsddb.db.__version__: %s' % db.__version__ 4884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print 'bsddb.db.cvsid: %s' % db.cvsid 4894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Workaround for allowing generating an EGGs as a ZIP files. 4914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao suffix="__" 4924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print 'py module: %s' % getattr(bsddb, "__file"+suffix) 4934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print 'extension module: %s' % getattr(bsddb, "__file"+suffix) 4944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print 'python version: %s' % sys.version 4964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print 'My pid: %s' % os.getpid() 4974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print '-=' * 38 4984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef get_new_path(name) : 5014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao get_new_path.mutex.acquire() 5024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try : 5034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import os 5044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao path=os.path.join(get_new_path.prefix, 5054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao name+"_"+str(os.getpid())+"_"+str(get_new_path.num)) 5064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao get_new_path.num+=1 5074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao finally : 5084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao get_new_path.mutex.release() 5094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return path 5104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef get_new_environment_path() : 5124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao path=get_new_path("environment") 5134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import os 5144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 5154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.makedirs(path,mode=0700) 5164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except os.error: 5174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.rmtree(path) 5184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.makedirs(path) 5194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return path 5204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef get_new_database_path() : 5224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao path=get_new_path("database") 5234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import os 5244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if os.path.exists(path) : 5254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.remove(path) 5264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return path 5274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# This path can be overriden via "set_test_path_prefix()". 5304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport os, os.path 5314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoget_new_path.prefix=os.path.join(os.environ.get("TMPDIR", 5324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.path.join(os.sep,"tmp")), "z-Berkeley_DB") 5334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoget_new_path.num=0 5344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef get_test_path_prefix() : 5364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return get_new_path.prefix 5374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef set_test_path_prefix(path) : 5394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao get_new_path.prefix=path 5404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef remove_test_path_directory() : 5424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.rmtree(get_new_path.prefix) 5434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif have_threads : 5454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import threading 5464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao get_new_path.mutex=threading.Lock() 5474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del threading 5484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoelse : 5494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class Lock(object) : 5504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def acquire(self) : 5514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 5524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def release(self) : 5534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 5544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao get_new_path.mutex=Lock() 5554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del Lock 5564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass PrintInfoFakeTest(unittest.TestCase): 5604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testPrintVersions(self): 5614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print_versions() 5624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# This little hack is for when this module is run as main and all the 5654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# other modules import it so they will still be able to get the right 5664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# verbose setting. It's confusing but it works. 5674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif sys.version_info[0] < 3 : 5684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import test_all 5694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_all.verbose = verbose 5704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoelse : 5714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import sys 5724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print >>sys.stderr, "Work to do!" 5734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef suite(module_prefix='', timing_check=None): 5764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_modules = [ 5774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_associate', 5784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_basics', 5794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_dbenv', 5804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_db', 5814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_compare', 5824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_compat', 5834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_cursor_pget_bug', 5844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_dbobj', 5854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_dbshelve', 5864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_dbtables', 5874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_distributed_transactions', 5884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_early_close', 5894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_fileid', 5904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_get_none', 5914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_join', 5924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_lock', 5934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_misc', 5944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_pickle', 5954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_queue', 5964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_recno', 5974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_replication', 5984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_sequence', 5994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 'test_thread', 6004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 6014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao alltests = unittest.TestSuite() 6034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for name in test_modules: 6044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao #module = __import__(name) 6054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Do it this way so that suite may be called externally via 6064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # python's Lib/test/test_bsddb3. 6074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao module = __import__(module_prefix+name, globals(), locals(), name) 6084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao alltests.addTest(module.test_suite()) 6104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if timing_check: 6114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao alltests.addTest(unittest.makeSuite(timing_check)) 6124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return alltests 6134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_suite(): 6164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao suite = unittest.TestSuite() 6174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao suite.addTest(unittest.makeSuite(PrintInfoFakeTest)) 6184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return suite 6194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == '__main__': 6224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print_versions() 6234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao unittest.main(defaultTest='suite') 624