[Zodb-checkins] CVS: StandaloneZODB/Tools - fsdump.py:1.2
Jeremy Hylton
jeremy@zope.com
Wed, 23 Jan 2002 12:32:19 -0500
Update of /cvs-repository/StandaloneZODB/Tools
In directory cvs.zope.org:/tmp/cvs-serv20449
Modified Files:
fsdump.py
Log Message:
Just use the library.
=== StandaloneZODB/Tools/fsdump.py 1.1 => 1.2 ===
"""Print a text summary of the contents of a FileStorage."""
-from ZODB.FileStorage import FileIterator
-from ZODB.utils import U64
-from ZODB.tests.StorageTestBase import zodb_unpickle
+#! /usr/bin/env python
-from cPickle import Unpickler
-from cStringIO import StringIO
-import md5
-import types
+from ZODB.fsdump import fsdump
-def get_pickle_metadata(data):
- # ZODB's data records contain two pickles. The first is the class
- # of the object, the second is the object.
- if data.startswith('(c'):
- # Don't actually unpickle a class, because it will attempt to
- # load the class. Just break open the pickle and get the
- # module and class from it.
- modname, classname, rest = data.split('\n', 2)
- modname = modname[2:]
- return modname, classname
- f = StringIO(data)
- u = Unpickler(f)
- try:
- class_info = u.load()
- except Exception, err:
- print err
- return '', ''
- if isinstance(class_info, types.TupleType):
- if isinstance(class_info[0], types.TupleType):
- modname, classname = class_info[0]
- else:
- modname, classname = class_info
- else:
- # XXX not sure what to do here
- modname = repr(class_info)
- classname = ''
- return modname, classname
-
-def main(path):
- i = 0
- for trans in FileIterator(path):
- print "T %6d %016x %s %s %s" % (i, U64(trans.tid), trans.status,
- trans.user, trans.description)
- j = 0
- for rec in trans:
- modname, classname = get_pickle_metadata(rec.data)
- dig = md5.new(rec.data).hexdigest()
- fullclass = "%s.%s" % (modname, classname)
- # special case for testing purposes
- if fullclass == "ZODB.tests.MinPO.MinPO":
- obj = zodb_unpickle(rec.data)
- fullclass = "%s %s" % (fullclass, obj.value)
- print "D %6d %016x %016x %s %s" % (j, U64(rec.oid),
- U64(rec.serial),
- rec.version, fullclass)
- j += 1
- print
- i += 1
-
if __name__ == "__main__":
import sys
- main(sys.argv[1])
+ fsdump(sys.argv[1])