home *** CD-ROM | disk | FTP | other *** search
- # Module 'dump'
- #
- # Print python code that reconstructs a variable.
- # This only works in certain cases.
- #
- # It works fine for:
- # - ints and floats (except NaNs and other weird things)
- # - strings
- # - compounds and lists, provided it works for all their elements
- # - imported modules, provided their name is the module name
- #
- # It works for top-level dictionaries but not for dictionaries
- # contained in other objects (could be made to work with some hassle
- # though).
- #
- # It does not work for functions (all sorts), classes, class objects,
- # windows, files etc.
- #
- # Finally, objects referenced by more than one name or contained in more
- # than one other object lose their sharing property (this is bad for
- # strings used as exception identifiers, for instance).
-
- # Dump a whole symbol table
- #
- def dumpsymtab(dict):
- for key in dict.keys():
- dumpvar(key, dict[key])
-
- # Dump a single variable
- #
- def dumpvar(name, x):
- import sys
- t = type(x)
- if t == type({}):
- print name, '= {}'
- for key in x.keys():
- item = x[key]
- if not printable(item):
- print '#',
- print name, '[', `key`, '] =', `item`
- elif t in (type(''), type(0), type(0.0), type([]), type(())):
- if not printable(x):
- print '#',
- print name, '=', `x`
- elif t == type(sys):
- print 'import', name, '#', x
- else:
- print '#', name, '=', x
-
- # check if a value is printable in a way that can be read back with input()
- #
- def printable(x):
- t = type(x)
- if t in (type(''), type(0), type(0.0)):
- return 1
- if t in (type([]), type(())):
- for item in x:
- if not printable(item):
- return 0
- return 1
- if x == {}:
- return 1
- return 0
-