annotate Lib/whichdb.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents b378753825a0
children fb4b4d069cc7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3825
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 """Guess which db package to use to open a db file."""
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 import struct
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 def whichdb(filename):
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 """Guess which db package to use to open a db file.
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 Return values:
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 - None if the database file can't be read;
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 - empty string if the file can be read but can't be recognized
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 - the module name (e.g. "dbm" or "gdbm") if recognized.
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
13
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 Importing the given module may still fail, and opening the
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 database using that module may still fail.
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 """
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
17
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 # Check for dbm first -- this has a .pag and a .dir file
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 try:
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 f = open(filename + ".pag", "rb")
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 f.close()
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 f = open(filename + ".dir", "rb")
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 f.close()
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 return "dbm"
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 except IOError:
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 pass
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
27
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 # See if the file exists, return None if not
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 try:
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 f = open(filename, "rb")
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 except IOError:
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 return None
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 # Read the first 4 bytes of the file -- the magic number
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 s = f.read(4)
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 f.close()
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
37
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 # Return "" if not at least 4 bytes
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 if len(s) != 4:
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 return ""
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
41
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 # Convert to 4-byte int in native byte order -- return "" if impossible
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 try:
4932
b378753825a0 Use new struct which supports standardized sizes
Guido van Rossum <guido@python.org>
parents: 3825
diff changeset
44 (magic,) = struct.unpack("=l", s)
3825
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 except struct.error:
4932
b378753825a0 Use new struct which supports standardized sizes
Guido van Rossum <guido@python.org>
parents: 3825
diff changeset
46 return ""
3825
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
47
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 # Check for GNU dbm
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 if magic == 0x13579ace:
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 return "gdbm"
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
51
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 # Check for BSD hash
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 if magic == 0x061561:
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 return "dbhash"
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
55
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 # Unknown
c3ec69b1fe36 Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 return ""