]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Initial revision
authorGuido van Rossum <guido@python.org>
Tue, 12 Nov 1991 15:38:08 +0000 (15:38 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 12 Nov 1991 15:38:08 +0000 (15:38 +0000)
Lib/lib-old/newdir.py [new file with mode: 0644]
Lib/newdir.py [new file with mode: 0644]
Lib/tempfile.py [new file with mode: 0644]

diff --git a/Lib/lib-old/newdir.py b/Lib/lib-old/newdir.py
new file mode 100644 (file)
index 0000000..7164b98
--- /dev/null
@@ -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 (file)
index 0000000..7164b98
--- /dev/null
@@ -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 (file)
index 0000000..02e73e1
--- /dev/null
@@ -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