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: if line[:1] in string.whitespace:
accept.append(string.strip(line)) accept.append(string.strip(line))
else: else:
accept = accept + string.split(line[7:]) accept = accept + string.split(line[7:], ',')
env['HTTP_ACCEPT'] = string.joinfields(accept, ',') env['HTTP_ACCEPT'] = string.joinfields(accept, ',')
ua = self.headers.getheader('user-agent') ua = self.headers.getheader('user-agent')
if ua: if ua:

View file

@ -13,10 +13,11 @@ See module py_compile for details of the actual byte-compilation.
""" """
import os import os
import stat
import sys import sys
import py_compile 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. """Byte-compile all modules in the given directory tree.
Arguments (only dir is required): Arguments (only dir is required):
@ -25,6 +26,7 @@ def compile_dir(dir, maxlevels=10, ddir=None):
maxlevels: maximum recursion level (default 10) maxlevels: maximum recursion level (default 10)
ddir: if given, purported directory name (this is the ddir: if given, purported directory name (this is the
directory name that will show up in error messages) directory name that will show up in error messages)
force: if 1, force compilation, even if timestamps are up-to-date
""" """
print 'Listing', dir, '...' print 'Listing', dir, '...'
@ -43,6 +45,11 @@ def compile_dir(dir, maxlevels=10, ddir=None):
if os.path.isfile(fullname): if os.path.isfile(fullname):
head, tail = name[:-3], name[-3:] head, tail = name[:-3], name[-3:]
if tail == '.py': 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, '...' print 'Compiling', fullname, '...'
try: try:
py_compile.compile(fullname, None, dfile) 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 \ name != os.curdir and name != os.pardir and \
os.path.isdir(fullname) and \ os.path.isdir(fullname) and \
not os.path.islink(fullname): 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. """Byte-compile all module on sys.path.
Arguments (all optional): Arguments (all optional):
skip_curdir: if true, skip current directory (default true) skip_curdir: if true, skip current directory (default true)
maxlevels: max recursion level (default 0) maxlevels: max recursion level (default 0)
force: as for compile_dir() (default 0)
""" """
for dir in sys.path: for dir in sys.path:
if (not dir or dir == os.curdir) and skip_curdir: if (not dir or dir == os.curdir) and skip_curdir:
print 'Skipping current directory' print 'Skipping current directory'
else: else:
compile_dir(dir, maxlevels) compile_dir(dir, maxlevels, None, force)
def main(): def main():
"""Script main program.""" """Script main program."""
import getopt import getopt
try: try:
opts, args = getopt.getopt(sys.argv[1:], 'ld:') opts, args = getopt.getopt(sys.argv[1:], 'lfd:')
except getopt.error, msg: except getopt.error, msg:
print 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 "-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 "-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) sys.exit(2)
maxlevels = 10 maxlevels = 10
ddir = None ddir = None
force = 0
for o, a in opts: for o, a in opts:
if o == '-l': maxlevels = 0 if o == '-l': maxlevels = 0
if o == '-d': ddir = a if o == '-d': ddir = a
if o == '-f': force = 1
if ddir: if ddir:
if len(args) != 1: if len(args) != 1:
print "-d destdir require exactly one directory argument" print "-d destdir require exactly one directory argument"
@ -99,7 +110,7 @@ def main():
try: try:
if args: if args:
for dir in args: for dir in args:
compile_dir(dir, maxlevels, ddir) compile_dir(dir, maxlevels, ddir, force)
else: else:
compile_path() compile_path()
except KeyboardInterrupt: 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 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 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 containing the derived exceptions when string-based exceptions are used. If
you define your own class based exceptions, they should be derived from you define your own class based exceptions, they should be derived from
Exception. Exception.
@ -33,6 +35,9 @@ Exception(*)
| |
+-- EOFError +-- EOFError
+-- RuntimeError +-- RuntimeError
| |
| +-- NotImplementedError(*)
|
+-- NameError +-- NameError
+-- AttributeError +-- AttributeError
+-- SyntaxError +-- SyntaxError
@ -130,6 +135,9 @@ class OSError(EnvironmentError):
class RuntimeError(StandardError): class RuntimeError(StandardError):
pass pass
class NotImplementedError(RuntimeError):
pass
class SystemError(StandardError): class SystemError(StandardError):
pass pass

View file

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

View file

@ -273,18 +273,6 @@ class UDPServer(TCPServer):
pass pass
if hasattr(socket, 'AF_UNIX'):
class UnixStreamServer(TCPServer):
address_family = socket.AF_UNIX
class UnixDatagramServer(UDPServer):
address_family = socket.AF_UNIX
class ForkingMixIn: class ForkingMixIn:
"""Mix-in class to handle each request in a new process.""" """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 ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
class ThreadingTCPServer(ThreadingMixIn, TCPServer): 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: class BaseRequestHandler:
@ -351,7 +350,7 @@ class BaseRequestHandler:
defines a handle() method. defines a handle() method.
The handle() method can find the request as self.request, the 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 needs access to per-server information) as self.server. Since a
separate instance is created for each request, the handle() method separate instance is created for each request, the handle() method
can define arbitrary other instance variariables. can define arbitrary other instance variariables.

View file

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