def close(self): if self._closed: return self._closed = True if self._db is not None: lib.sp_destroy(self._db) if self._env is not None: lib.sp_destroy(self._env)
def __init__(self, path, flags): if self._env is not None or self._db is not None: raise RuntimeError("object was already initialized") # initialize environment env = lib.sp_env() if env == ffi.NULL: raise MemoryError("could not allocate environment") # set db directory and flags _flags = ffi.cast("int", flags) _path = ffi.new("char[]", path) r = lib.sp_ctl(env, lib.SPDIR, _flags, _path) if r != 0: error = lib.sp_error(env) lib.sp_destroy(env) raise SophiaError(ffi.string(error)) # open db db = lib.sp_open(env) if db == ffi.NULL: error = lib.sp_error(env) lib.sp_destroy(env) raise SophiaError(ffi.string(error)) self._env = env self._db = db