[pypy-svn] r56605 - in pypy/dist/pypy: lang/smalltalk lang/smalltalk/test lang/smalltalk/tool lib lib/xml lib/xml/dom lib/xml/etree lib/xml/parsers lib/xml/sax rlib/rsdl translator/goal translator/oosupport/test_template
arigo at codespeak.net
arigo at codespeak.net
Wed Jul 16 23:43:49 CEST 2008
Author: arigo
Date: Wed Jul 16 23:43:48 2008
New Revision: 56605
Modified:
pypy/dist/pypy/lang/smalltalk/test/test_wrapper.py (props changed)
pypy/dist/pypy/lang/smalltalk/todo.txt (props changed)
pypy/dist/pypy/lang/smalltalk/tool/infostats.py (props changed)
pypy/dist/pypy/lang/smalltalk/wrapper.py (props changed)
pypy/dist/pypy/lib/_hashlib.py (props changed)
pypy/dist/pypy/lib/dbm.py (contents, props changed)
pypy/dist/pypy/lib/functools.py (props changed)
pypy/dist/pypy/lib/xml/ (props changed)
pypy/dist/pypy/lib/xml/dom/ (props changed)
pypy/dist/pypy/lib/xml/etree/ (props changed)
pypy/dist/pypy/lib/xml/parsers/ (props changed)
pypy/dist/pypy/lib/xml/sax/ (props changed)
pypy/dist/pypy/rlib/rsdl/eci.py (props changed)
pypy/dist/pypy/translator/goal/targetgbimplementation.py (props changed)
pypy/dist/pypy/translator/goal/targetgbrom4.py (props changed)
pypy/dist/pypy/translator/goal/targetimageloadingsmalltalk.py (props changed)
pypy/dist/pypy/translator/goal/targetsimpleread.py (props changed)
pypy/dist/pypy/translator/goal/targetsimplevideo.py (props changed)
pypy/dist/pypy/translator/goal/targetsimplewrite.py (props changed)
pypy/dist/pypy/translator/oosupport/test_template/exception.py (props changed)
Log:
fixeol
Modified: pypy/dist/pypy/lib/dbm.py
==============================================================================
--- pypy/dist/pypy/lib/dbm.py (original)
+++ pypy/dist/pypy/lib/dbm.py Wed Jul 16 23:43:48 2008
@@ -1,195 +1,195 @@
-from ctypes import *
-import ctypes.util
-import os
-
-_singleton = 'one'
-
-class error(Exception):
- def __init__(self, msg):
- self.msg = msg
-
- def __str__(self):
- return self.msg
-
-class datum(Structure):
- _fields_ = [
- ('dptr', c_char_p),
- ('dsize', c_int),
- ]
-
-class dbm(object):
- def __init__(self, dbmobj):
- self._aobj = dbmobj
-
- def close(self):
- getattr(lib, funcs['close'])(self._aobj)
- self._aobj = None
-
- def keys(self):
- if not self._aobj:
- raise error('DBM object has already been closed')
- allkeys = []
- k = getattr(lib, funcs['firstkey'])(self._aobj)
- while k.dptr:
- allkeys.append(k.dptr[:k.dsize])
- k = getattr(lib, funcs['nextkey'])(self._aobj)
- return allkeys
-
- def get(self, key, default=_singleton):
- if not self._aobj:
- raise error('DBM object has already been closed')
- dat = datum()
- dat.dptr = c_char_p(key)
- dat.dsize = c_int(len(key))
- k = getattr(lib, funcs['fetch'])(self._aobj, dat)
- if k.dptr:
- return k.dptr[:k.dsize]
- if default is _singleton:
- raise KeyError
- if getattr(lib, funcs['error'])(self._aobj):
- getattr(lib, funcs['clearerr'])(self._aobj)
- raise error("")
- return default
-
- def __len__(self):
- return len(self.keys())
-
- def __getitem__(self, key):
- assert isinstance(key, str)
- value = self.get(key)
- if value is None:
- raise KeyError
-
- def _set(self, key, value):
- if not self._aobj:
- raise error('DBM object has already been closed')
- if not isinstance(key, str):
- raise TypeError("dbm mappings have string indices only")
- dat = datum()
- dat.dptr = c_char_p(key)
- dat.dsize = c_int(len(key))
- if value == None:
- status = getattr(lib, funcs['delete'])(self._aobj, dat)
- if status < 0:
- getattr(lib, funcs['clearerr'])(self._aobj)
- raise KeyError(key)
- else:
- if not isinstance(value, str):
- raise TypeError("dbm mappings have string indices only")
- data = datum()
- data.dptr = c_char_p(value)
- data.dsize = c_int(len(value))
- status = getattr(lib, funcs['store'])(self._aobj, dat, data, lib.DBM_INSERT)
- if status == 1:
- status = getattr(lib, funcs['store'])(self._aobj, dat, data, lib.DBM_REPLACE)
- if getattr(lib, funcs['error'])(self._aobj):
- getattr(lib, funcs['clearerr'])(self._aobj)
- raise error("")
- return status
-
- def setdefault(self, key, default=None):
- if not self._aobj:
- raise error('DBM object has already been closed')
- dat = datum()
- dat.dptr = c_char_p(key)
- dat.dsize = c_int(len(key))
- k = getattr(lib, funcs['fetch'])(self._aobj, dat)
- if k.dptr:
- return k.dptr[:k.dsize]
- if default:
- data = datum()
- data.dptr = c_char_p(default)
- data.dsize = c_int(len(default))
- status = getattr(lib, funcs['store'])(self._aobj, dat, data, lib.DBM_INSERT)
- if status < 0:
- getattr(lib, funcs['clearerr'])(self._aobj)
- raise error("cannot add item to database")
- return default
- return None
-
- def has_key(self, key):
- if not self._aobj:
- raise error('DBM object has already been closed')
- dat = datum()
- dat.dptr = c_char_p(key)
- dat.dsize = c_int(len(key))
- k = getattr(lib, funcs['fetch'])(self._aobj, dat)
- if k.dptr:
- return True
- return False
-
- def __setitem__(self, key, value):
- if not isinstance(key, str) and isinstance(value, str):
- raise error("dbm mappings have string indices only")
- self._set(key, value)
-
-# initialization for Berkeley DB
-_bdb_funcs = {
- 'open': '__db_ndbm_open',
- 'close': '__db_ndbm_close',
- 'firstkey': '__db_ndbm_firstkey',
- 'nextkey': '__db_ndbm_nextkey',
- 'fetch': '__db_ndbm_fetch',
- 'store': '__db_ndbm_store',
- 'error': '__db_ndbm_error',
- 'delete': '__db_ndbm_delete',
-}
-
-_normal_funcs = {
- 'open': 'dbm_open',
- 'close': 'dbm_close',
- 'firstkey': 'dbm_firstkey',
- 'nextkey': 'dbm_nextkey',
- 'fetch': 'dbm_fetch',
- 'store': 'dbm_store',
- 'error': 'dbm_error',
- 'delete': 'dbm_delete',
-}
-
-try:
- libpath = ctypes.util.find_library('db')
- if not libpath: raise
- lib = CDLL(libpath) # Linux
- _platform = 'bdb'
- lib.__db_ndbm_open.argtypes = [c_char_p, c_int, c_int]
- lib.__db_ndbm_close.restype = c_void_p
- lib.__db_ndbm_firstkey.restype = datum
- lib.__db_ndbm_nextkey.restype = datum
- lib.__db_ndbm_fetch.restype = datum
- lib.__db_ndbm_store.restype = c_int
- funcs = _bdb_funcs
-except:
- lib = CDLL("/usr/lib/libdbm.dylib") # OS X
- _platform = 'osx'
- lib.dbm_open.argtypes = [c_char_p, c_int, c_int]
- lib.dbm_close.restype = c_void_p
- lib.dbm_firstkey.restype = datum
- lib.dbm_nextkey.restype = datum
- lib.dbm_fetch.restype = datum
- lib.dbm_store.restype = c_int
- funcs = _normal_funcs
-
-
-
-lib.DBM_INSERT = 0
-lib.DBM_REPLACE = 1
-
-def open(filename, flag='r', mode=0666):
- "open a DBM database"
- openflag = 0
-
- try:
- openflag = {
- 'r': os.O_RDONLY,
- 'rw': os.O_RDWR,
- 'w': os.O_RDWR | os.O_CREAT,
- 'c': os.O_RDWR | os.O_CREAT,
- 'n': os.O_RDWR | os.O_CREAT | os.O_TRUNC,
- }[flag]
- except KeyError, e:
- raise error("arg 2 to open should be 'r', 'w', 'c', or 'n'")
-
- a_db = getattr(lib, funcs['open'])(filename, openflag, mode)
- if a_db == 0:
- raise error("Could not open file %s.db" % filename)
- return dbm(a_db)
+from ctypes import *
+import ctypes.util
+import os
+
+_singleton = 'one'
+
+class error(Exception):
+ def __init__(self, msg):
+ self.msg = msg
+
+ def __str__(self):
+ return self.msg
+
+class datum(Structure):
+ _fields_ = [
+ ('dptr', c_char_p),
+ ('dsize', c_int),
+ ]
+
+class dbm(object):
+ def __init__(self, dbmobj):
+ self._aobj = dbmobj
+
+ def close(self):
+ getattr(lib, funcs['close'])(self._aobj)
+ self._aobj = None
+
+ def keys(self):
+ if not self._aobj:
+ raise error('DBM object has already been closed')
+ allkeys = []
+ k = getattr(lib, funcs['firstkey'])(self._aobj)
+ while k.dptr:
+ allkeys.append(k.dptr[:k.dsize])
+ k = getattr(lib, funcs['nextkey'])(self._aobj)
+ return allkeys
+
+ def get(self, key, default=_singleton):
+ if not self._aobj:
+ raise error('DBM object has already been closed')
+ dat = datum()
+ dat.dptr = c_char_p(key)
+ dat.dsize = c_int(len(key))
+ k = getattr(lib, funcs['fetch'])(self._aobj, dat)
+ if k.dptr:
+ return k.dptr[:k.dsize]
+ if default is _singleton:
+ raise KeyError
+ if getattr(lib, funcs['error'])(self._aobj):
+ getattr(lib, funcs['clearerr'])(self._aobj)
+ raise error("")
+ return default
+
+ def __len__(self):
+ return len(self.keys())
+
+ def __getitem__(self, key):
+ assert isinstance(key, str)
+ value = self.get(key)
+ if value is None:
+ raise KeyError
+
+ def _set(self, key, value):
+ if not self._aobj:
+ raise error('DBM object has already been closed')
+ if not isinstance(key, str):
+ raise TypeError("dbm mappings have string indices only")
+ dat = datum()
+ dat.dptr = c_char_p(key)
+ dat.dsize = c_int(len(key))
+ if value == None:
+ status = getattr(lib, funcs['delete'])(self._aobj, dat)
+ if status < 0:
+ getattr(lib, funcs['clearerr'])(self._aobj)
+ raise KeyError(key)
+ else:
+ if not isinstance(value, str):
+ raise TypeError("dbm mappings have string indices only")
+ data = datum()
+ data.dptr = c_char_p(value)
+ data.dsize = c_int(len(value))
+ status = getattr(lib, funcs['store'])(self._aobj, dat, data, lib.DBM_INSERT)
+ if status == 1:
+ status = getattr(lib, funcs['store'])(self._aobj, dat, data, lib.DBM_REPLACE)
+ if getattr(lib, funcs['error'])(self._aobj):
+ getattr(lib, funcs['clearerr'])(self._aobj)
+ raise error("")
+ return status
+
+ def setdefault(self, key, default=None):
+ if not self._aobj:
+ raise error('DBM object has already been closed')
+ dat = datum()
+ dat.dptr = c_char_p(key)
+ dat.dsize = c_int(len(key))
+ k = getattr(lib, funcs['fetch'])(self._aobj, dat)
+ if k.dptr:
+ return k.dptr[:k.dsize]
+ if default:
+ data = datum()
+ data.dptr = c_char_p(default)
+ data.dsize = c_int(len(default))
+ status = getattr(lib, funcs['store'])(self._aobj, dat, data, lib.DBM_INSERT)
+ if status < 0:
+ getattr(lib, funcs['clearerr'])(self._aobj)
+ raise error("cannot add item to database")
+ return default
+ return None
+
+ def has_key(self, key):
+ if not self._aobj:
+ raise error('DBM object has already been closed')
+ dat = datum()
+ dat.dptr = c_char_p(key)
+ dat.dsize = c_int(len(key))
+ k = getattr(lib, funcs['fetch'])(self._aobj, dat)
+ if k.dptr:
+ return True
+ return False
+
+ def __setitem__(self, key, value):
+ if not isinstance(key, str) and isinstance(value, str):
+ raise error("dbm mappings have string indices only")
+ self._set(key, value)
+
+# initialization for Berkeley DB
+_bdb_funcs = {
+ 'open': '__db_ndbm_open',
+ 'close': '__db_ndbm_close',
+ 'firstkey': '__db_ndbm_firstkey',
+ 'nextkey': '__db_ndbm_nextkey',
+ 'fetch': '__db_ndbm_fetch',
+ 'store': '__db_ndbm_store',
+ 'error': '__db_ndbm_error',
+ 'delete': '__db_ndbm_delete',
+}
+
+_normal_funcs = {
+ 'open': 'dbm_open',
+ 'close': 'dbm_close',
+ 'firstkey': 'dbm_firstkey',
+ 'nextkey': 'dbm_nextkey',
+ 'fetch': 'dbm_fetch',
+ 'store': 'dbm_store',
+ 'error': 'dbm_error',
+ 'delete': 'dbm_delete',
+}
+
+try:
+ libpath = ctypes.util.find_library('db')
+ if not libpath: raise
+ lib = CDLL(libpath) # Linux
+ _platform = 'bdb'
+ lib.__db_ndbm_open.argtypes = [c_char_p, c_int, c_int]
+ lib.__db_ndbm_close.restype = c_void_p
+ lib.__db_ndbm_firstkey.restype = datum
+ lib.__db_ndbm_nextkey.restype = datum
+ lib.__db_ndbm_fetch.restype = datum
+ lib.__db_ndbm_store.restype = c_int
+ funcs = _bdb_funcs
+except:
+ lib = CDLL("/usr/lib/libdbm.dylib") # OS X
+ _platform = 'osx'
+ lib.dbm_open.argtypes = [c_char_p, c_int, c_int]
+ lib.dbm_close.restype = c_void_p
+ lib.dbm_firstkey.restype = datum
+ lib.dbm_nextkey.restype = datum
+ lib.dbm_fetch.restype = datum
+ lib.dbm_store.restype = c_int
+ funcs = _normal_funcs
+
+
+
+lib.DBM_INSERT = 0
+lib.DBM_REPLACE = 1
+
+def open(filename, flag='r', mode=0666):
+ "open a DBM database"
+ openflag = 0
+
+ try:
+ openflag = {
+ 'r': os.O_RDONLY,
+ 'rw': os.O_RDWR,
+ 'w': os.O_RDWR | os.O_CREAT,
+ 'c': os.O_RDWR | os.O_CREAT,
+ 'n': os.O_RDWR | os.O_CREAT | os.O_TRUNC,
+ }[flag]
+ except KeyError, e:
+ raise error("arg 2 to open should be 'r', 'w', 'c', or 'n'")
+
+ a_db = getattr(lib, funcs['open'])(filename, openflag, mode)
+ if a_db == 0:
+ raise error("Could not open file %s.db" % filename)
+ return dbm(a_db)
More information about the Pypy-commit
mailing list