The usual.

# Message to all python-checkins readers: we have a problem with the
# CVS mirroring software.  You can't check out the latest changes yet.
# We hope to have fixed this by noon EST today.
This commit is contained in:
Guido van Rossum 1998-12-22 13:50:33 +00:00
parent fdd302820e
commit 7ea1d972d1
6 changed files with 45 additions and 27 deletions

View File

@ -145,7 +145,7 @@ class CGIHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
if line[:1] in string.whitespace:
accept.append(string.strip(line))
else:
accept = accept + string.split(line[7:])
accept = accept + string.split(line[7:], ',')
env['HTTP_ACCEPT'] = string.joinfields(accept, ',')
ua = self.headers.getheader('user-agent')
if ua:

View File

@ -13,10 +13,11 @@ See module py_compile for details of the actual byte-compilation.
"""
import os
import stat
import sys
import py_compile
def compile_dir(dir, maxlevels=10, ddir=None):
def compile_dir(dir, maxlevels=10, ddir=None, force=0):
"""Byte-compile all modules in the given directory tree.
Arguments (only dir is required):
@ -25,6 +26,7 @@ def compile_dir(dir, maxlevels=10, ddir=None):
maxlevels: maximum recursion level (default 10)
ddir: if given, purported directory name (this is the
directory name that will show up in error messages)
force: if 1, force compilation, even if timestamps are up-to-date
"""
print 'Listing', dir, '...'
@ -43,6 +45,11 @@ def compile_dir(dir, maxlevels=10, ddir=None):
if os.path.isfile(fullname):
head, tail = name[:-3], name[-3:]
if tail == '.py':
cfile = fullname + (__debug__ and 'c' or 'o')
ftime = os.stat(fullname)[stat.ST_MTIME]
try: ctime = os.stat(cfile)[stat.ST_MTIME]
except os.error: ctime = 0
if (ctime > ftime) and not force: continue
print 'Compiling', fullname, '...'
try:
py_compile.compile(fullname, None, dfile)
@ -58,40 +65,44 @@ def compile_dir(dir, maxlevels=10, ddir=None):
name != os.curdir and name != os.pardir and \
os.path.isdir(fullname) and \
not os.path.islink(fullname):
compile_dir(fullname, maxlevels - 1, dfile)
compile_dir(fullname, maxlevels - 1, dfile, force)
def compile_path(skip_curdir=1, maxlevels=0):
def compile_path(skip_curdir=1, maxlevels=0, force=0):
"""Byte-compile all module on sys.path.
Arguments (all optional):
skip_curdir: if true, skip current directory (default true)
maxlevels: max recursion level (default 0)
force: as for compile_dir() (default 0)
"""
for dir in sys.path:
if (not dir or dir == os.curdir) and skip_curdir:
print 'Skipping current directory'
else:
compile_dir(dir, maxlevels)
compile_dir(dir, maxlevels, None, force)
def main():
"""Script main program."""
import getopt
try:
opts, args = getopt.getopt(sys.argv[1:], 'ld:')
opts, args = getopt.getopt(sys.argv[1:], 'lfd:')
except getopt.error, msg:
print msg
print "usage: compileall [-l] [-d destdir] [directory ...]"
print "usage: compileall [-l] [-f] [-d destdir] [directory ...]"
print "-l: don't recurse down"
print "-f: force rebuild even if timestamps are up-to-date"
print "-d destdir: purported directory name for error messages"
print "if no arguments, -l sys.path is assumed"
print "if no directory arguments, -l sys.path is assumed"
sys.exit(2)
maxlevels = 10
ddir = None
force = 0
for o, a in opts:
if o == '-l': maxlevels = 0
if o == '-d': ddir = a
if o == '-f': force = 1
if ddir:
if len(args) != 1:
print "-d destdir require exactly one directory argument"
@ -99,7 +110,7 @@ def main():
try:
if args:
for dir in args:
compile_dir(dir, maxlevels, ddir)
compile_dir(dir, maxlevels, ddir, force)
else:
compile_path()
except KeyboardInterrupt:

View File

@ -12,9 +12,11 @@ tricky uses of IOError may break, but the most common uses should work.
Here is a rundown of the class hierarchy. You can change this by editing this
file, but it isn't recommended. The class names described here are expected
to be found by the bltinmodule.c file.
to be found by the bltinmodule.c file. If you add classes here, you must
modify bltinmodule.c or the exceptions won't be available in the __builtin__
module, nor will they be accessible from C.
The classes with a `*' are new as of Python 1.5. They are defined as tuples
The classes with a `*' are new since Python 1.5. They are defined as tuples
containing the derived exceptions when string-based exceptions are used. If
you define your own class based exceptions, they should be derived from
Exception.
@ -33,6 +35,9 @@ Exception(*)
|
+-- EOFError
+-- RuntimeError
| |
| +-- NotImplementedError(*)
|
+-- NameError
+-- AttributeError
+-- SyntaxError
@ -130,6 +135,9 @@ class OSError(EnvironmentError):
class RuntimeError(StandardError):
pass
class NotImplementedError(RuntimeError):
pass
class SystemError(StandardError):
pass

View File

@ -64,7 +64,7 @@ class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
self.send_error(403, "Directory listing not supported")
return None
try:
f = open(path)
f = open(path, 'rb')
except IOError:
self.send_error(404, "File not found")
return None
@ -148,7 +148,7 @@ class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def test(HandlerClass = SimpleHTTPRequestHandler,
ServerClass = SocketServer.TCPServer):
ServerClass = BaseHTTPServer.HTTPServer):
BaseHTTPServer.test(HandlerClass, ServerClass)

View File

@ -273,18 +273,6 @@ class UDPServer(TCPServer):
pass
if hasattr(socket, 'AF_UNIX'):
class UnixStreamServer(TCPServer):
address_family = socket.AF_UNIX
class UnixDatagramServer(UDPServer):
address_family = socket.AF_UNIX
class ForkingMixIn:
"""Mix-in class to handle each request in a new process."""
@ -339,6 +327,17 @@ class ForkingTCPServer(ForkingMixIn, TCPServer): pass
class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass
if hasattr(socket, 'AF_UNIX'):
class UnixStreamServer(TCPServer):
address_family = socket.AF_UNIX
class UnixDatagramServer(UDPServer):
address_family = socket.AF_UNIX
class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): pass
class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): pass
class BaseRequestHandler:
@ -351,7 +350,7 @@ class BaseRequestHandler:
defines a handle() method.
The handle() method can find the request as self.request, the
client address as self.client_request, and the server (in case it
client address as self.client_address, and the server (in case it
needs access to per-server information) as self.server. Since a
separate instance is created for each request, the handle() method
can define arbitrary other instance variariables.

View File

@ -19,7 +19,7 @@ class UserList:
def __setitem__(self, i, item): self.data[i] = item
def __delitem__(self, i): del self.data[i]
def __getslice__(self, i, j):
userlist = UserList()
userlist = self.__class__()
userlist.data[:] = self.data[i:j]
return userlist
def __setslice__(self, i, j, list):