Mercurial > cpython-lru_cache-weakref
annotate Lib/whichdb.py @ 4566:6403c94de50d legacy-trunk
Added safeguard against failure in __del__.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Wed, 27 Nov 1996 19:39:58 +0000 |
| parents | c3ec69b1fe36 |
| children | b378753825a0 |
| 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: |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 (magic,) = struct.unpack("l", s) |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 except struct.error: |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 try: |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 (magic,) = struct.unpack("i", s) |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 except struct.error: |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 return "" |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
51 # Check for GNU dbm |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 if magic == 0x13579ace: |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 return "gdbm" |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 # Check for BSD hash |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 if magic == 0x061561: |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 return "dbhash" |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 # Unknown |
|
c3ec69b1fe36
Function to guess which db package created a database.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 return "" |
