Staging
v0.8.1
v0.8.1
Revision d499004860fc74cd95f40b786133229f1d0550bf authored by Guido van Rossum on 28 December 1997, 04:21:20 UTC, committed by Guido van Rossum on 28 December 1997, 04:21:20 UTC
retrieving files from the same host and directory, you had to close the previous instance before opening a new one; and retrieving a non-existent file would return an empty file. (The latter fix relies on maybe an undocumented property of NLST -- NLST of a file returns just that file, while NLST of a non-existent file returns nothing. A side effect, unfortunately, seems to be that now ftp-retrieving an *empty* directory may fail. Ah well.)
1 parent adfacf4
whichdb.py
"""Guess which db package to use to open a db file."""
import struct
def whichdb(filename):
"""Guess which db package to use to open a db file.
Return values:
- None if the database file can't be read;
- empty string if the file can be read but can't be recognized
- the module name (e.g. "dbm" or "gdbm") if recognized.
Importing the given module may still fail, and opening the
database using that module may still fail.
"""
# Check for dbm first -- this has a .pag and a .dir file
try:
f = open(filename + ".pag", "rb")
f.close()
f = open(filename + ".dir", "rb")
f.close()
return "dbm"
except IOError:
pass
# See if the file exists, return None if not
try:
f = open(filename, "rb")
except IOError:
return None
# Read the first 4 bytes of the file -- the magic number
s = f.read(4)
f.close()
# Return "" if not at least 4 bytes
if len(s) != 4:
return ""
# Convert to 4-byte int in native byte order -- return "" if impossible
try:
(magic,) = struct.unpack("=l", s)
except struct.error:
return ""
# Check for GNU dbm
if magic == 0x13579ace:
return "gdbm"
# Check for BSD hash
if magic == 0x061561:
return "dbhash"
# Unknown
return ""
Computing file changes ...