diff --git a/Lib/lib-old/newdir.py b/Lib/lib-old/newdir.py new file mode 100644 index 00000000000..7164b989743 --- /dev/null +++ b/Lib/lib-old/newdir.py @@ -0,0 +1,79 @@ +# New dir() function and other attribute-related goodies + +# This should become a built-in function +# +def getattr(x, name): + return eval('x.'+name) + +# This should be the new dir(), except that it should still list +# the current local name space by default +# +def listattrs(x): + try: + dictkeys = x.__dict__.keys() + except (NameError, TypeError): + dictkeys = [] + # + try: + methods = x.__methods__ + except (NameError, TypeError): + methods = [] + # + try: + members = x.__members__ + except (NameError, TypeError): + members = [] + # + try: + the_class = x.__class__ + except (NameError, TypeError): + the_class = None + # + try: + bases = x.__bases__ + except (NameError, TypeError): + bases = () + # + total = dictkeys + methods + members + if the_class: + # It's a class instace; add the class's attributes + # that are functions (methods)... + class_attrs = listattrs(the_class) + class_methods = [] + for name in class_attrs: + if is_function(getattr(the_class, name)): + class_methods.append(name) + total = total + class_methods + elif bases: + # It's a derived class; add the base class attributes + for base in bases: + base_attrs = listattrs(base) + total = total + base_attrs + total.sort() + return total + i = 0 + while i+1 < len(total): + if total[i] = total[i+1]: + del total[i+1] + else: + i = i+1 + return total + +# Helper to recognize functions +# +def is_function(x): + return type(x) = type(is_function) + +# Approximation of builtin dir(); this lists the user's +# variables by default, not the current local name space. +# Use a class method to make a function that can be called +# with or without arguments. +# +class _dirclass(): + def dir(args): + if type(args) = type(()): + return listattrs(args[1]) + else: + import __main__ + return listattrs(__main__) +dir = _dirclass().dir diff --git a/Lib/newdir.py b/Lib/newdir.py new file mode 100644 index 00000000000..7164b989743 --- /dev/null +++ b/Lib/newdir.py @@ -0,0 +1,79 @@ +# New dir() function and other attribute-related goodies + +# This should become a built-in function +# +def getattr(x, name): + return eval('x.'+name) + +# This should be the new dir(), except that it should still list +# the current local name space by default +# +def listattrs(x): + try: + dictkeys = x.__dict__.keys() + except (NameError, TypeError): + dictkeys = [] + # + try: + methods = x.__methods__ + except (NameError, TypeError): + methods = [] + # + try: + members = x.__members__ + except (NameError, TypeError): + members = [] + # + try: + the_class = x.__class__ + except (NameError, TypeError): + the_class = None + # + try: + bases = x.__bases__ + except (NameError, TypeError): + bases = () + # + total = dictkeys + methods + members + if the_class: + # It's a class instace; add the class's attributes + # that are functions (methods)... + class_attrs = listattrs(the_class) + class_methods = [] + for name in class_attrs: + if is_function(getattr(the_class, name)): + class_methods.append(name) + total = total + class_methods + elif bases: + # It's a derived class; add the base class attributes + for base in bases: + base_attrs = listattrs(base) + total = total + base_attrs + total.sort() + return total + i = 0 + while i+1 < len(total): + if total[i] = total[i+1]: + del total[i+1] + else: + i = i+1 + return total + +# Helper to recognize functions +# +def is_function(x): + return type(x) = type(is_function) + +# Approximation of builtin dir(); this lists the user's +# variables by default, not the current local name space. +# Use a class method to make a function that can be called +# with or without arguments. +# +class _dirclass(): + def dir(args): + if type(args) = type(()): + return listattrs(args[1]) + else: + import __main__ + return listattrs(__main__) +dir = _dirclass().dir diff --git a/Lib/tempfile.py b/Lib/tempfile.py new file mode 100644 index 00000000000..02e73e1e6e1 --- /dev/null +++ b/Lib/tempfile.py @@ -0,0 +1,32 @@ +# Temporary file name allocation + +import posix +import path + + +# Changeable parameters (by clients!)... +# XXX Should the environment variable $TMPDIR override tempdir? + +tempdir = '/usr/tmp' +template = '@' + + +# Kludge to hold mutable state + +class Struct(): pass +G = Struct() +G.i = 0 + + +# User-callable function +# XXX Should this have a parameter, like C's mktemp()? +# XXX Should we instead use the model of Standard C's tempnam()? +# XXX By all means, avoid a mess with four different functions like C... + +def mktemp(): + while 1: + G.i = G.i+1 + file = tempdir +'/'+ template + `posix.getpid()` +'.'+ `G.i` + if not path.exists(file): + break + return file